在網上、社群裡搜了一下好像沒找到什麼文章詳細分享這種方式的,這些天我花了些時間研究整理了一下,發現這種方式能很好地實作個人支付寶收款實時回調,于是在這裡分享一下。
流程很簡單,主要就是3步:
1.登入網頁支付寶,擷取cookie
2.抓包分析支付寶的交易訂單接口
3.模拟測試訂單接口請求,投入使用
1.先去支付寶官網登入,掃碼登入或賬密登入都闊以。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL90TUk1GbHFmN5IjW2RmMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0ADN1ITN1kDMxEDOwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
登入成功後,直接F12(打開開發者工具),在console中輸入document.cookie并回車,即可擷取到你登入後的cookie。
2.找一找支付寶二維碼收款的交易訂單記錄在哪,簡單浏覽後馬上發現是在“對賬中心”-“業務查詢”-“交易訂單”菜單下。
再次F12打開開發者工具,進入network,再次點選訂單頁面的“查詢”,抓取請求的接口。
簡單分析一下接口,發現需要用到的必須用到的ctoken(拼接在url後面),billUserId(傳參),這倆都能從cookie中提取到,是以木有問題~而其他的一些接口參數,就照着他的方式傳即可。
3.然後可以直接到Postman等工具裡模拟請求測試一下,除了上面提到那些參數,發現header頭除了cookie以外,referer這個值也是必須的。再回到浏覽器把這個值複制過來再次測試請求,成功!
最後就直接編寫一些簡單的代碼方法,在用到的時候去調用請求接口就好了,PHP參考代碼如下:
<?php
/**
* User: gump994
* Date: 2021-08-08
* Time: 18:08
* Description: 利用網頁版支付寶Cookie監聽交易訂單資料,實作個人支付寶收款試試回調
*
* 【GOGO支付】已經完整實作該模式雲端監聽收款,很穩定,效率很高,歡迎測試體驗~
* 官網位址: https://www.gogozhifu.com
*
* 微信:gump994 郵箱:[email protected]
*
*/
goZfb('your-cookie', 'your-token', 'your-userId');
//調用支付寶交易訂單清單接口
function goZfb($cookie, $token, $userId)
{
$url = "https://mbillexprod.alipay.com/enterprise/tradeListQuery.json?ctoken=" . $token;
$header = [
'referer: https://mbillexprod.alipay.com/enterprise/bizTradeOrder.htm',
'origin: https://mbillexprod.alipay.com',
'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'
];
$data = [
'billUserId' => $userId,
'pageNum' => 1,
'pageSize' => 20,
'startTime' => date('Y-m-d') . ' 00:00:00',
'endTime' => date("Y-m-d", strtotime("+1 day")) . ' 00:00:00',
'status' => 'ALL',
'queryEntrance' => 1,
'entityFilterType' => 1,
'sortTarget' => 'gmtCreate',
'activeTargetSearchItem' => 'tradeNo',
'tradeFrom' => 'ALL',
'sortType' => 0,
'_input_charset' => 'gbk'
];
$res = go_curl($url, $data, $header, $cookie);
print_r($res);
}
//發送Http請求
function go_curl($url, $post = 0, $header = 0, $cookie = 0, $nobaody = 0)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
if ($post) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
if ($header) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
}
if ($cookie) {
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
}
if ($nobaody) {
curl_setopt($ch, CURLOPT_NOBODY, 1);
}
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$ret = curl_exec($ch);
curl_close($ch);
return $ret;
}
?>
相應代碼gitee位址https://gitee.com/niaogang/gogozhifu-web-zfb
最後還要補充說明一下,如果用于實作個人收款實時回調,那麼要考慮一下接口重複請求的頻率、交易金額比對、保持cookie有效等問題,這些問題解決方法也很多,多思考都是可以解決的。目前在GOGO支付裡已經完整的把這些流程弄好了,隻需要填入一個cookie,支付寶雲端監聽就會保持運作,你的個人支付寶就可以一直進行收款了。
有什麼問題或想法歡迎交流讨論~