iOS集成微信支付

作者: 艳晓 | 来源:发表于2016-12-28 18:55 被阅读244次

    使用场景:商户APP调用微信提供的SDK调用微信支付模块,商户APP会跳转到微信中完成支付,支付完后跳回到商户APP内,最后展示支付结果。
    微信支付的开发文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1

    一、微信支付的交互图示

    chapter8_3_1.png

    商户系统和微信支付系统主要交互说明:
    步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。
    步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。
    步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay
    步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明】
    步骤5:商户后台接收支付通知。api参见【支付结果通知API】
    步骤6:商户后台查询支付结果。,api参见【查询订单API】

    二、微信支付的交互流程

    步骤1:用户进入商户APP,选择商品下单、确认购买,进入支付环节。商户服务后台生成支付订单,签名后将数据传输到APP端。以微信提供的DEMO为例,见图8.1。
    步骤2:用户点击后发起支付操作,进入到微信界面,调起微信支付,出现确认支付界面,见图8.2。
    步骤3:用户确认收款方和金额,点击立即支付后出现输入密码界面,可选择零钱或银行卡支付见图8.3。
    第四步:输入正确密码后,支付完成,用户端微信出现支付详情页面。见图8.4。
    第五步:回跳到商户APP中,商户APP根据支付结果个性化展示订单处理结果。见图8.5。

    8-1 8-2 8-3 8-4 8-5

    三、微信支付的简易Demo

    在AppDelegate中进行微信注册
    <pre>
    // 向微信注册
    [WXApi registerApp:@"wx99c6d6167669c9d0" withDescription:@"IDPhotoCamera"];
    </pre>
    <pre>
    // 微信支付需要订单号
    -(NSString *)WXPayWithOrderNumber:(NSString *)orderNum WithPayAmount:(float)payAmount
    {
    NSLog(@"微信支付orderNum,payAmount%@,%0.2f",orderNum,payAmount);
    self.orderNum=orderNum;
    self.payAmount=payAmount;
    // 这里面的参数按要求应该全部从服务器端返回,此处只返回了预支付订单号和金额,其余在APP中自己设置了!
    self.tradeNO = [self generateTradeNO]; //随机字
    _request = [[PayReq alloc] init];
    _request.openID = MXWechatAPPID;// 应用的APPID
    _request.partnerId = MXWechatMCHID;// 商户号,收款账户号
    _request.prepayId= self.orderNum; // 预支付订单号
    _request.package = @"Sign=WXPay";
    _request.nonceStr= self.tradeNO;

    // 签名加密
    MXWechatSignAdaptor *md5 = [[MXWechatSignAdaptor alloc] init];
    
    _request.sign=[md5 createMD5SingForPay:MXWechatAPPID
                                 partnerid:MXWechatMCHID
                                  prepayid:self.orderNum
                                   package:@"Sign=WXPay"
                                  noncestr:self.tradeNO
                                 timestamp:_timeStamp];
    
    
    // 调用微信支付
    [WXApi sendReq:_request];
    
    return @"this is ios WXPay";
    

    }
    </pre>

    AppDelegate.m中实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数
    <pre>
    -(void)onResp:(BaseResp)resp{
    if ([resp isKindOfClass:[PayResp class]]){
    PayResp
    response=(PayResp*)resp;
    switch(response.errCode){
    case WXSuccess:
    //服务器端查询支付通知或查询API返回的结果再提示成功
    JULog(@"支付成功服务器端查询支付通知或查询API返回的结果再提示成功");
    [[NSNotificationCenter defaultCenter] postNotificationName:JUPayOrderSucceedNotification object:nil];
    break;
    default:
    JULog(@"支付失败,retcode=%d",resp.errCode);
    break;
    }
    }
    }
    </pre>

    四、项目设置注意事项

    1、项目设置APPID(和支付宝一样)
    商户在微信开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID。在Xcode中打开项目,设置项目属性中的URL Schemes为您的APPID。

    2、注册APPID
    商户APP工程中引入微信lib库和头文件,调用API前,需要先向微信注册您的APPID,代码如下:
    [WXApi registerApp:@"wxd930ea5d5a258f4f" withDescription:@"demo 2.0"];

    相关文章

      网友评论

        本文标题:iOS集成微信支付

        本文链接:https://www.haomeiwen.com/subject/lmayvttx.html