原因:
小区有一个电瓶车充电小程序,扫码获取到充电设备编号后,选择充电端口进行支付充电,问题是小程序各种广告,充值流程很长,且经常出现各种弹窗卡住,又要重新扫码进行充值,我受不了,我解包出了小程序源码,但是修改后没用,扫码后加载的又是官方的小程序。
我的实现方案:
第一阶段:
通过抓包,获取到小程序调用的接口,编写一个原生安卓app,在app调用小程序接口,但是这些接口需要授权,于是app提供一个保存token的界面,需要每次抓包获取token后,在app进行填充,但是支付实现不了,因为支付调用的代码是:
# 微信小程序支付:
wx.requestPayment({timeStamp, nonceStr, package, paySign})
# 支付宝小程序支付:
my.tradePay({tradeNO})
wx和my是小程序环境独有的对象,所以支付过不了。
第二阶段:
得益于手机有root权限,有xposed框架,将实现方案进行调整,app无需再手动抓包获取token,改为直接打开支付宝小程序,然后hook支付宝小程序获取code的节点,截取到code后返回到app进行保存,然后在app通过code调用登录接口,从而获取到用户token。
支付时,依然直接携带订单号跳转到小程序,然后通过hook自动执行my.tradePay({tradeNO}) ,从而实现支付功能。
实现效果:





目前这个方案虽然功能完成了,但是普适性较差,对手机环境有比较苛刻的要求,不知道佬们有没有其他方案?讨论讨论。
1 个帖子 - 1 位参与者