今天在支付寶接口開發時,遇到的兩個坑
第一個:
https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.8nHr4i&treeId=62&articleId=103740&docType=1
支付寶的PC版即時到賬接口中,發起的請求可帶此參數extra_common_param
| 公用回傳參數 |
String(100) |
如果用戶請求時傳遞了該參數,則返回給商戶時會回傳該參數。 |
於是,不管在同步或者異步通知中,均可接收到此參數進行業務邏輯的處理
但是今天在wap版的開發中,遇到request。。。一大堆的參數時,總是報錯。然而奇怪的是,返回的參數驗簽卻是通過的。
百思不得其解。最后發現request["extra_common_param"]始終為空。。。。
最后找到https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.8JI7Bt&treeId=60&articleId=103698&docType=1
wap的支付接口中,果然沒有此參數。
(因為wap版的官方demo中發起請求沒有MD5的簽名方式,於是就照搬了web版的請求方式,當然。這其中就含有了extra_common_param參數的設置,所以一開始對驗簽通過。卻報reques為空的錯誤深深的搞得抓狂)
問了客服,我說微信支付有此相同參數,web版也有此參數,為什么wap就沒了呢? 【內心是抓狂的】
最后客服直接說,不能已經給過建議了么?【內心是崩潰的】
他給到的建議是一,寫在body中,但這樣買家付款的時候也會看到。
二。寫在notify_url的?后面。但同樣的,在驗簽的時候,這個url需要保證和提交時所設置的那個一樣。
所以最后只能靠自己了。提交訂單時就將相關信息寫入數據庫,在付款成功后,根據此訂單號去更改其狀態
第二個:
手機支付。微信中提起發送請求時,總是正確的。
在測試完手機瀏覽器中的支付寶支付時,我登錄賬號的也是對的
在別人進行支付時,就是錯的。收銀台顯示的金額總是0.00(這個金額是發起請求時支付寶再顯示出來)
於是就奇怪了。。。微信支付和支付寶支付所提交請求的參數都是來源於同一個代碼,支付金額,body等什么的。
而且提交后,打印出來的參數也是沒問題的。
又是無限抓狂中。最后,我把自己的支付金額0.01的設置取消掉后[if id=6223 then total_pay='0.01' else total_pay=model.total_pay] 改為 [total_pay=model.total_pay]
同其他人支付時出現的問題一樣,這次我自己也重現了此問題。
最后的最后,終於想到了,數據是從數據庫讀出來的,這個字段是decimal,小數點后有4位。。。
而發起的支付寶請求只要小數點后兩位。雖然它是string類型。。。。
| total_fee | 交易金額 | String | 該筆訂單的資金總額,單位為RMB-Yuan。取值范圍為[0.01,100000000.00],精確到小數點后兩位。 |
我把金額處理后。問題終於解決。
微信沒有問題是因為它的單位是分。也就是一分錢也是整型的,提交給微信的數據是1
本來6點半准時下班。然而此時已經是8點半了。
支付寶,知托付!!!謝謝你哦
