最近項目須要用到微信支付,之前弄過淘寶支付,其實原理都差很少,在此作個筆記,方便之後用到。php
微信支付分幾種,而我只用到了微信內網頁支付,其餘支付過程大同小異。html
官方文檔:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=7_1算法
微信頁內支付:用戶經過消息或掃描二維碼在微信內打開網頁時,能夠調用微信支付完成下單購買的流程。api
整體業務流程時序圖:安全
咱們就根據時序圖,逐步記錄分解說明。服務器
申請微信公衆號支付,必需知足如下條件:
一、公衆號爲服務號,且爲企業、媒體、政府及其餘組織類型;
二、已完成微信認證(完成資質認證或名稱認證,審覈服務費用:300元/次)微信
認證申請是一個漫長又繁瑣的過程~~網絡
官方文檔:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=9_1異步
除被掃支付場景之外,商戶系統先調用該接口在微信支付服務後臺生成預支付交易單,返回正確的預支付交易回話標識後再按掃碼、JSAPI、APP等不一樣場景生成交易串調起支付。測試
注意:
(1)其中籤名算法必定要按照規定,http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=4_3
(2)文檔中提到的APP密匙是在商戶系統-》帳戶設置-》安全設置-》API安全裏面得到的密匙,而不是Appsecret(由於這裏理解錯誤,我花了兩天困在了簽名!)。
APP密匙:交易過程生成簽名的密鑰,僅保留在商戶系統和微信支付後臺,不會在網絡中傳播。商戶妥善保管該Key,切勿在網絡中傳輸,不能在其餘客戶端中存儲,保證key不會被泄漏。商戶可根據郵件提示登陸微信商戶平臺進行設置。
(3)不要泄露任何密匙相關信息,因此全部的簽名操做都須要提交給服務器完成,不要在html裏面硬編碼。
(4)notify_url是接收微信支付異步通知回調地址,是判斷支付是否成功的關鍵,該URL不能附帶任何相似?A=1&B=2的參數,會被過濾掉,參數應該附加在attach附加參數這個字段中。異步通知回調的時候會原封返回,處理完成數據以後,記得返回微信服務器成功信息,否則會按期重傳。關於回調的相關文檔http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=9_7
完成統一下單接口以後,與微信支付交互,就可以獲得頁內支付的預交易會話標識了。
官方文檔:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=7_7
因爲又要簽名一次,簽名用到API密匙,因此服務端要提供簽名接口,其中的參數能夠在服務端生成,也能夠由客戶端生成。
根據文檔要求,簽名完成以後,就調用微信JSAPI直接進入支付流程便可。
整個過程採用XML數據傳輸。