The minibus exploded into a fireball and ended up lying on its side.
The bus driver also died while the driver of the truck survived.
A number of children, who were found trapped inside the vehicle by paramedics after the flames were put out, were declared dead at the scene.
Several other pupils were hurt – some were reportedly dragged from the wreckage by passers-by.
Their injuries ranged from minor to critical.
The tragedy happened on a road between the towns of Bronkhorstspruit and Verena, 45 miles from the capital Pretoria, in Mpumalanga province.
Mpumalanga police spokesman Gerald Sedibe said: “The (minibus) was transporting learners from school and it collided with the truck and caught fire.”
Spokesman for the ER24 emergency medical service, Russel Meiring, said: “It is confirmed 20 children have been killed.”
He added: “Paramedics arrived on the scene to find the fire services already in attendance.
“The fire services had already extinguished the burning vehicle, which was found lying on its side.”
The cause of the crash is not yet known.
South Africa has a poor road safety record.
Road deaths rose to 235 during this year’s Easter weekend compared with 156 fatalities last year.