iT邦幫忙

0

PHP 執行另一PHP的問題

php
  • 分享至 

  • xImage

目前在做有關於支付工具的API對接, 對方在接受到我們的支付請求後, 返回結果會讓我們頁面跳轉到對方的支付網頁, 這一部分已經完成了

但對方同時要求我們在發送支付請求的後幾秒, 發送該交易的查詢狀態請求
我希望能做到的是, 在同一頁面內先發送支付請求, sleep(3)後開始進行查詢請求
目前卡在一個地方就是當我進行POST處理時, 他會先把查詢動作做完, 接著才開始做支付請求進行跳轉
接著我嘗試在進行POST的動作時, 通過頁面呼叫並在背景執行另一個PHP進行查詢動作, 但這一部分我怎樣都做不出來
嘗試了使用curl, 結果也是先進行了查詢, 才開始進行支付請求, 請問各位大佬們, 有什麼比較好的方法嗎
https://ithelp.ithome.com.tw/upload/images/20221230/20150408FwRrWk491w.png
https://ithelp.ithome.com.tw/upload/images/20221230/20150408GRcJtwzeZ1.jpg

看更多先前的討論...收起先前的討論...
揮揮手 iT邦研究生 5 級 ‧ 2022-12-30 11:57:29 檢舉
看你的敘述來說
感覺該API 假如非拆分兩支的話
那代表打的時候
他那邊順序就是先查詢 後支付

你看一下API文件 get post put 分別拿到甚麼資料
可能是照restful api 設計
這樣來處理可能只是呼叫方式錯了
wiseguy iT邦超人 1 級 ‧ 2022-12-30 12:10:16 檢舉
你第一段寫的步驟,跳轉到對方支付頁後,應該是支付完,會再跳回你的頁面,這時候再發交易查詢比較正確。
不然一跳轉到對方的支付頁,user都還沒付款,你這時發交易查詢,幾乎是尚未完成交易的,不是嗎?
a52190355 iT邦新手 5 級 ‧ 2022-12-30 12:13:03 檢舉
我一開始, 就是寫成跳回我們頁面才開始做查詢的, 但是對方以使用者網絡不能確保使用者能夠返回我們頁面, 要求把查詢請求寫在交易請求後的幾秒發送..
a52190355 iT邦新手 5 級 ‧ 2022-12-30 12:14:15 檢舉
而且他們要求的查詢機制是, 每3秒發送一次查詢, 直到查詢得到成功的參數再停止
揮揮手 iT邦研究生 5 級 ‧ 2022-12-30 15:07:57 檢舉
那這樣寫判斷
把沒返回頁面也考慮進去 然後打查詢API?
揮揮手 iT邦研究生 5 級 ‧ 2022-12-30 15:34:56 檢舉
我剛剛問過我同事了
同一個session 一個背景 job
你可能要多寫個呼叫背景job 的while 迴圈吧
對方有提供Callback類的API嗎?如果有最好用上,當收到對方的callback時才去變更交易結果記錄,而你的前端,負責的就是一直輪詢自己的資料庫上的記錄是否有被更變,也設個timeout避開無止盡的等待
a52190355 iT邦新手 5 級 ‧ 2023-01-03 11:29:14 檢舉
對方同時也有一個異步通知交易紀錄, 這個也已經完成了, 只是對方除了異步通知之外還需要我們主動查詢交易狀態, 理由是他們害怕異步通知的服務端會發生異常
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0

如果沒猜錯,這因該是大陸那邊的相關支付。
並無法像其它正常支付相關一樣。能立即取得是否成功回應狀態。

早期有過這類似的經驗。
我將我的做法給你參考。

其實說穿了,我只是將支付動作及取狀態動作。分成兩個異步處理。
其實API中,使用SLEEP是很不好的行為。
但用在排程上則比較無所謂。SLEEP值,最大不要超過5。
除非你能確保只有一條進程會跑這個SLEEP。

以上是提外話。
一般這一類的金流,則是支付生成訂單完了。就不理會。狀態會存在「正在進行中」

另外我有一個排程。會去掃描目前正在進行中的訂單。從中再去獲取狀態值回來。
如有變動就更動狀態。

其實3秒的限制是最低值。你真3秒一直跟人家請求,對方其實也會抗議的。
我排程是每10秒進行一次取狀態。

以上給你參考

看更多先前的回應...收起先前的回應...
a52190355 iT邦新手 5 級 ‧ 2022-12-31 11:57:35 檢舉

我使用sleep是希望能夠確保會先進行支付的請求, 3秒後再發動查詢請求, 目前遇到的問題是當我發起POST時, 頁面是先把查詢請求做完了才進行支付請求跳轉對方頁面, 所以我才想了解一下有什麼方法能夠先進行跳轉, 背景繼續執行查詢動作

另外3秒查詢的反而是對方要求, 可能對方對他們的服務端很有信心吧XD

其實你講反了,限制3秒就是怕被請求數過大。
基本就我個人經驗來說。想要在訂單申請,就直接背景跑這件事。
先不要說操別人的機器。(且人家還有3秒限制,操不到)
光你的機器就有夠受了。

要知道SLEEP是會將PHP的進程給佔住。
只要會員多一點請求,包管你的機器受不了。

當然,這還得看你所謂的背景跑的定義。
就我上面說的。其實我也算是一種背景跑的意思。
我只是將動作分成兩個部份來處理。
這才是唯一真正背景跑的意思。

揮揮手 iT邦研究生 5 級 ‧ 2023-01-05 16:09:38 檢舉

我也覺得照星空大的建議
把支付請求 跟異步查詢拆開處裡

因為你先拿到查詢結果的原因可能是
你sleep 3秒之後
他支付請求還沒處裡完
反而是異步查詢先過
然後才拿到支付請求才挑轉對方支付頁

a52190355 iT邦新手 5 級 ‧ 2023-01-06 09:43:58 檢舉

感謝大家的回覆, 支付請求3秒後就開始異步查詢其實是對方的要求, 我本意一開始跟大家一樣, 是希望交易完成後跳回我方頁面才開始執行查詢的
不過現在我已經找到解決方法了, 就是利用javascript執行另一個專門用來查詢的頁面

我要發表回答

立即登入回答