unity3d 接入微信支付 for IOS,unity3dios

來源:互聯網
上載者:User

unity3d 接入支付 for IOS,unity3dios

本人 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 中就能回調了

標頭檔

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.