一笋粟、前期準(zhǔn)備工作
1.登錄公司支付寶賬號(hào)探入,申請(qǐng)開(kāi)通即時(shí)到賬的服務(wù)。
2.根據(jù)支付寶文檔的要求生成公鑰私鑰并上傳到公司支付寶賬戶中琢蛤,然后就可以查詢到對(duì)應(yīng)的支付寶公鑰了蜓堕。(注意事項(xiàng):將支付寶公鑰復(fù)制到一個(gè) .pem 文件如下圖的中間位置,每行64個(gè)字符博其,若格式不匹配套才,后面驗(yàn)證簽名時(shí)會(huì)報(bào)錯(cuò))
-----BEGIN PUBLIC KEY-----
這里是支付寶公鑰
-----END PUBLIC KEY-----
3.下載支付寶即時(shí)到賬接口文檔(php)。
二慕淡、接口調(diào)試
1.根據(jù)公司所有的php框架和現(xiàn)有的架構(gòu)進(jìn)行分析背伴,設(shè)想幾種對(duì)接的方式,尋找相對(duì)合理的解決方案峰髓。
2.接口對(duì)接之簽名驗(yàn)證:常見(jiàn)的 MD5 和 RSA (MD5 的實(shí)現(xiàn)較 RSA 簽名模式的實(shí)現(xiàn)要簡(jiǎn)單的多傻寂,推薦使用 RSA 簽名驗(yàn)證,MD5便于偽造携兵,而公鑰和私鑰則很難偽造)
3.調(diào)試過(guò)程中出現(xiàn)最多的錯(cuò)就是簽名錯(cuò)誤疾掰,要么是參數(shù)不正確,要么是證書(shū)的路徑不正確眉孩,下面這個(gè)三個(gè)文件是非常重要的个绍,缺一不可勒葱。
商戶私鑰文件:步驟一中生成的私鑰文件
支付寶公鑰文件:步驟一中上傳秘鑰后獲取的支付寶公鑰文件浪汪。
cacert.pem:直接將支付寶文檔中的文件拿過(guò)來(lái)使用
4.同步通知和異步通知
同步通知只有一次,1分鐘內(nèi)有效凛虽。
異步通知會(huì)有8次死遭,25小時(shí)內(nèi)完成8次通知(頻率是:4m,10m,10m,1h,2h,6h,15h)。商戶處理接口若打印出 success 則表示交易成功了凯旋,通知id將會(huì)失效呀潭,也不會(huì)發(fā)送消息了钉迷,否則一直發(fā)送知道發(fā)送8次后失效。
5.同步通知可以在開(kāi)發(fā)環(huán)境下測(cè)試钠署,異步通知只能在線上服務(wù)器上在線測(cè)試糠聪,所以需要提前做好日志記錄。
6.php處理時(shí)要注意編碼格式谐鼎,這種情況出現(xiàn)就是chrome可以發(fā)起支付舰蟆,但是ie,360這樣的瀏覽器就會(huì)包參數(shù)錯(cuò)誤狸棍。
三身害、業(yè)務(wù)融合
1.同步返回和異步通知都可用于更新訂單狀態(tài)。
? ?假設(shè):支付成功后草戈,直接關(guān)閉頁(yè)面塌鸯,沒(méi)有發(fā)生同步通知,這樣就可以測(cè)試異步通知是否對(duì)剩下的業(yè)務(wù)邏輯進(jìn)行處理了唐片。
2.在處理商戶訂單的時(shí)候一定要進(jìn)行一下判斷:
①交易狀態(tài)碼驗(yàn)證
②賣家賬號(hào)是否一致
③通知id驗(yàn)證
④簽名驗(yàn)證
⑤訂單狀態(tài)檢驗(yàn)
⑥登錄用戶是否為訂單關(guān)聯(lián)的用戶
⑦交易金額是否一致
3.經(jīng)過(guò)上面一系列驗(yàn)證后終于可以走商戶的處理邏輯了丙猬,處理邏輯也要檢驗(yàn),當(dāng)訂單狀態(tài)已改變時(shí)則直接跳過(guò)處理费韭。
4.業(yè)務(wù)邏輯是可以通過(guò)同步通知來(lái)走通的淮悼。
四、線上調(diào)試
1.根據(jù)日志記錄和php錯(cuò)誤來(lái)修正代碼揽思。
2.防釣魚(yú)ip地址檢查和防釣魚(yú)時(shí)間戳可以根據(jù)需要來(lái)設(shè)置(anti_phishing_key袜腥,exter_invoke_ip),具體看文檔中的配置钉汗。
五羹令、總結(jié)
? ? ? ? 前期的準(zhǔn)備工作一定要提前完成,不然代碼無(wú)法調(diào)試损痰,其它的介紹文檔里面都描述的非常清楚福侈,在開(kāi)發(fā)的過(guò)程中一路下來(lái)遇到的大部分問(wèn)題都是在文檔中找到的,最糾結(jié)的一個(gè)問(wèn)題在于簽名的驗(yàn)證卢未,簽名的生成是根據(jù)返回的所有參數(shù)生成的肪凛,但是驗(yàn)證的時(shí)候我?guī)肓硕嘤嗟挠脩?token,所以導(dǎo)致簽名一直驗(yàn)證失敗辽社。
? ? ? ? 簡(jiǎn)書(shū)的第一篇隨筆伟墙,以后會(huì)堅(jiān)持寫下去。 ? ? ? ? ? ? ? ? ?