unity3d 微信支付 for IOS
来源:互联网 发布:淘宝商品网页无法显示 编辑:程序博客网 时间:2024/06/07 08:55
本人 unity3D 开发 因项目 需要 接入 微信 支付, 步步填坑。和大家风险下 坑经验!
因为这边服务器暂时没有到位。 所以 一切处理 都是在客户端完成!
首先感谢这个这位博主:http://www.jianshu.com/p/94dcc220b2aa
主要的几个文件 给大家分享下!
1.初始化 微信参数 info 从unity 传过来
// C函数 UNity3d 调用具体实现//**********************************void _startUp(char* info){ [NativeIOSManager instance]; //NSLog(@"传来的参数:>>%s",info); NSString *initInfo = [NSString stringWithUTF8String:info]; NSDictionary *dic = [iOSManager dictionaryWithJsonString:initInfo]; if( dic != nil ) { iOSManager.WX_AppID = dic[@"AppID"]; iOSManager.WX_MCHID = dic[@"MCH_ID"]; iOSManager.WX_APP_Secret = dic[@"APP_Secret"]; iOSManager.WX_AppKey = dic[@"APP_Key"]; iOSManager.WX_PayArticleInfo = dic[@"weChatPayArticleInfo"]; iOSManager.WX_PayArticleCheck = dic[@"weChatPayArticleCheck"]; [WXApi registerApp: iOSManager.WX_AppID]; NSLog(@"注册微信......"); }else { NSLog(@"参数赋值失败"); [iOSManager ResoultWeChatPayFail:@"初始化失败"]; } // NSLog(@"iOSManager.WX_AppID:%@", iOSManager.WX_AppID); // NSLog(@"iOSManager.WX_MCHID:%@", iOSManager.WX_MCHID); // NSLog(@"iOSManager.WX_APP_Secret:%@", iOSManager.WX_APP_Secret); // NSLog(@"iOSManager.WX_AppKey:%@", iOSManager.WX_AppKey); // NSLog(@"iOSManager.WX_PayArticleInfo:%@", iOSManager.WX_PayArticleInfo); // NSLog(@"iOSManager.WX_PayArticleCheck:%@", iOSManager.WX_PayArticleCheck); }
2. 这一步是构造 统一下单的 数据 其中的参数 我有项目的参数 大家不用删掉就好
void _WechatPay(char* gameid, char* articleid){ if( [WXApi isWXAppSupportApi] != 0) { iOSManager.WX_GameID = [NSString stringWithUTF8String:gameid]; iOSManager.WX_ArticledID = [NSString stringWithUTF8String:articleid]; NSString *urlTag = [NSString stringWithFormat:@"%@GameID=%@&ProductID=%@", iOSManager.WX_PayArticleInfo, iOSManager.WX_GameID,iOSManager.WX_ArticledID ]; NSLog(@"urlTag:%@",urlTag); NSURL *url = [NSURL URLWithString:urlTag]; NSError *err = nil; NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error: &err]; NSLog(@"App服务器返回:%@",jsonString); if( jsonString !=nil ) { NSDictionary *dic = [iOSManager dictionaryWithJsonString:jsonString]; if( dic != nil ) { iOSManager.WX_Noncestr = dic[@"SjNumber"]; iOSManager.WX_OutTradNO = dic[@"OrderID"]; iOSManager.WX_PrduceName = dic[@"ProductName"]; iOSManager.WX_Price = dic[@"Price"]; //int price = [dic[@"Price"] intValue] *100; //iOSManager.WX_Price = [NSString stringWithFormat:@"%d",price]; DataMD5 *date = [[DataMD5 alloc] initWithAppid:iOSManager.WX_AppID mch_id:iOSManager.WX_MCHID nonce_str:iOSManager.WX_Noncestr partner_id:iOSManager.WX_AppKey body:@"912YULE" out_trade_no:iOSManager.WX_OutTradNO total_fee:iOSManager.WX_Price spbill_create_ip:[getIPhoneIP getIPAddress] notify_url:@"www.baidu.com" trade_type:@"APP"]; NSString* sign = [date getSignForMD5]; //设置参数并转化成xml格式 NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setValue:iOSManager.WX_AppID forKey:@"appid"];//公众账号ID [dic setValue:iOSManager.WX_MCHID forKey:@"mch_id"];//商户号 [dic setValue:iOSManager.WX_Noncestr forKey:@"nonce_str"];//随机字符串 [dic setValue:sign forKey:@"sign"];//签名 [dic setValue:@"912YULE" forKey:@"body"];//商品描述 [dic setValue:iOSManager.WX_OutTradNO forKey:@"out_trade_no"];//订单号 [dic setValue:iOSManager.WX_Price forKey:@"total_fee"];//金额 [dic setValue:[getIPhoneIP getIPAddress] forKey:@"spbill_create_ip"];//终端IP [dic setValue:@"www.baidu.com" forKey:@"notify_url"];//通知地址 [dic setValue:@"APP" forKey:@"trade_type"];//交易类型 // 转换成xml字符串 NSString *string = [dic XMLString]; [iOSManager getProduceArgs:string]; }else { NSLog(@"与APP服务器通讯出错"); [iOSManager ResoultWeChatPayFail:@"与APP服务器通讯出错!"]; } }else { NSLog(@"与APP服务器通讯出错"); [iOSManager ResoultWeChatPayFail:@"与APP服务器通讯出错!"]; } }else { [iOSManager ResoultWeChatPayFail:@"微信不支持"]; }}
3. 请求 微信的统一下单。 应为 要用到 post请求 所以 用到了 AFNetWorking 库,
这个库我用的是 3.0 版本的,然后手动添加,添加完成后 需要在 unity 导入到 xcode 修改项目 .pch 文件,以及添加依赖库 参考 参考
#pragma mark ==============获取统一订单接口==============-(void)getProduceArgs : (NSString *) httpString{ AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer = [[AFHTTPResponseSerializer alloc] init]; [manager.requestSerializer setValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [manager.requestSerializer setValue:@"https://api.mch.weixin.qq.com/pay/unifiedorder" forHTTPHeaderField:@"SOAPAction"]; [manager.requestSerializer setQueryStringSerializationWithBlock:^NSString *(NSURLRequest *request, NSDictionary *parameters, NSError *__autoreleasing *error) { return httpString; }]; //NSLog(@"httpString =====>1:%@", httpString); [manager POST:WXUNIFIEDORDERURL parameters:httpString progress:^(NSProgress * _Nonnull uploadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSString *responseString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding] ; NSLog(@"responseString is %@",responseString); NSDictionary *dic = [NSDictionary dictionaryWithXMLString:responseString]; //判断返回的许可 if ([[dic objectForKey:@"result_code"] isEqualToString:@"SUCCESS"] &&[[dic objectForKey:@"return_code"] isEqualToString:@"SUCCESS"] ) { //发起微信支付,设置参数 NSLog(@"发起微信支付,设置参数"); PayReq *request = [[PayReq alloc] init]; request.openID = [dic objectForKey:@"appid"]; request.partnerId = [dic objectForKey:@"mch_id"]; request.prepayId = [dic objectForKey:@"prepay_id"]; request.package = @"Sign=WXPay"; request.nonceStr = [dic objectForKey:@"nonce_str"]; iOSManager.WX_Prepay_id = request.prepayId; //将当前事件转化成时间戳 NSDate *datenow = [NSDate date]; NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[datenow timeIntervalSince1970]]; UInt32 timeStamp = [timeSp intValue]; request.timeStamp = timeStamp; // 签名加密 DataMD5 *md5 = [[DataMD5 alloc] initWithAppid:iOSManager.WX_AppID mch_id:iOSManager.WX_MCHID nonce_str:iOSManager.WX_Noncestr partner_id:iOSManager.WX_AppKey body:@"912YULE" out_trade_no:iOSManager.WX_OutTradNO total_fee:iOSManager.WX_Price spbill_create_ip:[getIPhoneIP getIPAddress] notify_url:@"www.baidu.com" trade_type:@"APP"]; request.sign = [md5 createMD5SingForPay:request.openID partnerid:request.partnerId prepayid:request.prepayId package:request.package noncestr:request.nonceStr timestamp:request.timeStamp]; // // 调用微信 // NSLog(@"request.openID:%@", request.openID); // NSLog(@"request.partnerId:%@", request.partnerId); // NSLog(@"request.prepayId:%@", request.prepayId); // NSLog(@"request.package:%@", request.package); // NSLog(@"request.nonceStr:%@", request.nonceStr); // NSLog(@"request.timeStamp:%u", (unsigned int)request.timeStamp); // NSLog(@"request.sign:%@", request.sign); [WXApi sendReq:request]; //[WXApi on] //[MBProgressHUD hideHUD]; }else{ //LXLog(@"参数不正确,请检查参数"); //[MBProgressHUD hideHUD]; //[MBProgressHUD showError:@"支付错误!"]; [iOSManager ResoultWeChatPayFail:@"与服务器通讯出错!"]; } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"error is %@",error); [iOSManager ResoultWeChatPayFail:@"与服务器通讯出错!"]; }]; }
然后 unity3D 端
4.后来发现 调起支付 并且完成以后, 微信支付回调
-(void)onResp:(BaseResp *)resp {
并没有执行 。 然后 把回调写在了 导出的 xcode 工程的 UnityAppController.mm 中就能回调了参考 http://web.mob.com/faq/?/question/58头文件
估计不太详细 核心源码:http://download.csdn.net/detail/nicepainkiller/9862138
阅读全文
1 0
- unity3d 微信支付 for IOS
- iOS微信支付
- IOS:微信支付
- iOS微信支付
- IOS-微信支付
- ios -- 微信 支付
- 微信支付iOS
- iOS 微信支付
- iOS微信支付
- iOS--微信支付
- iOS 微信支付
- ios微信支付
- iOS 微信支付
- iOS微信支付
- iOS微信支付
- iOS 微信支付
- IOS微信支付
- iOS 微信支付
- nrf51822-提高nordic ble数据发送速率
- select2下拉框总结
- WinSCP软件使用以及用途
- php实现页面纯静态
- 2017最新 WebStorm中unresolved function or method require()问题
- unity3d 微信支付 for IOS
- python将汉字保存成文本
- Android
- Mysql主从配置
- Android Studio下使用ndkBuild
- maven链接私服方法
- 微信公众号三方平台开发【component_access_token篇】
- 【JavaSE学习笔记】算术运算符
- [51nod 1258] [伯努利数] [多项式求逆] [任意模数NTT] 序列求和 V4