免责声明
本文章仅供参考学习,请勿用于其他非法用途。
本文只作为参考,具有时效性。
工商银行
- 手机抓包,使用工商e商户软件、MITM的抓包软件。
- 生成二维码具有固定格式,包括当前用户登录的Token、商户ID、用户ID、金额等,不支持备注,验证较为麻烦
- 验证时检查订单,建议采用设置flag设置忙模式,处理完订单或超时即解锁继续生成QR。
- 手机商户目前只需登录一次即可一直使用当前Token(截至文章发布时间),每次登录会改变Token。
优点
- 无签名校验。(大银行,之前微信的工商行走活动就是没有添加校验,可发包重放攻击,这个可以之后随便写写)
- 支付宝、微信、云闪付
- 0费率
缺点
- 重新登录则Token失效。
- 无订单备注功能
- 登录验证码
Demo
安卓端Demo
农业银行
- 网页可获取到QR码,还可以添加备注(备注可作为各种软件订单自定义信息验证)
- 思路明确,解析QR获取的JS链
- 农业银行采用Angular.js,使用Chrome扩展的一个Angular.js的调试插件
- 追查到每次会获取到RSA对应的PublicKey、Key、Vi向量等,服务器端签名校验完整性
- 构造数据包,获取到QR即可
优点
- 具有订单备注功能,方便他用
- 云闪付、支付宝、微信
- 0费率
缺点
- 登录验证码
存在的问题
- 网页需要登录操作,验证码需要接入打码平台(可使用轮询的方式保存Cookies,失效重新自动登录即可,减少打码平台的请求数)
海科融通
- 先通过版本号获取Token
- 使用Token进行登录
- 使用URL API进行支付
优点
- 支持主扫与被扫
- 支持查询订单
- 云闪付、支付宝
缺点
- 未知用户名以及密码的加密方式,已知加密为固定字符串,需要自行抓包
- 微信服务暂未恢复
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