IOS客户端接入微信支付

2020-01-14 15:58:38于丽

然后,在需要调用微信支付的Controller里面,新建一个方法。在合适的地方调用。这个方法里面利用WechatPayManager这个类进行了初始化和参数封装,然后把上述的核心代码(PayReq那一段)


<code class="hljs" objectivec="">- (void)wxPayWithOrderName:(NSString*)name price:(NSString*)price
{
  //创建支付签名对象 && 初始化支付签名对象
  WechatPayManager* wxpayManager = [[[WechatPayManager alloc]initWithAppID:APP_ID mchID:MCH_ID spKey:PARTNER_ID] autorelease];
 
  //获取到实际调起微信支付的参数后,在app端调起支付
  //生成预支付订单,实际上就是把关键参数进行第一次加密。
  NSString* device = [[UserManager defaultManager]userId];
  NSMutableDictionary *dict = [wxpayManager getPrepayWithOrderName:name
                                price:price
                             device:device];
  if(dict == nil){
    //错误提示
    NSString *debug = [wxpayManager getDebugInfo];
    return;
  }

  NSMutableString *stamp = [dict objectForKey:@timestamp];
 
  //调起微信支付
  PayReq* req       = [[[PayReq alloc] init]autorelease];
  req.openID       = [dict objectForKey:@appid];
  req.partnerId     = [dict objectForKey:@partnerid];
  req.prepayId      = [dict objectForKey:@prepayid];
  req.nonceStr      = [dict objectForKey:@noncestr];
  req.timeStamp     = stamp.intValue;
  req.package      = [dict objectForKey:@package];
  req.sign        = [dict objectForKey:@sign];
 
//    BOOL flag = [WXApi sendReq:req];
  BOOL flag = [WXApi safeSendReq:req];
}</code>

再者,支付完成了需要调用一个delegate,这个delegate方便个性化显示支付结果。一般直接把这两个delegate放在AppDelegate就好了。因为有一些其他内容也是需要在AppDelegate里面实现,省的分开找不到。


<code class="hljs" objectivec="">-(void) onResp:(BaseResp*)resp
{ 
  //启动微信支付的response
  NSString *strMsg = [NSString stringWithFormat:@errcode:%d, resp.errCode];
  if([resp isKindOfClass:[PayResp class]]){
    //支付返回结果,实际支付结果需要去微信服务器端查询
    switch (resp.errCode) {
      case 0:
        strMsg = @支付结果:成功!;
        break;
      case -1:
        strMsg = @支付结果:失败!;
        break;
      case -2:
        strMsg = @用户已经退出支付!;
        break;
      default:
        strMsg = [NSString stringWithFormat:@支付结果:失败!retcode = %d, retstr = %@, resp.errCode,resp.errStr];
        break;
    }
  }
}</code>

注意事项:

1)如果APP里面已经使用了ShareSDK,就有一些地方要注意。不要再重复导入微信的SDK,因为shareSDK里面的extend已经包括了微信的SDK。