一.微信支付(具体参考:https://open.weixin.qq.com/cgi-bin/frame?t=home/app_tmpl&lang=zh_CN)
<1>.使用前准备
对项目的key进行注册(获取微信的appID)
导入微信需要支持的包(libWeChatSDK.a, WXApi.h, WXApiObject.h)
在URL Types中进行weixin的一些信息配置。
<2>.使用微信支付
1.在需要使用的类中导入#import"WXApi.h",并且设置WXApiDelegate代理。
2.在调起微信支付中,注册微信完成的通知,等待微信支付完成进行调用。(进行一些页面跳转的调用)。
3.调用微信支付的接口:ensureDic是从后台请求到的数据。
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这个文件做界面条状,原因:你的self对象指的是delegate对象本身,这个对象没有导航控制器所以直接在方法中实现跳转不起作用,所以注册一个通知让其跳转
*/
- (void)onResp:(BaseResp*)resp{
NSString*strMsg = [NSStringstringWithFormat:@"errcode:%d",resp.errCode];
NSString*strTitle;
if([respisKindOfClass:[SendMessageToWXRespclass]]) {
strTitle = [NSStringstringWithFormat:@"发送媒体消息结果"];
}
if([respisKindOfClass:[PayRespclass]]) {
strTitle = [NSStringstringWithFormat:@"支付结果"];
switch(resp.errCode) {
caseWXSuccess:{
strMsg =@"支付结果:成功";
NSLog(@"支付成功=%d",resp.errCode);
[[NSNotificationCenterdefaultCenter]postNotificationName:@"weiXiPaySuccess"object:niluserInfo:nil];
}
break;
default:{
strMsg = [NSStringstringWithFormat:@"支付结果:失败!retcide = %d,retstr = %@",resp.errCode,resp.errStr];
NSLog(@"错误,retcode = %d,retstr = %@",resp.errCode,resp.errStr);
UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"提示"message:@"支付失败"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"确定",nil];
alert.tag=100;
[alertshow];
}
break;
}
}
}
//支付成功调用方法(之前注册了微信支付的通知)
- (void)chickWeiXiBtn{
PaySuccessViewController*paySuccessVC = [[PaySuccessViewControlleralloc]init];
paySuccessVC.trade_id=trade_id;
[self.navigationControllerpushViewController:paySuccessVCanimated:YES];
}
4.在AppDelegate.mm类中需要进行一些回调操作(是对支付的一些情况的判断和结果的处理)
//微信支付注册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表示调起支付的页面。
二.支付宝支付(具体参考:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.4Pi76I&treeId=193&articleId=105299&docType=1)
<1>.使用前准备
1.注册相应的key值。
2.导入AlipaySDK.bundle、AlipaySDK.framework框架。
<2>.使用支付宝支付
1.在需要使用的页面导入#import
2.调用支付宝支付接口:
NSString*oderString =nil;
//应用注册scheme,在info.plist定义URL type,用于快捷支付成功后重新唤起商户应用
NSString*appScheme =@"qinwillwineapp";
NSString*signedString = [ensureDicobjectForKey:@"sign"];
NSString*orderSpec = [ensureDicobjectForKey:@"str"];
//oderSpec表示支付宝支付的一个网页信息
if(signedString !=nil) {
oderString = [NSStringstringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString,@"RSA"];
NSLog(@"orderStr = %@\n\n",oderString);
//获取快捷支付单例并且调用快捷支付接口
[[AlipaySDKdefaultService]payOrder:oderStringfromScheme:appSchemecallback:^(NSDictionary*resultDic) {
NSLog(@"支付宝支付返回的结果:%@",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];
}
}];
}