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

解决iOS调起微信支付显示系统繁忙问题

程序员文章站 2024-02-18 20:38:52
最新刚到新公司接手一个项目,当微信支付时可以跳转到微信界面,但会弹出对话框显示 '系统繁忙',点击确定就留在微信,不返回app,然后就各种调试,微信的demo和接入文档都看...

最新刚到新公司接手一个项目,当微信支付时可以跳转到微信界面,但会弹出对话框显示 '系统繁忙',点击确定就留在微信,不返回app,然后就各种调试,微信的demo和接入文档都看穿了,都还没能解决问题,网上也是找了各种答案,什么降低微信支付sdk版本,还有检查传过去的参数,也反复检查了参数,确实没发现问题,也没能解决我的问题,安卓那边可以微信支付,ios这边不行,参数都是由服务器返回的一样的参数,所以也解决参数不会有问题,然后无意中看到了网上一个哥们的问题说和友盟分享sdk冲突了,刚好这个工程也集成了友盟,然后在工程里注释掉友盟注册微信appid的代码,在运行,完美解决了我的问题,(当然不能注释掉代码),我个人的解决方案是在调起微信支付之前用微信的api在注册一下微信的appid(虽然在程序启动的时候已经注册过一次,不想去改动原来的代码),下面的是我的代码,在这里写下来,供以后碰到此类问题的童鞋可以参考解决问题!

#pragma 微信支付 
-(void) paymwxpay:(mwxpay *) mwxpay{ 
  // 跟友盟微信分享sdk冲突,支付时需要重新注册微信appid一次 
  // 获取plist文件路径 
  nsstring *path = [[nsbundle mainbundle] pathforresource:@"appchange.plist" oftype:nil]; 
  nsdictionary *dict = [nsdictionary dictionarywithcontentsoffile:path]; 
  // 从字典中取出注册微信 appid 
  [wxapi registerapp:[dict tostring:@"weixin_appid"] withdescription:@"aiwufu"]; 
  payreq* req = [[payreq alloc] init]; 
//  if ([mwxpay.package isequaltostring:@"sign=wxpay"]) { 
//    mwxpay.package=@"sign=wxpay"; 
//  } 
//  if (mwxpay.sign!=nil) { 
//    mwxpay.sign=[mwxpay.sign uppercasestring]; 
//  } 
  req.openid = mwxpay.appid; 
  req.partnerid = mwxpay.partnerid; 
  req.prepayid = mwxpay.prepayid; 
  req.noncestr = mwxpay.noncestr; 
  req.timestamp = [mwxpay.timestamp intvalue]; 
  req.package = mwxpay.package; 
  req.sign = mwxpay.sign; 
  [wxapi sendreq:req]; 
  nslog(@"appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",req.openid,req.partnerid,req.prepayid,req.noncestr,(long)req.timestamp,req.package,req.sign ); 
}