欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

关于webview中的H5微信支付返回白屏问题的讲解

程序员文章站 2022-05-21 16:21:54
白屏为啥会白屏,activity中的我不知道会不会白屏,我的webview是在fragment中的。我运行微信官方的demo,他的都没有白屏,我的就白屏了。 直到后来我无意间打上...

白屏为啥会白屏,activity中的我不知道会不会白屏,我的webview是在fragment中的。我运行微信官方的demo,他的都没有白屏,我的就白屏了。

直到后来我无意间打上了fragment的部分生命周期的方法,发现了其中的端倪。每次要微信支付的时候他会走onpause这个方法,等微信支付,测试1分钱,返回回来的时候

他走了onresum这个方法(现在暂时讲能正常支付成功流程的,中途取消支付的情况先不考虑)。很好这是重点。

如何你发现你现在的webview项目微信支付会白屏,那么相信你应该是用过

onpagefinished

这个方法来检测webview加载的最终地址,那么实际上会发现,进到微信支付的时候,地址其实还走了一次(这个地址就是你微信支付回调的地址),这个是关键二,反正我的情况是这样的,进入到微信支付的时候,会再走一次微信支付回调的地址,我还没支付完成它就先走了!!坑爹就在这。很好,既然是支付,那么你的url地址里面肯定会有订单号之类的,对就是你们服务端设定的规则,不管是支付宝还是微信支付,这个订单号都不会变。而webview的h5微信支付会白屏,就是提前走了回调的地址,这个地址你可以用上面的方法看到,里面包含订单号。

重点来了,我们在调微信支付的时候截取订单号在onpause方法中,之前微信支付白屏时候获取到微信支付时候会多走一次时候的url地址拿出来放在onresume方法里面,然后拼接上在走onpause方法时候获取到的订单号之类的东西(我们服务端只有订单号,观察你们的支付地址,把会变的参数全部保存下来),然后在onresume方法里面拼上去。onresume里面加载的地址是原来微信支付时候,webview会多走一次的那个地址!!!解决问题!!

这里说明一点,当微信支付的时候点取消的时候,这个我还没找到解决的办法,上面的方法是正常支付,并且支付成功时候解决白屏的方案。