menu LittleJake's Blog
color_lens
avatar
Jake Liu
Never Settle
creative commons by-nc-sa
hit
Category
keyboard_arrow_down

© 2024 LittleJake's Blog.

萌ICP备20223020号

各银行、收单软件等小微商户QR码爬取思路


聚合支付

免责声明

本文章仅供参考学习,请勿用于其他非法用途。
本文只作为参考,具有时效性。

工商银行

  1. 手机抓包,使用工商e商户软件、MITM的抓包软件。
  2. 生成二维码具有固定格式,包括当前用户登录的Token、商户ID、用户ID、金额等,不支持备注,验证较为麻烦
  3. 验证时检查订单,建议采用设置flag设置忙模式,处理完订单或超时即解锁继续生成QR。
  4. 手机商户目前只需登录一次即可一直使用当前Token(截至文章发布时间),每次登录会改变Token。

优点

  1. 无签名校验。(大银行,之前微信的工商行走活动就是没有添加校验,可发包重放攻击,这个可以之后随便写写)
  2. 支付宝、微信、云闪付
  3. 0费率

缺点

  1. 重新登录则Token失效。
  2. 无订单备注功能
  3. 登录验证码

Demo

安卓端Demo

农业银行

  1. 网页可获取到QR码,还可以添加备注(备注可作为各种软件订单自定义信息验证)
  2. 思路明确,解析QR获取的JS链
  3. 农业银行采用Angular.js,使用Chrome扩展的一个Angular.js的调试插件
  4. 追查到每次会获取到RSA对应的PublicKey、Key、Vi向量等,服务器端签名校验完整性
  5. 构造数据包,获取到QR即可

优点

  1. 具有订单备注功能,方便他用
  2. 云闪付、支付宝、微信
  3. 0费率

缺点

  1. 登录验证码

存在的问题

  1. 网页需要登录操作,验证码需要接入打码平台(可使用轮询的方式保存Cookies,失效重新自动登录即可,减少打码平台的请求数)

海科融通

  1. 先通过版本号获取Token
  2. 使用Token进行登录
  3. 使用URL API进行支付

优点

  1. 支持主扫与被扫
  2. 支持查询订单
  3. 云闪付、支付宝

缺点

  1. 未知用户名以及密码的加密方式,已知加密为固定字符串,需要自行抓包
  2. 微信服务暂未恢复

API

获取QR

GET https://posapp.icardpay.com/html5/mobile/merchant/pay/activePay
参数:

  • amount 金额
  • channelType 渠道名称
  • version 软件版本
  • token 登录获取的Token

返回:

{
    "payUrl": "https://qr.95516.com/00010000/00000000000000000000000000000000",
    "code": "1",
    "msg": "交易成功",
    "flowId": "1000000000000000000000000"
}
  • payUrl QR码信息,需转换为QR显示
  • code 响应代码
  • msg 响应信息
  • flowId 交易流水号(订单号)

查询订单

GET https://posapp.icardpay.com/html5/mobile/merchant/user/tranRecordDayDetail
参数:

  • flowId 交易流水号(订单号)
  • version 软件版本
  • token 登录获取的Token

返回:

{
    "data": {
        "tranDate": "2019-11-26 10:34:12",
        "mercNum": "M00000000000000000000",
        "totalPeremium": "0",
        "reason": "暂无信息",
        "tranFee": 0.01,
        "tranType": "银联闪付",
        "checkTime": "暂无信息",
        "isGiftInsurance": null,
        "srefNo": "",
        "imgId": "",
        "auditStatus": "成功",
        "tranStatus": "0",
        "checkStatus": "成功",
        "tranAmount": 1.0,
        "proNo": null,
        "terminalNum": "",
        "discountAmt": 0.0,
        "isInsurance": "0",
        "flowId": "0000000000000000000000000",
        "tranFlag": "TS"
    },
    "code": "1",
    "msg": "微掌铺pos交易记录查询成功"
}

部分参数:

  • transDate 交易时间
  • mercNum 商户号
  • tranFee 手续费
  • tranType 交易方式
  • tranStatus 交易状态
  • tranAmount 交易金额
  • discountAmt 优惠金额
  • isInsurance 是否购买资金到账保险
  • flowId 交易流水号(订单号)
  • tranFlag 到账方式
  • code 响应码
  • msg 响应信息

Demo

PHP-SDK
安卓端SDK

Buy me a beer
Jake Liu
Never Settle

Title: 各银行、收单软件等小微商户QR码爬取思路

Author: Jake Liu

Origin:

Creative Commons License

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) For any re-post you must give appropriate credit.

文章遵循CC许可 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 转载请注明出处

Tag:工商银行, 农业银行, POS, 小微商户, 免签约, QR, 付款码, 海科融通

评论区

Add a new comment.

Theme