默認(rèn)是在賬號(hào)等信息注冊(cè)好芙委,驗(yàn)證簽名已經(jīng)在后臺(tái)完成的的情況下移動(dòng)端需要進(jìn)行的操作
第一步:根據(jù)官方文檔添加對(duì)應(yīng)的支付寶逝嚎,微信支付所需要的依賴庫(略)
第二步:APPDELEGATE中操作
1.添加支付寶支付、微信支付所需要的頭文件渠概,與支付寶不同的是微信支付用的是協(xié)議逼侦,支付寶支付是回調(diào)獲取相應(yīng)支付信息狀態(tài)谚攒,所以微信支付需要遵守協(xié)議曙痘。還有就是微信支付在客戶端手到支付成功的狀態(tài)后芳悲,需要與后臺(tái)進(jìn)行二次確認(rèn)。
#支付寶支付
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
if ([url.host isEqualToString:@"safepay"]) {
//跳轉(zhuǎn)支付寶錢包進(jìn)行支付边坤,處理支付結(jié)果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
//9000 支付成功
[[NSNotificationCenter defaultCenter]postNotificationName:@"aliPayResult" object:nil userInfo:resultDic];
}];
}else {
//微信支付
return [WXApi handleOpenURL:url delegate:self];
}
return YES;
}
#微信支付的代理方法
-(void)onResp:(BaseResp *)resp{
//啟動(dòng)微信支付的response
NSString *payResoult = [NSString stringWithFormat:@"%@", resp];
if([resp isKindOfClass:[PayResp class]]){
//支付返回結(jié)果名扛,實(shí)際支付結(jié)果需要去微信服務(wù)器端查詢
NSLog(@"微信支付結(jié)果===%@",payResoult);
switch (resp.errCode) {
case 0:
//payResoult = @支付結(jié)果:成功!;
[[NSNotificationCenter defaultCenter]postNotificationName:@"wxSuccessPay" object:nil];
NSLog(@"-------支付成功");
break;
case -1:
//payResoult = @支付結(jié)果:失敵图巍罢洲!;
[MBProgressHUD Pro_showAlertWithTitle:@"支付失敗"];
break;
case -2:
//payResoult = @用戶已經(jīng)退出支付踢故!;
[MBProgressHUD Pro_showAlertWithTitle:@"已退出支付"];
break;
default:
//payResoult = [NSString stringWithFormat:@支付結(jié)果:失斘睦琛!retcode = %d, retstr = %@, resp.errCode,resp.errStr];
[MBProgressHUD Pro_showAlertWithTitle:@"支付失敗"];
break;
}
}
}
第三步:在需要支付的界面進(jìn)行的操作
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(aliPayResult:) name:@"aliPayResult" object:nil];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(wxPaySuccess) name:@"wxSuccessPay" object:nil];
#pragma 支付寶支付
/**
*BodyDic 向后臺(tái)傳的參數(shù)殿较,用于獲取支付的訂單信息
*/
-(void)aliPay:(NSDictionary *)bodyDic{
[[WebService_Pay shareInstance]getAliPayParamWithBody:bodyDic andResult:^(BOOL success, BaseResponse *response) {
if (success) {
// NOTE: 調(diào)用支付結(jié)果開始支付
NSString *appScheme=@"xxxxxxx"; //這里填上一個(gè)唯一的標(biāo)識(shí)
NSString *orderStr=response.object;
[[AlipaySDK defaultService] payOrder:orderStr fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"%@",resultDic);
}];
}else{
if (response.msg.length>0) {
[MBProgressHUD Pro_showAlertWithTitle:response.msg];
}
}
}];
}
//支付寶支付結(jié)果通知
-(void)aliPayResult:(NSNotification*)noti{
//9000表示支付成功
NSInteger resultStatus=[[noti.userInfo objectForKey:@"resultStatus"] integerValue];
if ( resultStatus==9000) {
NSLog(@“支付寶支付成功后相應(yīng)操作”);
}else{
//支付失敗
[MBProgressHUD Pro_showAlertWithTitle:@"支付失敗"];
}
}
#pragma 微信支付
/**
*BodyDic 向后臺(tái)傳的參數(shù)耸峭,用于獲取支付的訂單信息
*/
-(void)wxPay:(NSDictionary *)bodyDic{
[[WebService_Pay shareInstance]getWXPayParamWithBody:bodyDic andResult:^(BOOL success, BaseResponse *response) {
if (success) {
NSLog(@"%@",response.object);
NSDictionary *wxDic=response.object;
//向微信注冊(cè)您的APPID
[WXApi registerApp:[wxDic objectForKey:@"appid"]];
PayReq *req =[[PayReq alloc]init];
req.partnerId =[wxDic objectForKey:@"partnerid"];
req.prepayId =[wxDic objectForKey:@"prepayid"];
req.package =[wxDic objectForKey:@"packageValue"];
req.nonceStr =[wxDic objectForKey:@"noncestr"];
req.timeStamp =[[wxDic objectForKey:@"timestamp"] intValue];
req.sign =[wxDic objectForKey:@"sign"];
//調(diào)起支付
[WXApi sendReq:req];
}
}];
}
//微信支付成功跳轉(zhuǎn)到支付成功界面
-(void)wxPaySuccess{
NSLog(@"微信支付成功后相應(yīng)操作”);
}
第四部:設(shè)置URL schemes,微信支付直接填寫APPID就好,支付寶支付填寫在發(fā)起支付時(shí)填寫的appShemes
這里以微信為例淋纲,簡(jiǎn)單介紹下支付流程
微信支付流程:
1.用戶打開客戶端劳闹,選擇商品下單
2.客戶端請(qǐng)求生成支付訂單
3.商家后臺(tái)調(diào)用統(tǒng)一下單API
4.微信支付系統(tǒng)生成預(yù)付單,返回商家后臺(tái)預(yù)付單信息
5.商家后臺(tái)根據(jù)預(yù)付單信息洽瞬,生成相應(yīng)的客戶端支付信息本涕,返回客戶端prepay_id,sign等支付參數(shù)
6.客戶端通過支付參數(shù)調(diào)用SDK調(diào)起微信支付,向微信支付系統(tǒng)發(fā)起支付請(qǐng)求
7.微信支付系統(tǒng)驗(yàn)證支付參數(shù)伙窃,APP支付權(quán)限等菩颖,返回需要支付授權(quán)。
8.用戶確認(rèn)支付为障,輸入密碼
9.客戶端向微信支付系統(tǒng)驗(yàn)證授權(quán)晦闰,完成支付交易放祟,分別向客戶端,和商家后臺(tái)返回相應(yīng)的支付結(jié)果
10.商家后臺(tái)接受和保存支付通知呻右,向微信支付系統(tǒng)返回告知已成功接收處理
11.客戶端通過回調(diào)接口執(zhí)行回調(diào)跪妥,向商家后臺(tái)查詢實(shí)際支付結(jié)果
12.商家后臺(tái)調(diào)用微信查詢API查詢支付結(jié)果,返回支付結(jié)果
13.客戶端展示支付結(jié)果