在网上、社区里搜了一下好像没找到什么文章详细分享这种方式的,这些天我花了些时间研究整理了一下,发现这种方式能实时获取到支付宝里的二维码收款记录,从而很好地实现个人支付宝免签约收款实时回调,于是在这里分享一下。

流程很简单,主要就是3步:

1.登录网页支付宝,获取cookie

2.抓包分析支付宝的交易订单接口

3.模拟测试订单接口请求,投入使用

1.先去支付宝官网登录,扫码登录或账密登录都阔以。

登录成功后,直接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 邮箱:gogozhifu@qq.com
*
*/ 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有效等问题,这些问题解决方法也很多,多思考都是可以解决的。

有任何问题或想法欢迎交流讨论~

最新文章

  1. Java文件中出现这样的提示错误与解决方法:Cannot return from outside a function or method?
  2. android WebView介绍
  3. 升级Windows 10 正式版过程记录与经验
  4. 20145207 《Java程序设计》第二周学习总结
  5. test generation和MBIST
  6. web.config配置详细说明
  7. C++中cin输入类型不匹配解决方法
  8. hdu4722之简单数位dp
  9. 记一次laravel远程关联查询
  10. eclipse开发android入门学习
  11. spring boot mybatis 整合教程
  12. oplog
  13. HTML&amp;CSS书写规范
  14. 初识node.js(通过npm下载项目依赖的包的过程)
  15. iOS8自定义推送显示按钮及推送优化
  16. 如何将 .net2.0注册到IIS ,重新注册IIS
  17. DevExpress v17.2新版亮点—WPF篇(五)
  18. GROUP BY关键字与WITH ROLLUP一起使用
  19. 解决:无法将文件“obj\x86\Debug\Windows123.exe”复制到“bin\Debug\Windows123.exe”。
  20. MyEclipse中的内置浏览器中的历史记录怎么清除

热门文章

  1. 10、nginx+uwsgi+django部署(动静分离)
  2. 1、如何通过xstart远程连接桌面
  3. SDLC开发安全流程
  4. 记一次ios下h5页面图片显示问题
  5. Gym 101334E dp
  6. Jenkins之搭建部署
  7. 8、SpringBoot整合之SpringBoot整合MongoDB
  8. CentOS-Docker安装RabbitMQ(单点)
  9. WebService:java配置类形式发布WebService接口及遇见的问题总结
  10. Redis和Memcached到底有什么区别?