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

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

程序员文章站 2023-12-20 16:20:34
ios 集成微信支付功能的实现方法 第一步:集成微信的sdk      点击进入 下载对应sdk或示例,最后可以看...

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);
  }];
}

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

上一篇:

下一篇: