目前在做有關於支付工具的API對接, 對方在接受到我們的支付請求後, 返回結果會讓我們頁面跳轉到對方的支付網頁, 這一部分已經完成了
但對方同時要求我們在發送支付請求的後幾秒, 發送該交易的查詢狀態請求
我希望能做到的是, 在同一頁面內先發送支付請求, sleep(3)後開始進行查詢請求
目前卡在一個地方就是當我進行POST處理時, 他會先把查詢動作做完, 接著才開始做支付請求進行跳轉
接著我嘗試在進行POST的動作時, 通過頁面呼叫並在背景執行另一個PHP進行查詢動作, 但這一部分我怎樣都做不出來
嘗試了使用curl, 結果也是先進行了查詢, 才開始進行支付請求, 請問各位大佬們, 有什麼比較好的方法嗎
如果沒猜錯,這因該是大陸那邊的相關支付。
並無法像其它正常支付相關一樣。能立即取得是否成功回應狀態。
早期有過這類似的經驗。
我將我的做法給你參考。
其實說穿了,我只是將支付動作及取狀態動作。分成兩個異步處理。
其實API中,使用SLEEP是很不好的行為。
但用在排程上則比較無所謂。SLEEP值,最大不要超過5。
除非你能確保只有一條進程會跑這個SLEEP。
以上是提外話。
一般這一類的金流,則是支付生成訂單完了。就不理會。狀態會存在「正在進行中」
另外我有一個排程。會去掃描目前正在進行中的訂單。從中再去獲取狀態值回來。
如有變動就更動狀態。
其實3秒的限制是最低值。你真3秒一直跟人家請求,對方其實也會抗議的。
我排程是每10秒進行一次取狀態。
以上給你參考
我使用sleep是希望能夠確保會先進行支付的請求, 3秒後再發動查詢請求, 目前遇到的問題是當我發起POST時, 頁面是先把查詢請求做完了才進行支付請求跳轉對方頁面, 所以我才想了解一下有什麼方法能夠先進行跳轉, 背景繼續執行查詢動作
另外3秒查詢的反而是對方要求, 可能對方對他們的服務端很有信心吧XD
其實你講反了,限制3秒就是怕被請求數過大。
基本就我個人經驗來說。想要在訂單申請,就直接背景跑這件事。
先不要說操別人的機器。(且人家還有3秒限制,操不到)
光你的機器就有夠受了。
要知道SLEEP是會將PHP的進程給佔住。
只要會員多一點請求,包管你的機器受不了。
當然,這還得看你所謂的背景跑的定義。
就我上面說的。其實我也算是一種背景跑的意思。
我只是將動作分成兩個部份來處理。
這才是唯一真正背景跑的意思。
我也覺得照星空大的建議
把支付請求 跟異步查詢拆開處裡
因為你先拿到查詢結果的原因可能是
你sleep 3秒之後
他支付請求還沒處裡完
反而是異步查詢先過
然後才拿到支付請求才挑轉對方支付頁
感謝大家的回覆, 支付請求3秒後就開始異步查詢其實是對方的要求, 我本意一開始跟大家一樣, 是希望交易完成後跳回我方頁面才開始執行查詢的
不過現在我已經找到解決方法了, 就是利用javascript執行另一個專門用來查詢的頁面