最近在公司中,有这样一个项目,在app中,做网页的银联支付,按说这是没有什么难度的,但是在做的过程中,出现了一个当时来说很头疼的问题,
起原:当时因为是测试银联,证书是测试证书,所以没有在app中走流程,在手机浏览器端走的流程,当流程一切都ok的时候,正式的证书也下来的,我们满心欢喜的在app上走一遍,本感觉已经万事大吉了,没想到在ios中出现了问题,在安卓中一切都好
程序流程:当用户输入金额后,选择银联,点击充值,前端会调后台的接口,成功后,后台返回一个html,(html是银联那边返回的,我们无权修改)前端这边解析html,拿到form表单,将form表单放入当时页面中body的最底部,提交表单,提交方式是post。
问题:ios中跳转银联的时候,会报501的错误,安卓没有问题
过程: 报501错误,立马问了下客服,客服人员说,501是因为提交的方式不对,是get提交,应该是post提交,
本以为是不是ios这里修改了提交的方式,和ios人员沟通后,ios人员说没有修改过;
又以为是ios原生会修改form提交方式,又用ios原生浏览器测了下,没有问题,与ios人员再次沟通后,双方从自己的角度去看看有没有办法去解决这个问题;
由是想,前端这里能不能把form提交修改成ajax的提交方式,我们这里把form拆解,将接口用ajax的方式提交,但是发生了跨域问题,因为是post方式,需要后台做相关处理,但是后台是银联那里的,不会因为我们这里去修改东西;ios那里也没有解决掉;
时间已经不早了,我们各自先回,待明日再战。
晚上难以入眠,一直再想这个问题,为什么会这样!!为什么
忽然灵光乍现,想到是不是因为ios在这里新开页面的问题,(因为ios打开web前端页面是新开,而安卓是在当前页面打开)
form提交,ios会打开新的页面,这样就是get提交,所以会报501。
次日,与ios人员沟通后,先让ios把公共内容注释掉,在当前页面打开,不去新开页面,看是否出现501错误的问题;最激动人心的时候,ios、前端、后台都屏息去见证圣神的一刻,如果不行,真的就是黔驴技穷了;还好老天怜惜我们,事情如流水一样没有波澜;成功了!果然是这个问题,一切都变的十分美好!
总结:
- 相关性的知识还有所欠缺,做了好多无用功的事情,
- 当时只想到是ios app里做了处理,在ios人员表明没有处理的时候,没有深挖去对比为什么在原生浏览器与安卓上可以,在ios app上不可以,他们之间的不同点;实际只是一个新开或当前开的区别,没有考虑这一点;如果安卓也是新开的,那么这个问题就更不好解决了,因为不会认为是app的原因,会从银联和前端这方面找原因,可能花的时间会更长
- 有时候,没有办法解决的问题,先放下,转移一下注意力,可能就会柳暗花明