Haaland, who also grabbed an assist, cancelled out Florian Wirtz’s opener with a,
towering header and later scored the winner from the penalty spot.
In a frantic encounter, Czech Republic striker Patrik Schick and French winger Moussa Diaby scored for Leverkusen.
But goals from Haaland, Julian Brandt and Raphael Guerreiro saved Dortmund.
England midfielder Jude Bellingham had a goal ruled out for Dortmund shortly before,
half-time and Schick capitalised to put Leverkusen in the driving seat going into the break.
But Leverkusen’s lead lasted only minutes into the second half as Brandt controlled,
Haaland’s pass with his heel before firing into the roof of the net.
Six minutes later, Diaby’s long-range strike made it 3-2 to the hosts,
but Guerreiro‘s superb free-kick once again brought Dortmund level.
Marco Reus was eventually awarded a penalty when he was struck in the face by,
the arm of Odilon Kossounou and Haaland kept his cool to slot in the winner for Dortmund in the 77th minute.