不理解支付功能集成的什么商戶端,用戶端,支付平臺端沒關系,本篇以本人集成支付寶已經成功了為例,解讀支付寶的SDK集成流程:
一般任何的技術學習都要先由Demo逐步去學習:
本篇就一支付寶的Demo為例教您如何快速集成!
親測可用,抓緊學習吧!
本篇目錄:
一.導入對應的庫
二.快速接入方式:
三.注意事項:
一.導入對應的庫
1.導入以下系統庫
在Build Phases選項卡的Link Binary With Libraries中,增加以下依賴:
// 支付寶SDK依賴的
libc++.tbd
libz.tbd
SystemConfiguration.framework
CoreTelephony.framework
QuartzCore.framework
CoreText.framework
CoreGraphics.framework
Foundation.framework
UIKit.framework
CoreMotion.framework
CFNetwork.framework
// 支付寶依賴的(要在導入AlipaySDK.framework庫之后才能加入)
AlipaySDK.framework
2.2個.a靜態庫和1個framework 和一個bundle文件,共計4個庫(在Demo中查找),如下:
libcrypto.a
libssl.a
AlipaySDK.framework
AlipaySDK. bundle
3.導入demo中的2個文件夾,如下:
openssl
Util
導入效果如下:
Build,編譯發現會報以下錯誤
報錯 : #include <openssl/asn1.h> 找不到
解決方案:
在Build Settings選項卡中搜索 header search添加新的路徑為$(PROJECT_DIR)/FarmAndAnimal/Vendor/AliPaySDK/
其中這里的AliPaySDK 指的是openssl 的上一級文件為止,不一定是AliPaySDK, 切記!
二.快速接入方式:
- Appdelegate
頭文件
#import <AlipaySDK/AlipaySDK.h>
代碼(Code)
Appdelegate 中加入以下代碼,原封不動的!(這里以只集成支付寶的為例,后期總結集成所有的支付的處理辦法)
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
if ([url.host isEqualToString:@"safepay"]) {
// 支付跳轉支付寶錢包進行支付,處理支付結果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
// 授權跳轉支付寶錢包進行支付,處理支付結果
[[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
// 解析 auth code
NSString *result = resultDic[@"result"];
NSString *authCode = nil;
if (result.length>0) {
NSArray *resultArr = [result componentsSeparatedByString:@"&"];
for (NSString *subResult in resultArr) {
if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
authCode = [subResult substringFromIndex:10];
break;
}
}
}
NSLog(@"授權結果 authCode = %@", authCode?:@"");
}];
}
return YES;
}
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
if ([url.host isEqualToString:@"safepay"]) {
// 支付跳轉支付寶錢包進行支付,處理支付結果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
// 授權跳轉支付寶錢包進行支付,處理支付結果
[[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
// 解析 auth code
NSString *result = resultDic[@"result"];
NSString *authCode = nil;
if (result.length>0) {
NSArray *resultArr = [result componentsSeparatedByString:@"&"];
for (NSString *subResult in resultArr) {
if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
authCode = [subResult substringFromIndex:10];
break;
}
}
}
NSLog(@"授權結果 authCode = %@", authCode?:@"");
}];
}
return YES;
}
2.在要支付的功能類中導入以下代碼
頭文件:
#import "RSADataSigner.h"
#import <AlipaySDK/AlipaySDK.h>
代碼(Code):
// NOTE: 調用支付結果開始支付
//應用注冊scheme,在AliSDKDemo-Info.plist定義URL types
NSString *appScheme = @"FarmBB";
[[AlipaySDK defaultService] payOrder:result.data fromScheme:appScheme callback:^(NSDictionary * resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
注意:2個參數解釋:
在請求訂單成功后,支付寶返回一坨字符串,如上為result.data ,以及支付成功后回調到自己應用的標示為appScheme ,然后按照上面的進行傳遞,在resultDic 中接受是否支付成功,如下:
NSString *resultStatus = resultDic[@"resultStatus"];
NSString *errStr = resultDic[@"memo"];
switch (resultStatus.integerValue) {
case 9000:// 成功
break;
case 6001:// 取消
break;
default:
break;
}
3.修改urlSchemes,按照如下圖所示,添加回調的url schemes ,注意要同上面的appScheme 保持一致,這樣可以保證支付成功還是失敗都能回到我的應用中。
三.注意事項:
1.報錯的原理處理
#include <openssl/asn1.h> 找不到,原因是因為沒有找到對應的路徑,注意這里是<> 會從根目錄去尋找,所
以如果設置路徑到 openssl的上一級就可以找到,就解決了這個報錯!
2.Appdelegate中的方法解釋:
下面的方法iOS9之前跳到支付寶返回判斷是否支付成功,或者訂單已經下了,但是還沒有支付,就在這個方法中處理!
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
下面的方法iOS9之后跳到支付寶返回判斷是否支付成功,或者訂單已經下了,但是還沒有支付,就在這個方法中處理
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
3.支付流程說明:
(1).首先由客戶端發出下訂單的請求--->我們的服務端響應并把自己的請求返回訂單信息,說明下訂單成功!
(2).其次客戶端繼續把服務端返回的字符串以及自己的appScheme 發給支付寶的客戶端App --->調起支付寶的客戶端(或者H5網頁)--->客戶端付款完成 --->支付寶把信息發給--->支付寶服務端 --->支付寶服務端返回支付情況給支付寶客戶端
(3).支付寶客戶端告知我們的商家App--->商家App顯示是否支付成功
(4).同時支付寶服務端會異步通知我們的商家服務端App告知是否支付成功
附上交易的圖片如下:
4.一定要記得修改urlSchemes
后期會把微信支付,銀聯銀聯支付等以及此三者的對接等寫一個完整的Demo整理下,以供學習!
附上支付寶iOS端集成流程,貌似沒什么用!
https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.sFUG6d&treeId=204&articleId=105295&docType=1
有什么問題,可以加QQ:1824496534,備注:支付
歡迎相互指導,一起進步!
----- 來自DaviD