Hansi Flick's Barcelona twice came from behind to equalise, but goals from Vitinha and Fabián Ruiz in the final 10 minutes secured victory for the defending European champions at the Parc des Princes in Paris.
The defeat ended Barcelona's run of 11 consecutive wins across all competitions this season, while PSG registered their third straight victory in the Champions League league phase.
The hosts started aggressively, putting Barcelona's defence under pressure from the opening minutes. Khvicha Kvaratskhelia struck the post after just two minutes as PSG created several early opportunities.
Barcelona goalkeeper Joan García made a string of impressive saves to keep his side in contention, but PSG eventually broke the deadlock in the 38th minute.
João Neves intercepted a misplaced pass from Lamine Yamal, allowing Désiré Doué to advance and fire a low shot past García from outside the penalty area.
PSG dominated much of the first half, creating repeated chances. According to Opta, they registered 10 shots on target before the break, the most Barcelona have faced in the first half of a Champions League match since such records began in 2003-04.
Barcelona responded after the interval and drew level in the 55th minute when 19-year-old Xavi Espart collected a pass from Fermín López and fired past PSG goalkeeper Matvey Safonov.
The visitors grew in confidence after the equaliser and created further opportunities, but PSG regained the lead in the 72nd minute.
Lucas Hernández rose to head home a corner delivered by Doué, putting the French champions ahead for the second time.
Barcelona refused to surrender and equalised again in the 79th minute through Yamal, who produced a superb individual effort before firing into the net from a tight angle.
However, the visitors' celebrations were short-lived as PSG restored their advantage just two minutes later.
Vitinha controlled the ball outside the penalty area after Barcelona failed to clear their lines and drove a powerful shot into the bottom corner in the 81st minute.
Barcelona pushed forward in search of another equaliser, leaving spaces at the back.
PSG capitalised in the 86th minute when Achraf Hakimi delivered a cross for Ruiz to finish from close range and seal the 4-2 victory.
Despite twice fighting back, Barcelona were unable to contain PSG's attacking pressure in the closing stages and suffered their first defeat of the season.
The result took PSG to nine points from three Champions League matches, maintaining their perfect record in the competition alongside Liverpool.
