unity接入微信支付-Ios篇

近段时间都在搞unity接sdk,上篇记了unity接入微信支付android端,URL: unity接入微信支付-Android篇   这几天又在搞ios端,难过各种坑啊。。。。。C。。。OC。。。作为一个unity开发搞c#的开发者,看到复杂的OC,就懵逼了再见。没办法mac用openstepd的标准。。

此处有惊喜 对的,这就是一个完整的微信支付xcode工程羡慕,微信签名下单是在app端,只需要把appid等商户信息改成自己的就可以跑起来。

下面说下unity调用;
1.unity发布xcode工程

引入using System.Runtime.InteropServices;  

  [DllImport("__Internal")]  

private static extern void wxpaytest();  

public void ClickBtn()  

{

wxpaytest();

}

 场景中拉一个button,把ClickBtn挂上去;然后就可以build。

2.xcode部分

把上面下载的工程里面的文件右键加入工程;参照原工程文件把加入链接库。




在UnityAppController.mm的didFinishLaunchingWithOptions 下加入微信注册:

//注册微信支付
         [WXApi registerApp:APP_id withDescription:@"demo"];


在ViewController中加入unity调用的方法wxpaytest

此方法要用c的方式写入,unity才能成功调起(自己测试是这个样的),由于要从c中调用oc中的方法,在网上找了几种,但是测试没成功尴尬,所以就把全部流程卸载了wxpaytest中。。

 #import "SuperViewController.h"
//微信支付
#import "lib/payRequsestHandler.h"
#import "lib/WXUtil.h"
#import "WXSDK/WXApi.h" 

 

extern "C" void wxpaytest() 


{

    
    
 payRequsestHandler *handle = [[payRequsestHandler alloc]init];          if ( [handle  init:APP_id mch_id:MCH_id]) {                  NSLog(@"初始化成功");     }          //设置商户密钥     [handle setKey:PARTNER_id];     //提交预支付,获得prepape_id     NSString *order_name = @"测试";   //订单标题     NSString *order_price = @"1";//测试价格 分为单位     NSString *nocify_URL = nocify_url;    //回调借口     NSString *noncestr  = [NSString stringWithFormat:@"%d", rand()]; //随机串     NSString *orderno   = [NSString stringWithFormat:@"%ld",time(0)];     NSMutableDictionary *params = [@{@"appid":APP_id,                                      @"mch_id":MCH_id,                                      @"device_info":[[[UIDevice currentDevice] identifierForVendor] UUIDString],                                      @"nonce_str":noncestr,                                      @"trade_type":@"APP",                                      @"body":order_name,                                      @"notify_url":nocify_URL,                                      @"out_trade_no":orderno,//商户订单号:这个必须用后台的订单号                                      @"spbill_create_ip":@" 8.8.8.8",                                      @"total_fee":order_price}mutableCopy];          //提交预支付两次签名得到预支付订单的id(每次的请求得到的预支付订单id都不同)     NSString *prepate_id = [handle sendPrepay:params];               //提交预订单成功     if (prepate_id != nil) {                  PayReq *request = [[PayReq alloc]init];                  //商家id         request.partnerId = MCH_id;                  //订单id         request.prepayId = prepate_id;                  //扩展字段(官方文档:暂时填写固定值)         request.package = @"Sign=WXPay";                  //随机字符串         request.nonceStr = noncestr;                  //时间戳         request.timeStamp = (UInt32)[[NSDate date] timeIntervalSince1970];                  //sign参数(很经常出现的问题:就是调起支付到微信那边只出现一个确定按钮,单击确认按钮直接返回到app,出现这个问题100%是sign参数的问题)         /*          参数依次是: appid_key、partnerid_key、prepayid_key、固定值Sign=WXPay、预支付的随机数(跟上面得到预支付订单的随机数要一致)、支付时间(秒)                    */         //request.sign = [selfClass createMD5SingForPay:APP_id partnerid:MCH_id prepayid:prepate_id package:@"Sign=WXPay" noncestr:noncestr timestamp:(UInt32)[[NSDate date] timeIntervalSince1970]];       
NSMutableDictionary *signParams = [NSMutableDictionary dictionary];         [signParams setObject:APP_id forKey:@"appid"];         [signParams setObject:noncestr forKey:@"noncestr"];         [signParams setObject:@"Sign=WXPay" forKey:@"package"];         [signParams setObject:MCH_id forKey:@"partnerid"];         [signParams setObject:prepate_id forKey:@"prepayid"];         [signParams setObject:[NSString stringWithFormat:@"%u",(unsigned int)(UInt32)[[NSDate date] timeIntervalSince1970]] forKey:@"timestamp"];         NSMutableString *contentString  =[NSMutableString string];         NSArray *keys = [signParams allKeys];         //按字母顺序排序         NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {             return [obj1 compare:obj2 options:NSNumericSearch];         }];         //拼接字符串         for (NSString *categoryId in sortedArray) {             if (   ![[signParams objectForKey:categoryId] isEqualToString:@""]                 && ![[signParams objectForKey:categoryId] isEqualToString:@"sign"]                 && ![[signParams objectForKey:categoryId] isEqualToString:@"key"]                 )             {                 [contentString appendFormat:@"%@=%@&", categoryId, [signParams objectForKey:categoryId]];             }         }         //添加商户密钥key字段         [contentString appendFormat:@"key=%@",PARTNER_id];         // NSString *resul = [self md5:contentString];                  const char *cStr = [contentString UTF8String];         unsigned char result[16]= "0123456789abcdef";         CC_MD5(cStr, (CC_LONG)strlen(cStr), result);         //这里的x是小写则产生的md5也是小写,x是大写则md5是大写,这里只能用大写,微信的大小写验证很逗         NSString *resul = [NSString stringWithFormat:                            @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",                            result[0], result[1], result[2], result[3],                            result[4], result[5], result[6], result[7],                            result[8], result[9], result[10], result[11],                            result[12], result[13], result[14], result[15]                            ];                request.sign = resul;                  //带起微信支付         if ([WXApi sendReq:request]) {                                       NSLog(@"走这里啊");                      }else{                          NSLog(@"走之类");             //未安装微信客户端             //            [[[UIAlertView alloc]initWithTitle:@"测试demo" message:@"您还未安装微信客户端,请前往Appstore下载或者选择其他支付方式!" delegate:nil cancelButtonTitle:@"知道了" otherButtonTitles:nil, nil]show];                      }                  //接受成功的通知         [[NSNotificationCenter defaultCenter]addObserver:selfClass selector:@selector(succeed) name:WEIXINPAYSUCCESSED object:nil];                  NSLog(@"wanc");



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值