Miami (8-14-4, 28 points), which played without Lionel Messi and seven others due to national team duty, is 3-0-1 in its past four MLS matches and unbeaten in 12 straight across all competitions.
Kansas City (8-12-8, 32 points) had its two-match winning streak end and allowed three goals in an MLS match for the first time since May 20.
Daniel Salloi was in the right place at the right time to put the visitors ahead 1-0 in the ninth minute. Goalkeeper Drake Callender got his hands up to stop a long-range shot from Felipe Gutierrez but couldn’t snare the rebound and was beaten to it by Salloi at the edge of the six-yard box.
Campana capitalized on a penalty kick to bring Miami level in the 25th minute, striking past the outstretched arm of goalkeeper Tim Melia.
Campana’s second of the match put the home side ahead 2-1 in the 45th minute. After losing control of the ball in the box, DeAndre Yedlin recovered it down low on the right side and whipped a cross that Campana headed past Melia.
Miami took advantage of Kansas City napping on a quick restart after a stoppage to extend the lead to 3-1 in the 60th minute. As defender Andreu Fontas tried to argue a handball against Miami, Sergio Busquets took the ball for a free kick, sending a long pass to Facundo Farias, who drove up the right side unmarked before firing it past Melia.
Alan Pulido scored from high in the box into the far corner to narrow it to 3-2 in the 78th minute.