ios集成微信支付2016.10

一、下载SDK
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319164&lang=zh_CN

二、集成SDK

ios集成微信支付2016.10_第1张图片

下载解压sdk,拖SDKExport文件夹到工程


ios集成微信支付2016.10_第2张图片

三、配置工程
商户在微信开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID。在Xcode中打开项目,设置项目属性中的URL Schemes为您的APPID

ios集成微信支付2016.10_第3张图片

以上值是配置跳转用的

适配ios9
打开info.plist文件,源代码模式,复制粘贴以下网址里面的代码
http://dev.umeng.com/social/ios/ios9

四、编写代码
1.AppDelegate.m文件

#import "AppDelegate.h"
#import "WXApi.h"
@interface AppDelegate ()@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//  商户APP工程中引入微信lib库和头文件,调用API前,需要先向微信注册您的APPID,代码如下:
[WXApi registerApp:@"wxb4ba3c02aa476ea1" withDescription:@"测试demo"];
return YES;
}

//iOS9之前,监听付款完后界面跳转回本app
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
     NSLog(@"%s",__func__);
    return [WXApi handleOpenURL:url delegate:self];
    
}
//iOS9之后,监听付款完后界面跳转回本app
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options{
 
    //这里判断是否发起的请求为微信支付,如果是的话,用WXApi的方法调起微信客户端的支付页面(://pay 之前的那串字符串就是你的APPID,)
    NSLog(@"%@",url);
    return  [WXApi handleOpenURL:url delegate:self];
    
}

//在类实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意 一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。代码示例如下:
#pragma mark 支付的代理方法
- (void)onResp:(BaseResp *)resp {
NSString *strMsg = [NSString stringWithFormat:@"errcode:%d",resp.errCode];
NSString *strTitle;
if ([resp isKindOfClass:[SendMessageToWXResp class]]) {
strTitle = [NSString stringWithFormat:@"发送媒体消息结果"];
}

if ([resp isKindOfClass:[PayResp class]]) {
// 支付返回结果,实际支付结果需要去微信服务器端查询
strTitle = [NSString stringWithFormat:@"支付结果"];
switch (resp.errCode) {
case WXSuccess:
strMsg = @"支付结果:成功!";
break;
default:
strMsg = [NSString stringWithFormat:@"支付结果:失败!retcode = %d,retstr = %@",resp.errCode,resp.errStr];
break;
}

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
}}


2.按钮事件发起支付

- (IBAction)click:(id)sender {
    // 判断是否安装微信客户端
    if ([WXApi isWXAppInstalled] == NO) {
    
        NSLog(@"尚未安装微信客户端");
        return;
    }
    
    NSString *urlString   = @"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=ios";
    //解析服务端返回json数据
    NSError *error;
    //加载一个NSURL对象
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
    //将请求的url数据放到NSData对象中
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    if ( response != nil) {
        NSMutableDictionary *dict = NULL;
        //IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中
        dict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
        
        NSLog(@"url:%@",urlString);
        if(dict != nil){
            NSMutableString *retcode = [dict objectForKey:@"retcode"];
            if (retcode.intValue == 0){
                NSMutableString *stamp  = [dict objectForKey:@"timestamp"];
                
                //调起微信支付
                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"];
                req.sign                = [dict objectForKey:@"sign"];
                [WXApi sendReq:req];
                //日志输出
                NSLog(@"appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",[dict objectForKey:@"appid"],req.partnerId,req.prepayId,req.nonceStr,(long)req.timeStamp,req.package,req.sign );
            }else{
                NSLog(@"retmsg:%@",[dict objectForKey:@"retmsg"]);
            }
        }else{
            NSLog(@"服务器返回错误,未获取到json对象");
        }
    }else{
        NSLog(@"服务器返回错误");
    }
}

你可能感兴趣的:(ios集成微信支付2016.10)