本篇我们来聊一聊wx生成指定金额二维码的功能实现
指定金额的意义在于,这个商品是10元钱,你付9.9是不对的,付10.9也是不对的,10元就10元,多分一毛一块都不对,同时可以设置收款备注,便于后面查询时判断用户是否付款。
先手动生成一张二维码
点击确定后生成一张收款 10元,备注为 nihao的二维码;
二维码字符串为:wxp://f2f1uoM58T0aER01nWqx1a09X2imtlgKpT-5
开始分析
项目太大,内存红了,不要慌
把原本的4g 改成8g后编译成功。
搜索 “description“ 字符串(你又来? 代码也不看,堆栈也不调,ddms也不用,直接开搜?是的,看上图备注 ‘nihao’,既然有备注字段,为什么不能搜呢,试一试又没损失的)
这样搜索,最后看到的代码,往往是不会单独存在,会有一些额外的字符串,所以我们可以从方法块的代码来初步推测出是否是我们所需要的业务流程块,如:
上代码块虽然有description字符串,但是一看就知道是和转账相关的,为什么?银行类型,卡号,备注,但是我们现在做的是生成二维码的功能,这个以后再看。
通过分析最终确定锁定下方法:
箭头一:安全的列表,而且是一个js,我怀疑金额信息在里面,但是需要后面调试打印他的代码
箭头二:id,可能是wxid 列表id 或者 任务id,也可能存在这个业务里
箭头三:备注
总结:生成二维码剩余金钱方面的操作,比较安全,代码块有security字段(对就是这么暴力),同时上代码块又有完成这个任务所具备的所有条件。
编写相关代码后打印日志发现,压根就没跑! 不要慌,这才是我们的常态,通常一次就成功的很少。(说过好多次了)
重新搜索 "desc" 字符(心路历程和上一样)
显示有135个相关的代码,查看一个位置大约花费5--10秒,如果显示出相关联的有好几百上千个,那就直接放弃。换其他方式定位,最后会说如果是我使用前面所有方式都没法定位到,应该怎么办。
通过逐一查看最后定位到
箭头1:金额
箭头2:类型
箭头3:备注
总结:同样的确定这个关键点的原因是 代码所表现的 和 前端所表现的一一对应
编写相关代码后打印日志
ok,关键点就是这里,金额:10 ,类型:1, 备注:nihao,完成一半了。
打印堆栈查看调用逻辑
、
从onclik方法出来的,跳转查看onclick方法
箭头1:金额的输入框
箭头2:保存金额 类型 备注的对象。
箭头3:备注
总结:试想一下,如果腾讯把金额 类型 备注 保存到了一个对象里面,他是想做什么?结合上下层环境 他必然是吧这个对象丢给一个方法,然后这个方法会自己完成后续所有的操作,那我们后面就还有两部工作要做:
1.找到这个方法(此方法要足够靠后,不然会牵涉到页面跳转)
2.找到运行这个方法的过程中 二维码字符串生成的地方就打完收工。
1找到这个方法:
继续跟踪a方法
具体的跟踪就不发了,这节没需要注意的,只需头铁,一直跟就好,只是方法跳转较多。
最终会跟踪此类
继承于
而上面对象最终会传递到另一个继承了F的类
编修相关代码后打印日志验证
验证成功。问题1解决。
2. 找到二维码字符串生成的地方
还记得上面wx创建的那个有金额 类型 备注的对象吗?
搜索 “Micromsg.NetSceneTenpayRemittanceQuery” 字符串,又这么暴力?是的,谁说不是呢?
搜索结果如下
删选后发现,有1个都很像!
pay_url! 看吧,多明显的,他告诉我的。其中ab.d方法是日志方法,所以呢,日志要去掉呢。就算不去掉,好说加个密尊重一下我们好不好呢。
编写相关代码后查看日志
ok,打完收工。
调用方式是只要手机开机,不用对wx做任何人为的操作,wx进程需存在,app继承sdk后调用对应接口便完成二维码的创建。
二维码字符串:wxp://f2f1zvjv9QnU4lHXwAMTf3M8_kYSv1-2OLEL
=========================================================================
如果一些apk使用前面所有方式都没法定位到,应该怎么办?
举个例子,
看上面的界面 我是通过nihao的属性猜测的,猜测会存在 description字段,如果没有再猜测会有desc字段,如果还没有,或许我会直接勾住所有按钮的点击事件来定位,肯定是可以定位到的。
随便问一下,这上面怎么传动态的图片,静态的是在不好展示。
==============================================================================================
好了 第一篇中的6个接口完成了一个了,剩余的接口还有
1.一个大厂指定金额收款二维码即时生成
2.两个大厂的交易记录的获取
3.两个大厂的转账功能