關(guān)于支付寶支付, 首先了解一下, 支付流程:
1.用戶點擊支付
2.客戶端請求服務(wù)器用戶支付
3.服務(wù)器接收請求生成金額訂單等要給第三方支付的一切信息,并生成回調(diào)參數(shù)傳給客戶端
4.客戶端接收信息(一般會再讓用戶確認支付或者干脆購買后是生成訂單,然后才是付款)并將服務(wù)器給的信息分別傳入SDK需要的參數(shù)中,調(diào)用SDK的支付方法
5.由支付寶SDK向支付寶自己的服務(wù)器發(fā)出支付請求,支付寶的服務(wù)器接收支付請求處理成功后,給客戶端本身與公司的后臺都發(fā)送一條支付成功的消息,客戶端與后臺根據(jù)這條消息再做處理.
開發(fā)步驟
第一步: 仔細看開發(fā)文檔, 并 下載 SDK
開發(fā)文檔 很重要, 建議先把開發(fā)文檔仔仔細細看一遍, 可以避免很多坑, 特別是交互流程:
第二步: 集成 SDK
1 . 將 SDK 拖進 工程
2 . 在Build Phases 選項卡的 Link Binary With Libraries 中,增加以下依賴:
3 . 設(shè)置為URL Schemes
4 . 添加支付邏輯代碼选酗,完成支付過程
在支付頁面:
#import <AlipaySDK/AlipaySDK.h>
#import "Order.h"
#import "DataSigner.h"
//宏定義 PID, 收款賬戶 和 私鑰
//這里的三個參數(shù)是公司和支付寶簽約之后得到的,沒有這三個參數(shù)無法完成支付
//合作者身份(PID)
#define Partner @"合作者身份(PID)"
//商家支付寶賬號
#define Seller @"商家支付寶賬號"
#define KPrivate_key @"私鑰"
#pragma mark 支付寶支付
- (void)aLiPay {
Order *order = [[Order alloc] init];
//合作者身份(PID)
order.partner = Partner;
//商家支付寶賬號
order.seller = Seller;
//訂單ID
order.tradeNO = @"訂單ID";
//產(chǎn)品名稱
order.productName = @"產(chǎn)品名稱";
//商品描述
order.productDescription = @"商品描述";
//商品價格
order.amount = self.orderValue;
//回調(diào)URL
order.notifyURL = @"回調(diào)URL";
order.service = @"mobile.securitypay.pay";
//支付類型:1(商品購買)
order.paymentType = @"1";
//編碼格式
order.inputCharset = @"utf-8";
//訂單超時時間
order.itBPay = @"30m";
NSString * appSchem = @"TaoYuanLe";
//將商品信息拼接成字符串 該方法支付寶已經(jīng)封好
NSString *orderSpec = [order description];
//獲取私鑰并將商戶信息簽名,外部商戶可以根據(jù)情況存放私鑰和簽名,只需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode
//使用私鑰進行簽名
id<DataSigner>signer = CreateRSADataSigner(KPrivate_key);
//調(diào)用簽名 簽名我的訂單描述
NSString *sinedString = [signer signString:orderSpec];
//將簽名成功字符串格式化為訂單字符串,請嚴格按照該格式
NSString *orderString = nil;
if (sinedString != nil) {
orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderSpec,sinedString,@"RSA"];
// 發(fā)起支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appSchem callback:^(NSDictionary *resultDic) {
//NSLog(@"支付結(jié)果result= %@",resultDic);
if ([[resultDic objectForKey:@"resultStatus"] isEqualToString:@"9000"]) {
//9000為支付成功
//在這里可以對支付結(jié)果進行判斷, 也可以在```AppDelegate.m```回調(diào)方法中處理支付結(jié)果
}
}];
}
}
同時在 AppDelegate.m 中,
#import <AlipaySDK/AlipaySDK.h>//支付寶支付
#pragma mark 跳轉(zhuǎn)支付寶, 微信 進行支付,處理支付結(jié)果
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
NSString *urlStr = [NSString stringWithFormat:@"%@",url];
if ([url.host isEqualToString:@"safepay"]) { //判斷支付寶回調(diào)
//跳轉(zhuǎn)支付寶錢包進行支付畜普,處理支付結(jié)果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
//TY_Log(@"result = %@",resultDic);
//處理支付結(jié)果
}];
}else if ([sourceApplication isEqualToString:@"com.tencent.xin"] && [urlStr containsString:@"pay"]){ //判斷微信回調(diào)
TYLLog(@"跳轉(zhuǎn)微信支付處理支付方式結(jié)果");
return [WXApi handleOpenURL:url delegate:self];
}
return YES;
}
出現(xiàn)的問題及解決辦法:
1)"Unknown type name ‘NSString‘ "或者"Unknown type name ‘NSData‘ "等不識別常見類的問題啥辨。
這是因為缺少Foundation類庫和UIKit類庫是偷,支付寶Demo中之所以沒有出現(xiàn)此錯誤,是因為在.pch文件中導入過這些類庫
解決辦法:只需要在出現(xiàn)錯誤的文件中導入這些類庫即可
2)‘openssl/asn1.h‘ file not found
這是 openssl 文件夾頭文件鏈接問題缩搅,只是把 openssl 文件夾拉進項目中,也可能出現(xiàn)這個問題触幼。
解決辦法:Targets->Build Settings->Header Search Path中添加1中建立的aliPaySDK文件夾的路徑(拖拽此文件夾至輸入框即可)
3)根據(jù)項目需求添加demo中ViewController中的代碼 編譯后可能會出下面錯誤:
"OBJC_CLASS$_Product", referenced from: objc-class-ref in ViewController.o
AlipaySDK的demo中將Product的定義寫在了ViewControler.h中所致
解決辦法:新建Product類硼瓣,將ViewController中的代碼拷貝過去即可。
結(jié)束
有微信支付需求的可以 點這里
如果這篇文章對您有些許幫助 請給我點個心吧置谦。