iOS客户端集成微信支付

1、项目设置APPID

首先在微信开放平台申请开发APP应用,获取唯一标识APPID。在Xcode中打开项目,在info->URL Types进行设置,如下图

2、注册APPID

在你的APP工程中引入微信lib库和头文件,调用API前,需要先向微信注册您的APPID,代码如下:

[WXApi registerApp:@"wxd930ea5d5a258f4f" withDescription:@"demo 2.0"];

3、调起支付

后台服务器生成支付订单,获取到prepay_id后将参数再次签名传输给APP发起支付。以下是调起微信支付的关键代码:

//微信调起支付
//url是服务器返回的订单信息,WXPayModel是我自己定义的订单数据模型
- (void)wxPayRequest:(NSString *)url{
    NSData *jsonData = [url dataUsingEncoding:NSUTF8StringEncoding];
    NSError *err;
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
                                                        options:NSJSONReadingMutableContainers
                                                          error:&err];
    WXPayModel *model = [WXPayModel mj_objectWithKeyValues:dic];
    //需要创建这个支付对象
    PayReq *req = [[PayReq alloc] init];
    // 商家id,在注册的时候给的
    req.partnerId = model.partnerid;
    // 预支付订单
    req.prepayId = model.prepayid;
    // 固定的,只能是即req.package = Sign=WXPay
    req.package = model.package;
    // 随机编码,为了防止重复的,在后台生成
    req.nonceStr  = model.noncestr;
    // 时间戳,也是在后台生成的,为了验证支付的
    req.timeStamp = model.timestamp.intValue;
    // 这个签名也是后台做的
    req.sign = model.sign;
    //发送请求到微信,等待微信返回onResp
    if ([WXApi sendReq:req]) {
        NSLog(@"吊起成功");
    } else {
        NSLog(@"吊起失败");
    }
}

4、支付结果回调

//微信结果回调
- (void)onResp:(BaseResp *)resp{
    if ([resp isKindOfClass:[PayResp class]]) {
        PayResp * response = (PayResp *)resp;  // 微信终端返回给第三方的关于支付结果的结构体
        switch (response.errCode) {
            case WXSuccess:
            {
                // 支付成功,向后台发送消息
                NSLog(@"支付成功");
            }
                break;
            case WXErrCodeCommon:
            {
                //签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等
                NSLog(@"支付失败");
            }
                break;
            case WXErrCodeUserCancel:
            {
                //用户点击取消并返回
                NSLog(@"取消支付");
            }
                break;
            case WXErrCodeSentFail:
            {
                //发送失败
                NSLog(@"发送失败");
            }
                break;
            case WXErrCodeUnsupport:
            {
                //微信不支持
                NSLog(@"微信不支持");
            }
                break;
            case WXErrCodeAuthDeny:
            {
                //授权失败
                NSLog(@"授权失败");
            }
                break;
            default:
                break;
        }
    }

5、注意

//AppDelegate文件中的该方法中调用如下方法,否则微信不会走支付回调
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
    if ([url.host isEqualToString:@"pay"]) {
        return [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];
    }
    return NO;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值