php - 第三方支付平臺(tái)在很短時(shí)間內(nèi)多次異步通知,訂單多次確認(rèn)收款
問(wèn)題描述
第三方支付異步通知多次通知回調(diào)地址,前面通知請(qǐng)求還沒(méi)有處理完成,后面請(qǐng)求就發(fā)過(guò)來(lái)了,導(dǎo)致多次確認(rèn)收款,如何解決
問(wèn)題解答
回答1:支付的話需要按唯一 ID 來(lái)做處理吧,例如交易號(hào),流水號(hào)之類,不可能允許多次重復(fù)。
回答2:請(qǐng)求來(lái)了時(shí)候 先把db中的記錄狀態(tài)由初始更新為一個(gè)中間狀態(tài)然后在處理請(qǐng)求,把中間狀態(tài)更新為處理完成狀態(tài)然后給第三方異步請(qǐng)求返回報(bào)文
回答3:好奇的是,短時(shí)間內(nèi)多次,那么是多短時(shí)間多少次呢。
比如,10 秒內(nèi) 5-10 次,應(yīng)該考慮你的代碼優(yōu)化,為啥 1 秒不能處理一個(gè)請(qǐng)求,第一個(gè)處理完之后,后面的請(qǐng)求就無(wú)視了。
比如,1 秒內(nèi) 5-10 次,簡(jiǎn)單處理,就是入隊(duì)列,把并發(fā)的請(qǐng)求,變成串行的,就可以解決了。
以上,我都覺(jué)得頻率那么高,肯定是有問(wèn)題的,可以找第三方平臺(tái)提出來(lái)。
回答4:程序處理完就給第三方返回成功,否則失敗,第三方接收到成功就不要再請(qǐng)求了,容易被封ip。這種問(wèn)題寫在文檔里給第三方看
