Australia, chasing 290 for victory, were restricted to 264 for seven in their 50 overs.
Earlier, Jacques Kallis and AB de Villiers led South Africa to 289 for six with classy half-centuries.
The pair came together with the hosts struggling on 50 for two in the 15th over on a slow pitch but took control with a stand of 114 off 131 balls.
Kallis scored 70 off 86 deliveries with five fours and immediately took the run-rate forward with a series of commanding front-foot drives.
South Africa’s leading run-scorer fell to a soft dismissal, pulling a Brett Geeves long-hop straight to wide mid-on at the end of the 36th over.
De Villiers went on to hit 80 in 87 balls and was out in the 41st over when paceman Mitchell Johnson had him caught off a leading edge, playing too early to the leg-side.
Busy innings in the last five overs by Albie Morkel (29) and Mark Boucher (28 not out) then capitalised on the fine work of the middle order.
Johnson, who used changes of pace to good effect, was difficult to get away and finished with outstanding figures of four for 34.
Australia, in reply, slump-ed to 114 for five before Callum Ferguson (63) and James Hopes (63 not out) gave them hope by adding 97 off 89 balls for the sixth wicket.
Slow left-armer Roelof van der Merwe, who took three for 37, had Ferguson caught at deep extra cover before the brilliant JP Duminy produced his second run-out of the innings to remove Johnson for nine.
Hopes collected five fours in a late flurry as he scored his unbeaten 63 in 60 balls.
The fourth match in Port Elizabeth is on Monday.