第三方支付訂單修改金額的踩坑經歷

    近期所參與的商城項目在上線後遇到了這樣一個問題:

     業務背景是這樣的:用戶在商城下單後,選擇使用微信支付(注意,我們系統的邏輯是客戶下單選擇支付方式後,後臺直接會在第三方支付平臺下訂單,喚起第三方支付)。客戶和客服經過溝通,客服需要對該訂單進行改價後用戶再行支付。但是修改訂單金額後,客戶再去支付時,彈出上圖提示。

     產生該問題時,我還不清楚客戶和客服之間進行了這麼一波砍價的騷操作,然後修改了訂單金額(不過微信支付這個錯誤提醒也是真心坑爹,實際問題是同一個訂單號在金額不變的情況下可以多次下單,同一個訂單號在金額變了的情況下就會報錯)。當時排查時按照正常流程測試微信支付是ok的,但就是這個客戶的訂單有問題。後來通過與客服的溝通才瞭解到他們對訂單進行了改價操作。這個問題在支付寶支付中不存在(不得不承阿里的技術是真的強大,沒有對比就沒有傷害。當時對接微信支付和阿里支付時就可以看出來,支付寶demo拉下來很容易就對接成功了,微信支付的各種配置簡直讓人絕望,各種文檔和demo不匹配等等問題,說多了都是淚)。

     因此,對微信支付這個問題,要重新調整整個系統的支付流程。老規矩,還是先在網上看看有沒有前輩有什麼好的處理方案。

     參考:開源中國問答

     裏面的幾位老哥說的挺有道理的,最終我選擇採用解耦支付和訂單的方案(當初在開發系統時,已經對訂單和支付進行了解耦,熟悉的開發都會明白,支付不單單隻針對訂單。支付模塊解耦出來可以在很多地方複用),讓系統中支付單和訂單的對應關係由1:1變爲N:1。

     但是這樣會引入一些新的問題:

     1.重複支付。這個想必各位讀者都能想到如何在支付流程中避免。

     2.用戶不刷新訂單就支付的問題。這真的是個比較大的問題,做程序員應該都深有體會,用戶是一個你永遠不知道他會如何操作的羣體。我們只能努力提高自己代碼的健壯性,以應對各種情況。上面提到過,爲了支付單的複用性,喚起第三方支付所用的標識是支付單號。因此,用戶在不刷新訂單的情況下繼續支付,會支付老的支付單(各位同僚可以想象一下這種情況會導致什麼後果,嘿嘿嘿)。所以支付接口中需要增加校驗當前支付單是否是訂單所關聯的支付單(我們系統中訂單有一個支付單號字段),如果校驗不成功,就提示用戶“請刷新訂單後再支付”。

     以上就是微信支付訂單改價的採坑實錄,希望對有疑問的朋友能有所幫助。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章