It was all or nothing for Bayer Leverkusen, who needed to better the result of Roma against Barcelona to progress in the Champions League. Bayern Munich were already through and won easily in Zagreb.
Bayer Leverkusen 1-1 Barcelona
(Hernandez 23‘ – Messi 20‘)
No player has scored on more occasions in the Champions League against German teams than Lionel Messi. He added to his tally with his 15th against German opposition after only 20 minutes in the BayArena, dampening the home fans' spirits.
Ivan Rakitic sent a sumptuous ball through the Bayer Leverkusen defense, which Messi latched on to, before rounding Bernd Leno and tucking home to give Barcelona the lead.
It seemed like it was the same story as always for Leverkusen, who have struggled to progress to the latter stages of the Champions League since losing in the final in 2002 to Real Madrid. A better result than Roma at home to BATE Borisov was needed, and three minutes after Messi’s opener, hope was restored.
With his 14th goal in his 19 appearances for Leverkusen, Javier Hernandez leveled the score. Admir Mehmedi’s low cross was flicked on by Hakan Calhanoglu to the Mexican forward, who curled home with his left-foot.
A night of frustration in Leverkusen
At the start of the second half, Leverkusen had a fantastic chance to take the lead. Calhanoglu picked up a loose ball at the back-post following good work from Hernandez, but curled his effort wide of Marc-Andre ter Stegen’s far post.
Leverkusen continued to pile the pressure on ter Stegen’s goal, with Karim Bellarabi, Calhanoglu and Hernandez all forcing several saves from the German goalkeeper. The efforts were in good positions for the former Borussia Mönchengladbach man to save, but the frequency of them made the home fans feel a goal was coming.
With just a minute to play, a final chance came for Roger Schmidt’s star player. Stefan Kiessling did well on the right-flank and his near-post cross was poked towards goal by Hernandez, only for the outstretched left arm of ter Stegen to stop him once again.
Leverkusen were left evidently frustrated, with Hernandez and Bellarabi going face-to-face just before the full-time whistle, but the result means that it is now Europa League football for Schmidt’s side.
"Tonight felt like a tragedy. We should have won," Schmidt said after the game. "The fact that we didn't win is something I'll remember for the rest of my life."
Dinamo Zagreb 0-2 Bayern Munich
(Lewandowski 61‘, 64‘)
The first half left plenty to be desired in Zagreb, as Bayern Munich's six new faces to the starting lineup grew into the match. Julian Green, the American youngster who has scored eight goals in 19 games for Bayern’s second-team this season, started in the first team for the first time since November 2014.
It wasn’t until after half-time, though, that the game came to life. Medhi Benatia - who had taken a knock - and Franck Ribery came off, replaced by Jerome Boateng and Thomas Müller. The latter making an immediate impact.
Müller’s cross found a diving Robert Lewandowski to head home after the hour mark. Three minutes later and the Polish forward had his seventh Champions League goal of the season, as he chipped over Eduardo with style after a great through-ball from Sebastian Rode.
As the clock ticked towards full time, Arturo Vidal earned his side the chance to wrap-up a comfortable win from the penalty spot. Thomas Müller - who had scored five out of five penalties so far this season until this point - stepped up, but hit his effort against the post.
Bayern finish top of Group F, ahead of Arsenal in second place, with five wins from the six group stage matches.
The results mean that two of the four German teams that took part in the Champions League group stages progressed, with Bayer Leverkusen joining Borussia Mönchengladbach in exiting Europe's elite club competition.
The draw for the knockout stages of the Champions League takes place on Monday evening.