IOS微信支付
2016-03-21 15:02
621 查看
下载 SDK:
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1
申请资格:
http://kf.qq.com/faq/120911VrYVrA150906F3qqY3.html
开发文档:
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=3_1
![](http://img.blog.csdn.net/20160321144501205)
![](http://img.blog.csdn.net/20160321144652497)
![](http://img.blog.csdn.net/20160321145139197)
![](http://img.blog.csdn.net/20160321145304871)
![](http://img.blog.csdn.net/20160321145542889)
接下来开始写代码了
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1
申请资格:
http://kf.qq.com/faq/120911VrYVrA150906F3qqY3.html
开发文档:
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=3_1
导入类库
将下载好的 微信支付 SDK 拉到工程里面
里面的 read_me.txt 里面有对应的重要说明
在 info.plist 里面添加
<key>LSApplicationQueriesSchemes</key> <array> <string>weixin</string> </array> <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
然后查看 info.plist
如果文件显示如下则成功添加:
接着到 URL Types 添加你的微信开发者帐号ID
接下来开始写代码了
AppDelegate.h
#import "AppDelegate.h" #import "WXApi.h" //必须遵守协议 @interface AppDelegate ()<WXApiDelegate> @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { /* 微信测试APPID wxb4ba3c02aa476ea1 1.导入微信支付 SDK,注册微信支付 2.设置微信的 APPID 为 URL Schemes 3.发起支付,调起微信支付 4.处理支付结果 */ [WXApi registerApp:@"你的 ID" withDescription:@"wxdemo"]; return YES; } -(void)onResp:(BaseResp *)resp { if ([resp isKindOfClass:[PayResp class]]) { //返回支付结果,实际支付结果需要取微信服务端查询 NSString *strMsg = @"支付结果"; switch (resp.errCode) { case WXSuccess: strMsg = @"支付成功"; NSLog(@"支付成功-PaySuccess,resp.errCode = %d",resp.errCode); break; default: strMsg = @"支付失败"; NSLog(@"支付失败-PaySuccess,resp.errCode = %d,resp.errStr = %@",resp. errCode,resp.errStr); break; } UIAlertController *alertController = [UIAlertController alertControllerWithTitle:[NSString stringWithFormat:@"%d",resp.errCode ]message:resp.errStr preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *sure = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]; [alertController addAction:sure]; [self.window.rootViewController presentViewController:alertController animated:YES completion:^{ }]; } } - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options { return [WXApi handleOpenURL:url delegate:self]; }
ViewController.m
#import "ViewController.h" #import "WXApi.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; } - (IBAction)payBtnAction:(id)sender { [ViewController jumpToBizPay]; } + (NSString *)jumpToBizPay { if (![WXApi isWXAppInstalled]) { NSLog(@"该设备没有安装微信"); return @"该设备没有安装微信"; } if (![WXApi isWXAppSupportApi]) { NSLog(@"该设置不支持微信支付"); return @"该设置不支持微信支付"; } //============================================================ // V3&V4支付流程实现 // 注意:参数配置请查看服务器端Demo // 更新时间:2015年11月20日 //============================================================ 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 ); return @""; }else{ return [dict objectForKey:@"retmsg"]; } }else{ return @"服务器返回错误,未获取到json对象"; } }else{ return @"服务器返回错误"; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
相关文章推荐