Barca were far from their classic best that saw them lift the trophy in 2009 and 2011 but a stuttering version under Gerardo Martino that had lost two of their last three games. (Agencies)
City, who lost the first leg 2-0 at home, were left to rue several missed chances from David Silva, Samir Nasri and Pablo Zabaleta.
Messi put his side in front by producing a neat finish with the outside of his left boot from close range in the 67th minute after defender Joleon Lescott failed to stop a routine through-ball from Cesc Fabregas.
City's night got worse when Zabaleta was sent off 11 minutes later after picking up a second yellow for dissent.
The Argentinian defender was incensed with referee Stephane Lannoy's decision to ignore City's strong penalty clains when substitute Edin Dzeko went down in the area under a challenge by Gerard Pique.
City skipper Vincent Kompany made it 1-1 on the night in the 89th minute, tapping in from two yards out, but City could not even hold on to that moral victory, for Brazilian Dani Alves won the game for the home side in the first minute of injury time, sweeping home with his right foot.
Barca had played deeper than usual, looking to entice City to come at them so they could pounce on the counter. It was a tentative game early on, as City held back and Barca's passing lacked fluidity.
The first half ended in a flourish as Neymar took advantage of a slip by Aleksandar Kolarov and his shot was scrambled wide by Joe Hart, while he also had another effort cleared off the line by Fernandinho.
In between Nasri fired straight at Victor Valdes having been set up by Silva.
After the break Messi's threat grew. He came in from the right in the 50th minute and hit the post with a low left-foot shot from inside the area.
At the other end Dzeko, who had replaced Aguero, had a header brilliantly clawed away by Valdes.
Barca were far from their classic best that saw them lift the trophy in 2009 and 2011 but a stuttering version under Gerardo Martino that had lost two of their last three games.