iOS之微信支付(一)

微信在很多项目中都可能用到,所以掌握微信支付是非常非常有必要,下面就简单的介绍微信支付的两种方法。

第一种,把相应的参数传给后台,后台返回关于微信支付的相关参数,我们拿到这些参数去完成支付,这种方法相对比较简单,但也最常用。

首先你必须有和微信支付相关的appid,记住这个appid和微信分享的appid是两码事

然后配置工程。

一、libWeChatSDK.a、WXApi.h、WXApiObject.h三个文件导入工程中,下载地址:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1

二、导入系统库TARGETS>>Build Phases>>Link Binary With Libraries点击“+”一次添加下面的系统库

CoreTelephony.framework、

Security.framework、

SystemConfiguration.framework、

UIKit.framework、

Foundation.framework、

CoreGraphics.framework、

libsqlite3.tcd、

libz.tbd、

iOS之微信支付(一)_第1张图片

三、项目注册微信支付、配置白名单、支付回调

注册

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    
    [WXApi registerApp:APP_KEY withDescription:@"微信测试"];//记得配置白名单
    
    return YES;
}

代理回调<WXApiDelegate>

-(BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(nonnull id)annotation{
    if ([url.host isEqualToString:@"pay"]) {
        return [WXApi handleOpenURL:url delegate:self];
    }
    return YES;
    
}
-(BOOL)application:(UIApplication *)app handleOpenURL:(nonnull NSURL *)url{
    if ([url.host isEqualToString:@"pay"]) {
        return [WXApi handleOpenURL:url delegate:self];
    }
    return YES;
}
-(void)onResp:(BaseResp *)resp{
    NSString *strTitle;
    if ([resp isKindOfClass:[SendMessageToWXResp class]]) {
        strTitle = [NSString stringWithFormat:@"发送媒体消息结果"];
    }
    if ([resp isKindOfClass:[PayResp class]]) {
        strTitle = [NSString stringWithFormat:@"支付结果"];
        switch (resp.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;
        }
        //------------------------
    }

}

白名单配置

TARGETS>>info>>URL Types>>“+”>>URL Schemes 粘贴上appid

最后,准备就绪,把相应的参数传给后台,后台返回关于微信支付的相关参数,我们拿到这些参数去完成支付,当然参数的处理必需要和后台商量好。(调起微信支付前判断用户是否装了微信客户端)

 //调起微信支付
            PayReq* req             = [[PayReq alloc] init];
            req.partnerId           = [dict objectForKey:@"partnerId"];//商户号,
            req.prepayId            = [dict objectForKey:@"prepayId"];//包含了商品的所有信息
            req.nonceStr            = [dict objectForKey:@"nonceStr"];//随机字符串
            req.timeStamp           = stamp.intValue;//时间戳
            req.package             = [dict objectForKey:@"package"];@"Sign=WXPay"固定不变
            req.sign                = [dict objectForKey:@"sign"];//签名
            [WXApi sendReq:req];

至此,不出意外的话,微信支付就差不多了。



你可能感兴趣的:(ios,支付,微信支付,微信)