当前位置: 移动技术网 > IT编程>移动开发>IOS > IOS 集成微信支付功能的实现方法

IOS 集成微信支付功能的实现方法

2019年07月24日  | 移动技术网IT编程  | 我要评论

终极面试剧情,铁甲钢拳快播,吴永京

ios 集成微信支付功能的实现方法

第一步:集成微信的sdk

    

点击进入

下载对应sdk或示例,最后可以看看示例程序

第二步:在xcode中填写微信开放平台申请的appid

xcode>info>url types  中新建加入appid

第三步:在appdelegate.m 中注册微信支付 和回调

#import "wxapi.h"
添加 代理
wxapidelegate
- (bool)application:(uiapplication *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions {
  // override point for customization after application launch.
  //self.window.backgroundcolor = [uicolor clearcolor];

  // 微信支付注册
  [wxapiregisterapp:pay_weixin_id];

  
  returnyes;
}

// ios 9.0以上系统版本回调
- (bool)application:(uiapplication *)app openurl:(nsurl *)url options:(nsdictionary<nsstring *,id> *)options
{
  // 微信
  if ([url.schemeisequaltostring:pay_weixin_id]) {
    [wxapihandleopenurl:url delegate:(id<wxapidelegate>)self];
  }
  
  // 支付宝
  if ([url.schemeisequaltostring:@"searchpigeonworld"]) {
    //跳转支付宝钱包进行支付,处理支付结果
    [[alipaysdkdefaultservice] processorderwithpaymentresult:urlstandbycallback:^(nsdictionary *resultdic) {
      if ([self.appmydelegaterespondstoselector:@selector(paycenterweixinonresultwith:)]) {
        [self.appmydelegatepaycenterweixinonresultwith:[resultdic[@"resultstatus"]intvalue] ==9000 ? yes :no];
      }
    }];
  }

  returnyes;
}


//支付成功时调用,回到第三方应用中 ios 9.0以下系统版本回调
- (bool)application:(uiapplication *)application openurl:(nsurl *)url sourceapplication:(nsstring *)sourceapplication annotation:(id)annotation
{
  // 微信
  if ([url.schemeisequaltostring:pay_weixin_id])
  {
    [wxapihandleopenurl:url delegate:(id<wxapidelegate>)self];
  }
  
  // 支付宝
  if ([url.hostisequaltostring:pay_alipay_appid]) {
    //跳转支付宝钱包进行支付,处理支付结果
    [[alipaysdkdefaultservice] processorderwithpaymentresult:urlstandbycallback:^(nsdictionary *resultdic) {
      if ([self.appmydelegaterespondstoselector:@selector(paycenterweixinonresultwith:)]) {
        [self.appmydelegatepaycenterweixinonresultwith:[resultdic[@"resultstatus"]intvalue] ==9000 ? yes :no];
      }
    }];
  }
  
  
  returnyes;
}


/**
 微信自己的结果返回方法

 @param resp 返回结果状态
 */
- (void)onresp:(baseresp*)resp
{
  if([respiskindofclass:[payrespclass]]){
    bool ispaysuccess =no;
    switch (resp.errcode) {
      casewxsuccess:
        ispaysuccess = yes;
        break;
      casewxerrcodeusercancel:
        ispaysuccess = no;
        break;
      casewxerrcodesentfail:
        ispaysuccess = no;
        break;
      casewxerrcodeauthdeny:
        ispaysuccess = no;
        break;
      default:
        ispaysuccess = no;
        break;
    }
    if ([self.appmydelegaterespondstoselector:@selector(paycenterweixinonresultwith:)]) {
      [self.appmydelegatepaycenterweixinonresultwith:ispaysuccess];
    }
  }
}

第四步:在使用微信的地方调用支付方法

#pragma mark 2.2.14(10)使用微信进行付款,获取微信加密信息
- (void)getwebresponsepayweixininfo {
  nsdictionary *parameters =@{@"key" :appdelegate.userkeystring,
                 @"foundrecordid" : [self.payinfodictobjectforkey:@"foundrecordid"]};
  [mbprogresshudshowmessage:@""];
  [webdataresponseinterfacesessionmanagerpostwebdatawithapi:webinterface_good_createweixinpayorderandparameters:parameters andsuccess:^(id successobject) {
    mylog(@"%@", successobject);
    [mbprogresshudhidehud];
    if ([successobject[@"status"]isequaltostring:@"success"]) {
      successobject = [successobject objectforkey:@"value"];
      // 微信支付
      //需要创建这个支付对象
      payreq *req  = [[payreqalloc] init];
      //由用户微信号和appid组成的唯一标识,用于校验微信用户
      req.openid = successobject[@"appid"];
      
      // 商家id,在注册的时候给的
      req.partnerid = [successobjectobjectforkey:@"partnerid"];
      
      // 预支付订单这个是后台跟微信服务器交互后,微信服务器传给你们服务器的,你们服务器再传给你
      req.prepayid = [successobjectobjectforkey:@"prepayid"];
      
      // 根据财付通文档填写的数据和签名
      //这个比较特殊,是固定的,只能是即req.package = sign=wxpay
      req.package  = [successobjectobjectforkey:@"package"];
      
      // 随机编码,为了防止重复的,在后台生成
      req.noncestr = [successobjectobjectforkey:@"noncestr"];
      
      // 这个是时间戳,也是在后台生成的,为了验证支付的
      req.timestamp = [[successobjectobjectforkey:@"timestamp"]doublevalue];
      
      // 这个签名也是后台做的
      req.sign = [successobjectobjectforkey:@"sign"];
      
      //发送请求到微信,等待微信返回onresp
      [wxapisendreq:req];
    } else {
      [mbprogresshudshow:[successobject objectforkey:@"value"]icon:nilview:self.view];
    }
    
  } andfailure:^(nserror *error) {
    [mbprogresshudhidehud];
    mylog(@"error: %@", error);
  }];
}

如有疑问请留言或者到本站社区交流讨论,感谢阅读, 希望通过本文能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网