微信支付奇葩问题 system:access_denied

昨天客户向我提到,微信支付在IOS上成功,但在Android上会报system:access_denied错误。
反复检查代码,没有问题。而且因为IOS上成功支付,让我百思不得其解,为什么Android上不成功。
后来看到一篇文章 http://www.okhjp.com/post/9/wechat-pay-system-access-denied/,反应的问题和我一样,但是没有提到解决方法。
各种调试、各种办法,没有解决。
Android总结如下情况:
从微信公众号界面,直接访问支付页面,成功支付。
从微信公众号界面,跳转到A域名页面,再跳转到B域名页面,再跳转到支付授权目录所在的C域名,不成功,报access_denied错误。
同样的情况,IOS正常。

access_denied错误,通常是微信发现来源请求不是支付授权目录造成的,因此问题应该就是来源目录请求的问题。而微信支付本身是JS方式的Ajax请求,因此它判断来路页面就是支付页面URL,而这个URL就应该是微信浏览器的URL。但是我在支付页面中通过JS调试alter(window.location.href)是正常的,真是晕了!

于是向各路大神求救,最终遇到MT同学,给了一个指点,先在此谢过!
因为之前我最后一步跳转是通过服务端redirect到支付页面,因此微信浏览器可能会无法获得跳转的页面(因为浏览器没有获得HTTP200返回,不知道页面已经跳转,因此URL还是保留老的【至于为什么JS能获得window.location.href是最新的URL,这个要问微信浏览器了!IOS应该是正常得到了!】),而此时向微信支付请求信息时,就会有上面的错误。
于是按照MT同学的建议,在最后一个页面跳转时采用页面层的JS跳转,跳转到支付页面。
改代码,放上去,而后测试,于是天终于晴了!

无奈是微信现在火,只能跟上,但对微信的技术支持实在是......!再次鄙夷微信技术支持,自己的亲身体验,支持服务实在太差,电话打不通,要不没人接,邮件没响应,总之真是不爽到了极点。

你可能感兴趣的:(Android,项目实战)