一.微信支付(具體參考:https://open.weixin.qq.com/cgi-bin/frame?t=home/app_tmpl&lang=zh_CN)
<1>.使用前準(zhǔn)備
對項(xiàng)目的key進(jìn)行注冊(獲取微信的appID)
導(dǎo)入微信需要支持的包(libWeChatSDK.a, WXApi.h, WXApiObject.h)
在URL Types中進(jìn)行weixin的一些信息配置。
<2>.使用微信支付
1.在需要使用的類中導(dǎo)入#import"WXApi.h"会油,并且設(shè)置WXApiDelegate代理。
2.在調(diào)起微信支付中蚣旱,注冊微信完成的通知,等待微信支付完成進(jìn)行調(diào)用戴陡。(進(jìn)行一些頁面跳轉(zhuǎn)的調(diào)用)塞绿。
3.調(diào)用微信支付的接口:ensureDic是從后臺請求到的數(shù)據(jù)。
PayReq*request = [[PayReqalloc]init];
request.partnerId= [ensureDic objectForKey:@"partnerid"];
request.prepayId= [ensureDic objectForKey:@"prepayid"];
request.package= [ensureDic objectForKey:@"package"];
request.nonceStr= [ensureDic objectForKey:@"noncestr"];
request.timeStamp= [[ensureDic objectForKey:@"timestamp"]intValue];
request.sign= [ensureDic objectForKey:@"sign"];
//[WXApi handleOpenURL:nil delegate:self];
[WXApisendReq:request];
/*
不能直接在delegate.m這個(gè)文件做界面條狀恤批,原因:你的self對象指的是delegate對象本身异吻,這個(gè)對象沒有導(dǎo)航控制器所以直接在方法中實(shí)現(xiàn)跳轉(zhuǎn)不起作用,所以注冊一個(gè)通知讓其跳轉(zhuǎn)
*/
- (void)onResp:(BaseResp*)resp{
NSString*strMsg = [NSStringstringWithFormat:@"errcode:%d",resp.errCode];
NSString*strTitle;
if([respisKindOfClass:[SendMessageToWXRespclass]]) {
strTitle = [NSStringstringWithFormat:@"發(fā)送媒體消息結(jié)果"];
}
if([respisKindOfClass:[PayRespclass]]) {
strTitle = [NSStringstringWithFormat:@"支付結(jié)果"];
switch(resp.errCode) {
caseWXSuccess:{
strMsg =@"支付結(jié)果:成功";
NSLog(@"支付成功=%d",resp.errCode);
[[NSNotificationCenterdefaultCenter]postNotificationName:@"weiXiPaySuccess"object:niluserInfo:nil];
}
break;
default:{
strMsg = [NSStringstringWithFormat:@"支付結(jié)果:失斂蟆涧黄!retcide = %d,retstr = %@",resp.errCode,resp.errStr];
NSLog(@"錯(cuò)誤,retcode = %d,retstr = %@",resp.errCode,resp.errStr);
UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"提示"message:@"支付失敗"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"確定",nil];
alert.tag=100;
[alertshow];
}
break;
}
}
}
//支付成功調(diào)用方法(之前注冊了微信支付的通知)
- (void)chickWeiXiBtn{
PaySuccessViewController*paySuccessVC = [[PaySuccessViewControlleralloc]init];
paySuccessVC.trade_id=trade_id;
[self.navigationControllerpushViewController:paySuccessVCanimated:YES];
}
4.在AppDelegate.mm類中需要進(jìn)行一些回調(diào)操作(是對支付的一些情況的判斷和結(jié)果的處理)
//微信支付注冊APPID
[WXApiregisterApp:WX_APP_IDwithDescription:@"QinWillWine"];
- (BOOL)application:(UIApplication*)application openURL:(nonnullNSURL*)url sourceApplication:(nullableNSString*)sourceApplication annotation:(nonnullid)annotation{
BOOLisSuc = [WXApihandleOpenURL:urldelegate:[[EnsureOrderViewController alloc]init]];
NSLog(@"url%@isSuc%d",url,isSuc ==YES?1:0);
returnisSuc;
}
注釋:EnsureOrderViewController表示調(diào)起支付的頁面。
二.支付寶支付(具體參考:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.4Pi76I&treeId=193&articleId=105299&docType=1)
<1>.使用前準(zhǔn)備
1.注冊相應(yīng)的key值赋荆。
2.導(dǎo)入AlipaySDK.bundle笋妥、AlipaySDK.framework框架。
<2>.使用支付寶支付
1.在需要使用的頁面導(dǎo)入#import<AlipaySDK/AlipaySDK.h>
2.調(diào)用支付寶支付接口:
NSString*oderString =nil;
//應(yīng)用注冊scheme,在info.plist定義URL type窄潭,用于快捷支付成功后重新喚起商戶應(yīng)用
NSString*appScheme =@"qinwillwineapp";
NSString*signedString = [ensureDicobjectForKey:@"sign"];
NSString*orderSpec = [ensureDicobjectForKey:@"str"];
//oderSpec表示支付寶支付的一個(gè)網(wǎng)頁信息
if(signedString !=nil) {
oderString = [NSStringstringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString,@"RSA"];
NSLog(@"orderStr = %@\n\n",oderString);
//獲取快捷支付單例并且調(diào)用快捷支付接口
[[AlipaySDKdefaultService]payOrder:oderStringfromScheme:appSchemecallback:^(NSDictionary*resultDic) {
NSLog(@"支付寶支付返回的結(jié)果:%@",resultDic);
if([[resultDicobjectForKey:@"resultStatus"]isEqualToString:@"9000"]) {
NSLog(@"支付寶支付成功!");
PaySuccessViewController*paySuccessVC = [[PaySuccessViewControlleralloc]init];
paySuccessVC.trade_id=trade_id;
[self.navigationControllerpushViewController:paySuccessVCanimated:YES];
}
else{
UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"提示"message:@"支付寶支付失敗"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"queren",nil];
alert.tag=100;
[alertshow];
}
}];
}