当前位置: 移动技术网 > IT编程>移动开发>IOS > unity3d 接入微信支付 for IOS

unity3d 接入微信支付 for IOS

2018年02月02日  | 移动技术网IT编程  | 我要评论

转角遇到爱演员表,12999初中数学网,齐齐哈尔中学

本人 unity3D 开发 因项目 需要 接入 微信 支付, 步步填坑。和大家风险下 坑经验!

因为这边服务器暂时没有到位。 所以 一切处理 都是在客户端完成!

主要的几个文件 给大家分享下!

1.初始化 微信参数 info 从unity 传过来

[html]view plaincopy

//C函数UNity3d调用具体实现

//**********************************

void_startUp(char*info)

{

[NativeIOSManagerinstance];

//NSLog(@"传来的参数:>>%s",info);

NSString*initInfo=[NSStringstringWithUTF8String:info];

NSDictionary*dic=[iOSManagerdictionaryWithJsonString: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"];

[WXApiregisterApp:iOSManager.WX_AppID];

NSLog(@"注册微信......");

}else

{

NSLog(@"参数赋值失败");

[iOSManagerResoultWeChatPayFail:@"初始化失败"];

}

//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. 这一步是构造 统一下单的 数据 其中的参数 我有项目的参数 大家不用删掉就好

[html]view plaincopy

void_WechatPay(char*gameid,char*articleid)

{

if([WXApiisWXAppSupportApi]!=0)

{

iOSManager.WX_GameID=[NSStringstringWithUTF8String:gameid];

iOSManager.WX_ArticledID=[NSStringstringWithUTF8String:articleid];

NSString*urlTag=[NSStringstringWithFormat:@"%@GameID=%@&ProductID=%@",iOSManager.WX_PayArticleInfo,iOSManager.WX_GameID,iOSManager.WX_ArticledID];

NSLog(@"urlTag:%@",urlTag);

NSURL*url=[NSURLURLWithString:urlTag];

NSError*err=nil;

NSString*jsonString=[NSStringstringWithContentsOfURL:urlencoding:NSUTF8StringEncodingerror:&err];

NSLog(@"App服务器返回:%@",jsonString);

if(jsonString!=nil)

{

NSDictionary*dic=[iOSManagerdictionaryWithJsonString:jsonString];

if(dic!=nil)

{

iOSManager.WX_Noncestr=dic[@"SjNumber"];

iOSManager.WX_OutTradNO=dic[@"OrderID"];

iOSManager.WX_PrduceName=dic[@"ProductName"];

iOSManager.WX_Price=dic[@"Price"];

//intprice=[dic[@"Price"]intValue]*100;

//iOSManager.WX_Price=[NSStringstringWithFormat:@"%d",price];

DataMD5*date=[[DataMD5alloc]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:[getIPhoneIPgetIPAddress]

notify_url:@"www.baidu.com"

trade_type:@"APP"];

NSString*sign=[dategetSignForMD5];

//设置参数并转化成xml格式

NSMutableDictionary*dic=[NSMutableDictionarydictionary];

[dicsetValue:iOSManager.WX_AppIDforKey:@"appid"];//公众账号ID

[dicsetValue:iOSManager.WX_MCHIDforKey:@"mch_id"];//商户号

[dicsetValue:iOSManager.WX_NoncestrforKey:@"nonce_str"];//随机字符串

[dicsetValue:signforKey:@"sign"];//签名

[dicsetValue:@"912YULE"forKey:@"body"];//商品描述

[dicsetValue:iOSManager.WX_OutTradNOforKey:@"out_trade_no"];//订单号

[dicsetValue:iOSManager.WX_PriceforKey:@"total_fee"];//金额

[dicsetValue:[getIPhoneIPgetIPAddress]forKey:@"spbill_create_ip"];//终端IP

[dicsetValue:@"www.baidu.com"forKey:@"notify_url"];//通知地址

[dicsetValue:@"APP"forKey:@"trade_type"];//交易类型

//转换成xml字符串

NSString*string=[dicXMLString];

[iOSManagergetProduceArgs:string];

}else

{

NSLog(@"与APP服务器通讯出错");

[iOSManagerResoultWeChatPayFail:@"与APP服务器通讯出错!"];

}

}else

{

NSLog(@"与APP服务器通讯出错");

[iOSManagerResoultWeChatPayFail:@"与APP服务器通讯出错!"];

}

}else

{

[iOSManagerResoultWeChatPayFail:@"微信不支持"];

}

}

3. 请求 微信的统一下单。 应为 要用到 post请求 所以 用到了 AFNetWorking 库,

这个库我用的是 3.0 版本的,然后手动添加,添加完成后 需要在 unity 导入到 xcode 修改项目 .pch 文件,以及添加依赖库参考参考

[html]view plaincopy

#pragmamark==============获取统一订单接口==============

-(void)getProduceArgs:(NSString*)httpString

{

AFHTTPSessionManager*manager=[AFHTTPSessionManagermanager];

manager.responseSerializer=[[AFHTTPResponseSerializeralloc]init];

[manager.requestSerializersetValue:@"text/xml;charset=utf-8"forHTTPHeaderField:@"Content-Type"];

[manager.requestSerializersetValue:@"https://api.mch.weixin.qq.com/pay/unifiedorder"forHTTPHeaderField:@"SOAPAction"];

[manager.requestSerializersetQueryStringSerializationWithBlock:^NSString*(NSURLRequest*request,NSDictionary*parameters,NSError*__autoreleasing*error){

returnhttpString;

}];

//NSLog(@"httpString=====>1:%@",httpString);

[managerPOST:WXUNIFIEDORDERURLparameters:httpStringprogress:^(NSProgress*_NonnulluploadProgress){

}success:^(NSURLSessionDataTask*_Nonnulltask,id_NullableresponseObject)

{

NSString*responseString=[[NSStringalloc]initWithData:responseObjectencoding:NSUTF8StringEncoding];

NSLog(@"responseStringis%@",responseString);

NSDictionary*dic=[NSDictionarydictionaryWithXMLString:responseString];

//判断返回的许可

if([[dicobjectForKey:@"result_code"]isEqualToString:@"SUCCESS"]&&[[dicobjectForKey:@"return_code"]isEqualToString:@"SUCCESS"]){

//发起微信支付,设置参数

NSLog(@"发起微信支付,设置参数");

PayReq*request=[[PayReqalloc]init];

request.openID=[dicobjectForKey:@"appid"];

request.partnerId=[dicobjectForKey:@"mch_id"];

request.prepayId=[dicobjectForKey:@"prepay_id"];

request.package=@"Sign=WXPay";

request.nonceStr=[dicobjectForKey:@"nonce_str"];

iOSManager.WX_Prepay_id=request.prepayId;

//将当前事件转化成时间戳

NSDate*datenow=[NSDatedate];

NSString*timeSp=[NSStringstringWithFormat:@"%ld",(long)[datenowtimeIntervalSince1970]];

UInt32timeStamp=[timeSpintValue];

request.timeStamp=timeStamp;

//签名加密

DataMD5*md5=[[DataMD5alloc]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:[getIPhoneIPgetIPAddress]

notify_url:@"www.baidu.com"

trade_type:@"APP"];

request.sign=[md5createMD5SingForPay: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",(unsignedint)request.timeStamp);

//NSLog(@"request.sign:%@",request.sign);

[WXApisendReq:request];

//[WXApion]

//[MBProgressHUDhideHUD];

}else{

//LXLog(@"参数不正确,请检查参数");

//[MBProgressHUDhideHUD];

//[MBProgressHUDshowError:@"支付错误!"];

[iOSManagerResoultWeChatPayFail:@"与服务器通讯出错!"];

}

}failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror)

{

NSLog(@"erroris%@",error);

[iOSManagerResoultWeChatPayFail:@"与服务器通讯出错!"];

}];

}

然后 unity3D 端

\

\

4.后来发现 调起支付 并且完成以后, 微信支付回调

-(void)onResp:(BaseResp *)resp {
并没有执行 。 然后 把回调写在了 导出的 xcode 工程的 UnityAppController.mm 中就能回调了

头文件\

\

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

  • ios uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网