England must face a weekend decider in Cape Town after Chris Morris’s maiden one-day international 50 sent them to an agonising one-wicket defeat at the Wanderers.
Following Joe Root’s century, and despite a middle-order collapse of five wickets for 21 runs, the tourists appeared set to defend their total of 262 all out.
But No 8 Morris (62) cashed in, after being badly-dropped by Adil Rashid, with some brilliant late hitting as South Africa won with 16 balls to spare and levelled the series at 2-2.
It was an aggravating outcome for England, who were all but home when Rashid seemed sure to hold a routine chance at mid-off from the bowling of Reece Topley.
Instead, Morris escaped on 14 – with eight wickets down and 52 runs still needed – and responded with a 30-ball 50 containing three sixes and two fours.
It was the only half-century of patchy South Africa chase, transformed in a ninth-wicket stand of 52 with Kyle Abbott.
Then even after Rashid bowled Morris with scores level, No 11 Imran Tahir strode in and hit his first ball past cover for four for victory.
England had made their own problems, with three dropped catches in all, and they had no answer to Morris – who last week landed a million-dollar Indian Premier League deal with Delhi Daredevils.
But it was hard on Root (109) and Chris Woakes in particular to end up on the losing side – after the latter had shared a 95-run stand for the seventh wicket with England’s centurion, bowled well too and pulled off a brilliant run-out to eliminate home captain AB de Villiers.
Root ensured England overcame their middle-order implosion.
Then Woakes, in his first match of the series, was impressive in his first spell and might easily have taken more than his solitary wicket.
At this venue known as the Bullring because of its intimidating atmosphere, however, England could not quite hold their nerve.
South Africa wore their all-pink kit, rather than accustomed green and yellow, for an annual occasion which raises money for breast cancer charities and awareness.
It was England who soon had the red faces, though, when Tahir took three wickets in seven balls as the tourists hit trouble from 87-1 after De Villiers put them in.
South Africa’s seamers kept England notably quiet early on, and Jason Roy fell hooking Kagiso Rabada (four for 45) to long-leg.
Hales and Root’s third consecutive half-century stand ended when, one ball after reaching his 50, the opener picked out deep midwicket with a slog-sweep at Tahir (3-46).
The leg-spinner doubled up in his next over, Eoin Morgan cutting aerially and Ben Stokes very well-caught off another googly by a diving Hashim Amla at slip.
When Abbott then bounced out Jos Buttler and Moeen Ali in successive overs, England’s powerhouse quartet from four to seven had failed to muster double-figures between them.
Root found an ally in Woakes, on the way to his eighth ODI hundred – following up his career-best 125 in Tuesday’s defeat at Centurion.
The returning Rabada’s extra pace had Woakes caught-behind hooking, but Root passed his century in 119 balls.
An attempted paddle-scoop at Morris did for him, caught at short fine-leg in the 45th over.
But Rashid was dropped on 16 at long-off by Farhaan Behardien, and more than doubled that score before he was last out in the 48th over trying to hit Rabada over the top.
Stuart Broad, in his first white-ball match for 11 months since last year’s World Cup, almost immediately had Amla edging on to his stumps in defence.
Quinton de Kock and Faf du Plessis both went with the score on 63.
De Kock also played on, to Stokes, and Du Plessis closed the face on a Woakes outswinger and lost his off-stump.
England had several opportunities to take the fourth wicket quickly, both JP Duminy and De Villiers offering tough chances before reaching double-figures.
Hales dropped Duminy off Woakes at second slip, diving across substitute fielder Chris Jordan at first, and De Villiers was reprieved when Roy could not hold on at point off Broad.
But Woakes reacted brilliantly in his follow-through to throw down the stumps and end a stand of 58, after Duminy called his captain for an unwise single.
Then Duminy was pinned lbw on the back foot by a Rashid leg-break – and when Topley held a very good one-handed return catch to see off Behardien, England soon seemed sure to prevail.
Morris, however, had other ideas.