根據支付寶官方提供的文檔的建議:
TIPS:這一步應在商戶服務端完成,商戶服務端直接將組裝和簽名后的請求串orderString傳給客戶端,客戶端直接傳給SDK發起請求。文檔和Demo是為了示例效果在客戶端實現。
商品的訂單信息和簽名應該放在服務端進行,將最好生成的orderString發送給客戶端,客戶端直接換起支付,處理好回調就ok。思路很簡單,但實現卻要下番功夫。
坑一:
如果以PHP為服務后台為例,官網是沒有提供集成好的PHP運行DEMO,我們的處理方式是參展APPDemo里的思路,和官方文檔的流程介紹,自己寫一套方法。
坑二:
在整合商品信息biz_content的時候要主要幾個字端:
1)method = “alipay.trade.app.pay";
注意:官方提供的PHP有給APP整合信息方法,但里面使用的是“alipay.trade.wap.pay",這個字端不適用於APP支付,這點要注意。
2)timestamp 的格式
注意:這里格式是年月日...到秒,並不是時間戳。
3)total_amount 的位數
注意:這里商品單價是精確到小數點后2位的,例如:7.00 和微信不同。
4)charset = utf-8
注意:這里“utf-8”要小寫,不是大寫。
坑三:
瘋狂的報錯
當接口寫好后,服務端和終端進行聯調,這里就比較蛋疼了。首先,過程很繁瑣,不能本地模擬測試,只能由終端發起,查看返回的錯誤信息去尋找問題,很不好確定錯誤的位置。
下面是我們在開發中遇到錯誤代碼以及解決方法,希望給你些有用的建議。
1)支付寶客戶端返回6001錯誤信息或顯示交易訂單處理失敗,請稍后再試。(ALI64)
原因:沒有在合作伙伴身份中設置公鑰。(注:接入支付寶需要在服務端設置應用私鑰和支付寶公鑰,在支付寶管理后台設置應用公鑰和合作伙伴公鑰,應用公鑰與私鑰即為自己通過openssl生成的公鑰與私鑰;支付寶公鑰可通過支付寶管理后台得到,是固定值;合作伙伴公鑰即為應用公鑰)
2)支付繁忙ALI59
原因:主要情況為 amount等參數中 有特殊字符 導致, 在此處打個斷點 po 一下相應的參數就好了
3)“暫時無法獲取訂單信息,請稍后再試”
原因:簽名錯誤。沒有嚴格按照文檔里的簽名方式,&sign=AD3,前面要用“&”和加密(encode)后的字符相連,並且后面不能帶雙引號“”。
4)支付寶調起出現 ALI40247 解決方案
原因:這里卡的實現最長。也找了很多文檔。總結了一下錯誤的原因有幾下幾點:
A.沒有APP支付權限導致
檢查您使用的這個appid是否簽約過APP支付這個接口的權限。如果沒有簽約看上面的《如何簽約APP支付接口》。這里比較隱蔽。大多數以為申請通過就代表有了支付能力,其實還需再做一步簽約。
B.請求支付編碼問題和沒有做url encode
編碼:就是請求了utf-8 但是用了gbk的編碼
encode:app支付接口(接口名稱:alipay.trade.app.pay)對請求字符串的所有一級value(biz_content作為一個value)進行encode。
C.管理中心》我的應用》狀態》(注意:)已上線才可以使用否則也會報這個錯誤
D.詳細可參見地址https://openclub.alipay.com/read.php?tid=250&fid=2 官方提供的解決方案。
最后,希望你們一切順利~
完。
