小程序对接京东小白的惨案

November 27, 2018
小程序 京东小白

1 引言

2 记流水账,大部分是跑偏了

京东小白信用测试对接联调时:

(1)用webview嵌入的小白网页,通过接口获取sms code,这个要真机调试才能console

(2)如果(1)行不通,那也能拿到当前webview访问的url,url后带的accessToken参数,可以重放用电脑去请求接口获得sms code

(3)有了sms code,则能填写表单,继续页面流程

(4)由于小白网页需要通过域名访问,这个域名还不是正式的域名,需要修改hosts文件。真机?不太可能root了

所以,有一个矛盾的问题:一方面需要root过的真机,一方面真机又无法root。

想到了之前用的旧手机lt26i,折腾了一晚上,微信只支持到4.4,刷机安装各种,最后,微信打开好慢,登录也从未完成,卒!

急智想到了之前玩的安卓模拟器,于是把玩:

(1)下载逍遥,18年11月更新的版本,下载地址在这里

(2)下载一个supersu,管理root权限,使用方法可参考这里

(3)下载一个re,即root explorer,编辑hosts文件即可

注:这种模仿真机调试,能解决访问的问题,但是很奇怪的是,不知道是不是模拟器的原因,后来发生了变化,hosts文件再也不能修改了,包括用terminal emulator等去尝试。

接着,用天天模拟器,没问题,可直接、反复修改hosts。 最后!!!还是不行,小程序虽然用的扫码(模拟器内)调试,可能小程序检测到了还是模拟的,所以webview里的网页url还是看不到。

难不成了去申报购买一个旧安卓机?真到了山穷水尽的地步了?听到小伙伴一句搞个路由器修改HOST,修改HOST?路由器本身就是一个代理作用,那Fiddler不是可以搞定? 一搜索,网上有设置HOST的方法,但之前就实践过的,用手机连电脑WIFI,设置WIFI的代理为电脑WIFI的IP和Fiddler的端口不就搞定了?fiddler端口连接查看, 可参考这里

微信扫真机调试二维码,直接打开了京东的页面,手机不可达的访问(即用域名访问),但是只要这条链路上有其它帮你搞定访问,比如电脑上的hosts,那就是可以访问的了, 当然推测路由器上也可以,这条网路上的任何一个解释器就可以。多么痛的领悟,关注了事情的本身,总认为手机本身要搞定hosts这件事,才能去请求, 也确实这样验证可行了,却忽视了网路的本质、代理的本质,进而把事情复杂化、不现实化。真可谓,对方方面面透彻地理解真是能帮人大忙!

3 看似总结

首先,发散并不一定是正确的,有时我们找到了线索,还觉得是有价值的线索,退一步即便没有价值,也能积累经验,这没毛病啊?但是,发散可能会很散很绕,从此走上了不归路!

其次,这是作为一个手艺人的悲惨遭遇,有时付出不等于收获,甚至没有收获,该时常反思!

再,学习的事情没有边际,思考也是!

首先、其次、再、后,再再,这种连词,参考: https://shuge.org/shuge/

4 又见一帘

很狗血,想总结都结不了,小伙伴在debug小程序时,想看请求内容部分还是看不到(主要指webview的),因为前文已经提到了手机用fiddler代理,可以抓取到请求,抖然,我心想是不是小程序没走fiddler代理?貌似以前瞄过一下,小程序开发工具有一个代理设置,打开一看,果然,有几个选项,默认是不使用代理,选择使用系统代理,即fiddler代理,一切请求都抓取了。

还能更惨???!!!一马匹草泥马从心头飞过,不是想骂谁,是说态势这东东,回顾一下过去两天发生了什么:

5 事情发展经过

  1. 一直我们看到的现象是,本地接口,小程序开发工具的network页能print出请求,而它自己的却不能,我们还一直好奇,getUserInfo难道不发网络请求?我们也尝试过用fiddler去做system proxy

  2. 基于以上现状,小程序开发的小伙,不知道从哪搜索到的,还是自己尝试过的,本来如以上的getUserInfo一样,webview里的页面url,请求接口等,都不会在network里print出来

  3. 然后小伙,用真机试了一下,居然在一个remote debug的console里能print出url来,于是结论就是,我们要用真机。被带沟里了!心想,这样我们拿到京东的url中的AccessToken,再用其它方式重放请求,不就获得了sms code了吗?

  4. 于是,我们需要真机,但是真机访问京东侧的页面啊,要hosts解释,但是修改手机的hosts需要root权限啊,较近手机root很困难了

  5. 周末联系上了极不情愿的京东开发人员,问:“另外,现在对接小程序调试有一个矛盾的问题:(1)想看到验证码,得用真机调试,(2)想用域名访问jd接口,又得设置hosts,现在一般的手机很难root了”。回答说:“1和2用预发环境测试”

    就是这样误问和误答,一步步走上不归路。

  6. 于是,翻出12年买的手机,为了安装最新的微信,倒腾到凌晨4点,第二天拿到公司还是卡在登录页,卒

  7. 于是,还机智地回想起了安卓模拟器,于是试了遥逍模拟器,偶然可以改hosts,后来一直不行,把我的image导出给小伙伴,他的还是不行,于是又试了另一款天天模拟器,改hosts屡试屡爽,很兴奋。结果还是很遗憾,京东页面访问没问题,小程序的remote debug的console还是不能print出url和接口,难道模拟器还不是真机?卒

  8. 山穷水尽的时候,小伙伴提到路由器还改hosts,我想路由器不就是一个代理吗?fiddler本身不就是嘛,于是网上随便一搜fiddler设置host的内容,有!但是不用看它们的内容,还是旧方法,先把手机代理到fiddler吧,手机的请求fiddler则能抓到了,惊奇,居然可以访问京东页!fiddler能解决域名到ip的转换,即采用了系统的hosts设置,结论就是,只要网路上有一点解决了host到ip的转换,即能在其下游使用host访问(解决问题的这个点实质为服务器,但是是代理的,为什么我们只关注代理二字,而忽略服务器这本质的三个字呢?)。既然hosts是windows系统设置的,那是不是不用启fiddler,只要手机连接windows主机就可以了?再回到手机设置代理的方法,里面有一个端口,所以网络连接不管是UDP还是TCP,服务端口是要的,所以fiddler就干这个事,开端口,监听端口,即监听了请求!

  9. 又是灵光一现,在小程序的开发工具上配置了使用系统代理,而fiddler正是扮演系统代理这个角色,一切一切的请求都可以拦截,原来就是radio button没被选中所致的坍塌,对开发工具没有到处看看,对代理的认识的叠加效果制造了这起惨案,有的字眼也确实让人有点晕菜,act as system proxy,字面看就是整个电脑访问网络都走代理?实质没并有,个别工具都有自己的设定。

6 能了结了吗?

事情,如果不直击本质——为什么没被拦截?而沉溺于表面现象,结合固知,定势思维甚至自以为是的假定,只会把事情一步步推向深渊,大多事情应该都差不多这样吧!


loading