1.導(dǎo)入微信支付的SDK
2.在需要用到支付的控制器中引入頭文件 #import "WXApi.h"
3.向自己的后臺(tái)服務(wù)器拿到支付的必要參數(shù)(最好是封裝起來(lái))
4.判斷用戶是否安裝了微信
//判斷是否能夠跳轉(zhuǎn)到微信支付
if([[UIApplication shareApplication] canOpenURL:[NSURL URLWithStirng:@"weixin"]]{ if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weixin:"]]) {
//KLLtenpayParam 是自定義的模型類,用戶解析服務(wù)器返回來(lái)的微信支付的必要參數(shù);
KLLtenpayParam *payreqParams = [[KLLtenpayParam alloc] init];
[payreqParams setValuesForKeysWithDictionary:model[@"tenpayParam"]];
PayReq *request = [[PayReq alloc] init];
request.partnerId = payreqParams.partnerid;
request.prepayId= payreqParams.prepayId;
request.package = payreqParams.packageValue;
request.nonceStr = payreqParams.nonceStr;
request.timeStamp = payreqParams.timestamp.intValue;
request.sign = payreqParams.sign;
[WXApi sendReq:request];
}
5.在"AppDelegate"的.m文件中處理微信返回的url,要同時(shí)在三個(gè)地方寫
- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)urlNS_DEPRECATED_IOS(2_0,9_0,"Please use application:openURL:options:");
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(nullableNSString*)sourceApplication annotation:(id)annotationNS_DEPRECATED_IOS(4_2,9_0,"Please use application:openURL:options:");`
- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)optionsS_AVAILABLE_IOS(9_0);
// no equiv. notification. return NO if the application can't open for some reason
6."AppDelegate"的.m文件遵循 <WXApiDelegate>并重寫代理方法,并發(fā)出通知說(shuō)明已經(jīng)接受到了支付結(jié)果消息
//支付結(jié)果回調(diào)
-(void)onResp:(BaseResp *)resp{
NSString * strMsg = [NSString stringWithFormat:@"errorCode:%d",resp.errCode];
NSString * errStr = [NSString stringWithFormat:@"errStr: %@",resp.errStr];
NSLog(@"strMsg: %@",strMsg);
NSLog(@"errStr: %@",errStr);
NSString * strTitle;//提示alertview的標(biāo)題
NSString * wxPayResult;//提示alertview的標(biāo)題的支付結(jié)果`
//判斷是否是微信支付回調(diào) (注意是PayResp 而不是PayReq)
if ([resp isKindOfClass:[PayResp class]])
{
//支付返回的結(jié)果, 實(shí)際支付結(jié)果需要去微信服務(wù)器端查詢
strTitle = [NSString stringWithFormat:@"支付結(jié)果"];
switch (resp.errCode)
{
case WXSuccess:
{
strMsg = @"支付結(jié)果:";
wxPayResult = @"success";
break;
}
case WXErrCodeUserCancel:
{
strMsg = @"用戶取消了支付";
wxPayResult = @"cancel";
break;
}
default:
{
strMsg = [NSString stringWithFormat:@"支付失敗! code: %d errorStr: %@",resp.errCode,resp.errStr];
NSLog(@":支付失敗: code: %d str: %@",resp.errCode,resp.errStr);
wxPayResult = @"faile";
break;
}
}
//發(fā)出通知 從微信回調(diào)回來(lái)之后,發(fā)一個(gè)通知,讓請(qǐng)求支付的頁(yè)面接收消息,并且展示出來(lái),或者進(jìn)行一些自定義的展示或者跳轉(zhuǎn)
NSNotification * notification = [NSNotification notificationWithName:KLLWeiXinPay object:wxPayResult];
[[NSNotificationCenter defaultCenter] postNotification:notification];
}}
7.在支付的控制器監(jiān)聽(tīng)支付結(jié)果回調(diào)的通知