PSG took an early lead in the seventh minute when City failed to clear a cross into the box and Idrissa Gueye smashed the ball into the top corner.
City responded as Raheem Sterling headed against the crossbar, before Bernardo Silva fired the loose ball back up onto the bar when it looked certain he would score.
Messi, back following a knee problem, capped a fine all-round display when he played a one-two with Kylian Mbappe on the edge of the penalty area and clipped a wonderful finish into the top corner.
PSG move top of Group A, with City down to third after Brugge won 2-1 at Leipzig.
Christopher Nkunku put the Bundesliga side ahead in the fifth minute from close range, with the goal given following a lengthy VAR review.
In the 22nd minute, Brugge captain Hans Vanaken saw an equaliser ruled out for offside after the hosts had been caught trying to play out from the back – only for VAR to swiftly overturn the decision.
The Belgians turning things around when they took the lead five minutes before half-time when Mats Rits knocked a loose ball in from six yards.
Sheriff Tiraspol pulled off an enormous shock as they won 2-1 at Real Madrid to make it two wins out of two in Group D with a late strike from Sebastien Thill.
Jasur Jakhshibaev headed the Moldovan outfit into the lead in the 25th minute, but Los Blancos were level through a penalty from a second-half penalty by Karim Benzema, given following a VAR review.
The visitors, though, snatched all three points with just a minute left when Thill drove the ball into the top corner from 20 yards to leave the Bernabeu in stunned silence.
Earlier, new heavyweight world champion Oleksandr Usyk was watching in the stands as Shakhtar Donetsk and Inter Milan played out a goalless draw at the Olympic Stadium in Kyiv.
Liverpool took control of Group B as they ran out 5-1 winners at Porto.
Mohamed Salah put the Premier League side ahead in the 18th minute when he bundled the ball in after Curtis Jones’ angled drive from the left had been pushed out by the keeper.
Sadio Mane tapped home a second just ahead of half-time after James Milner’s cross from the right went right through the six-yard box.
Salah added a second just after the hour after being set up by Curtis Jones.
Mehdi Taremi pulled one back for the hosts, only for Roberto Firmino to roll in a fourth on the break after goalkeeper Diogo Costa was caught upfield and could only race back to scoop the ball out from behind the line.
The Brazilian added a fifth when tucking in a rebound.
The Serie A side were rewarded for a positive start when Rafael Leao drilled in a low shot from the edge of the penalty area in the 20th minute.
Milan, though, were reduced to 10 men just nine minutes later when midfielder Kessie was dismissed for a second caution.
Antoine Griezmann finally levelled things up with six minutes left with a well-taken volley and Suarez had the last word when his scuffed spot-kick squirmed past Mike Maignan.
Ajax maintained their 100 per cent start to Group C with a 2-0 win over Besiktas at the Johan Cruijff ArenA, while Borussia Dortmund beat Sporting Lisbon 1-0 at Signal Iduna Park.