前言(废话):
大家的项目里现在大多数都集成的都有微信的SDK,要么是微信的登录,要么是微信的支付,毕竟微信如此普遍,加入到我们的项目中能够大大优化我的用户体验。而我的App也不容例外最近刚刚集成过微信的支付,还没来得及高兴,这又奔向微信登录的战场。在这里踩到的坑给大家提前做一下标记,希望后来人不要在掉进去咯。当然大神就可以忽略这篇文章啦。
微信支付:
<pre><code class=@"OC">
PayReq *request = [[[PayReq alloc] init] autorelease];
request.partnerId = @"10000100";
request.prepayId= @"1101000000140415649af9fc314aa427";
request.package = @"Sign=WXPay";
request.nonceStr= @"a462b76e7436e98e0ed6e13c64b4fd1c";
request.timeStamp= @"1397527777";
request.sign= @"582282D72DD2B03AD892830965F428CB16E7A256";
[WXApi sendReq:request];
</code></pre>
当然签名什么的都是在服务端生成的客户端只需要调起微信<code>sendReq</code>一个<code>PayReq</code>对象就行了确实如你所料在服务端没什么问题的情况下,你几句代码就搞定了微信支付,但是坑也随之而来,你会发现你的调起微信支付的页面只能<code>pushViewController</code> 或者 <code>popViewController</code>了,没有办法通过<code>presentViewController</code>进行跳转了,还有更严重的当你通过<code>popViewController</code>返回上个控制器重新下单进入你的微信支付页你会发现订单信息还是上次的信息,并没有传入新的订单,也就是当前的控制器好像本地化了一样,代码完全没有执行一样,但是你打断点调试的话,代码确实执行了😳
解决办法:
各种谷歌百度看官方文档之后在官方的Demo里找到可能的原因,他的官方的Demo里面支付成功的回调是用一个单利类去接受,我抱着试试看的态度(这句话好像在哪儿听过)将下图<code>WXApiManager</code>拷贝到项目中做一下中转,结果Bug没了,最后我把我的掉起微信支付的控制器封装成为一个非标准单利,结论是可以的大胸弟!
总结:
这次虽然没能找到问题的原因但好在问题在上线前解决了,也希望有懂得原因的前辈来指点迷津,希望这篇文章能帮助到后来人,另外微信的登录也是一样的坑,同样的办法解决就行了,如果你的项目中集成过 友盟 之类的第三方分享他会帮你导入微信的SDK请不要重复导入。