Amare Stoudemire scored a team-high 30 points for the Suns and Richardson finished with 20, including two game-tying free throws with 40 seconds left, as Phoenix snapped the Thunder’s nine-game winning streak.
Richardson’s 10-footer capped the Suns’ rally from 10 points down with only three minutes left.
“That was the play we drew up,” Phoenix forward Grant Hill told reporters.
“If he had an open look he was supposed to take it. If not, then make something happen. He did, he went through his legs, crossed over and shot a floater.”
Jeff Green had the chance to win it for the Thunder but his three-point attempt was off the mark as time expired.
Richardson added 13 rebounds for Phoenix (35-23), who won their third in a row despite missing All-Star point guard Steve Nash, out with a sore back and abdomen.
Oklahoma City forward Kevin Durant had 36 points, the 29th game in a row he has scored at least 25, but it was not enough to prevent the Thunder (33-22) suffering their first loss since Jan. 27.
“This loss really hurts,” said a subdued Durant. “It’s tough, but we just have to be ready for the next game.”
Durant, who entered the night second in the league in scoring, has the longest streak of 25-point games since Michael Jordan reached the mark 40 consecutive times in the 1986-87 season.
Russell Westbrook had 21 points and 10 assists for the Thunder, who were attempting to win 10 in a row for the first time since the franchise was based in Seattle in 1996.
The Suns moved into fifth place in the Western Conference with the victory.