微信支付分爲JSAPI支付,掃碼支付,APP支付,小程序支付等不一樣的支付方式。但大致的支付過程是一致的,本文以JSAPI支付,也就是微信內的H5支付爲例,描述一下支付的整個開發流程。php
商戶須要提早開通商戶平臺,並去公衆平臺或開放平臺提交微信支付申請,得到商戶號和祕鑰。前端
詳細文檔能夠看這裏mongodb
微信支付的流程圖畫的很完整,開發前要把整個流程研究清楚。小程序
整個流程,服務端須要作的有三件事。後端
在支付前,商戶系統先調用該接口在微信支付後臺生成預支付交易單,一樣的,商戶系統也須要在本身的表裏記錄一筆「未完成訂單」。生成以後返回正確的預付單信息、支付參數和參數簽名返回給前端。前端根據這些參數喚起支付。api
接口微信
https://api.mch.weixin.qq.com/pay/unifiedorder
參數巨多,具體仍是看文檔app
這裏須要說明的一點是,咱們在調用這個接口時,須要籤一次名用來給微信作校驗,微信也返回了一個新的簽名用來給咱們作校驗,而後咱們還要返回給前端一個簽名,用來喚起支付。這三個簽名都不是同一個。微信支付
咱們不能直接把調用統一下單接口返回的簽名返回給前端,而是根據前端喚起支付的參數去從新簽名。url
注意,是根據前端喚起支付的參數去從新簽名,由於前端的參數名和後端的參數名會略微有差異,這裏須要當心。
說明:簽名的意圖是用來校驗身份,當前端把這些參數傳給微信,微信會把調用參數除去簽名後從新簽名,用來校驗簽名的正確性,因此用來簽名的參數名要和前端參數一致。
在統一下單時咱們填了一個參數叫 notify_url
,這是一個服務端的接口地址,微信在用戶支付成功後,會回調這個地址,告知咱們支付結果。
在這一步仍是須要作多點校驗的,省得被人有隙可乘。
一通校驗完事以後就能夠作業務相關的事了。記得全部操做結束後返回"SUCCESS",否則微信會不斷髮起回調。