Kermit Erasmus gave Bafana the lead on his return to the national team with a 35th minute penalty, before Percy Tau added a sumptuous second on debut in the 69th minute.
Guinea-Bissau pulled a goal back with 12 minutes left, but two minutes from time Andile Jali netted another penalty to seal a morale-boosting win for caretaker-coach Owen Da Gama’s side.
Bafana started positively, with Kamohelo Mokotjo, on his return to the Bafana side, spraying passes around in fine fashion.
Having said that, the Bafana defence was twice caught square in the opening six minutes, with Guinea-Bissau striker Toni Silva running into the space behind left back Tebogo Langerman.
The first time, South Africa’s defenders recovered to stop Silva, and the second time it was goalkeeper Itumeleng Khune who cleared as Silva attempted to go round him.
Bafana threatened as Mokotjo produced a sublime through ball for Langerman, but he over-hit his attempted cross.
Themba Zwane then released Ramahlwe Mphahlele down the other wing, but his cross was tipped away by Guinea-Bissau goalkeeper Papa Masse Fall.
At the other end, Piqueti, who scored a wonderful goal against Cameroon at the 2017 Africa Cup of Nations finals, cut inside and lashed a shot just wide of Khune’s near post.
Bafana started to move the ball better in attack as the half wore on, and in the 29th minute Mokotjo found Keagan Dolly, and his terrific flick released Erasmus, but the former Orlando Pirates striker took too long to get his shot away and was tackled.
In the 32nd minute Thulani Serero burst into the box, and his cut back found Themba Zwane, but the Sundowns forwards’ shot was blocked and trickled through to Fall.
Three minutes later, however, a Dolly pass found its way to Serero, who flicked the ball over Fall and made his way into the area, only to be brought down by Rudinilson Silva. Zambian referee Janny Sikazwe had no hesitation in pointing to the spot and Erasmus sent Fall the wrong way to give Bafana the lead.
Serero should have doubled Bafana’s lead before half time, as another neat passing move saw him clean through on goal. But the Ajax Amsterdam man inexplicably opted to play a blind back-heel pass instead of shooting.
The game continued to be well-balanced after the break, and just after the hour mark, Guinea-Bissau captain Nani Soares fired a shot not too far over the bar.
Da Gama had already brought on Andile Jali for Zwane at that point, and soon also made a double attacking substitution, with Lebogang Manyama replacing Mokotjo, and Tau on for Erasmus.
Tau was booked seconds after coming on for a rash challenge, but soon made up for that in the 69th minute as he gathered a fine pass from Dolly, and brilliantly beat Fall from an acute angle.
Guinea-Bissau almost pulled a goal back immediately, as Nani Soares ran through and tried to round Khune, but again the Bafana captain intervened.
And the Wild Dogs did get a goal in the 78th minute, as Toni Silva crossed for substitute Aldair, who slotted home from close range.
Serero curled an effort wide in the 80th minute, and that was to be his last contribution as he was replaced a minute later by Hlompho Kekana, with Thabo Mnyamane also coming on for Dolly.
Guinea-Bissau tested Khune again as Aldair’s free kick drifted towards goal in the 86th minute, but the Bafana ‘keeper was alert to tip the ball over the bar.
And Bafana were awarded another penalty a minute later, Kekana going down in the box, and Jali this time beating Fall. Bafana were dealt a blow just before the end, however, as Jali was stretchered off with a serious-looking injury, and replaced by Tiyani Mabunda.
Download our app and read this and other great stories on the move. Available for Android and iOS.