不理解支付功能集成的什么商戶端贱纠,用戶端复哆,支付平臺端沒關(guān)系猬错,本篇以本人集成支付寶已經(jīng)成功了為例饥漫,解讀支付寶的SDK集成流程:
一般任何的技術(shù)學(xué)習(xí)都要先由Demo逐步去學(xué)習(xí):
本篇就一支付寶的Demo為例教您如何快速集成犀变!
親測可用妹孙,抓緊學(xué)習(xí)吧!
本篇目錄:
一.導(dǎo)入對應(yīng)的庫
二.快速接入方式:
三.注意事項(xiàng):
一.導(dǎo)入對應(yīng)的庫
1.導(dǎo)入以下系統(tǒng)庫
在Build Phases選項(xiàng)卡的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
// 支付寶依賴的(要在導(dǎo)入AlipaySDK.framework庫之后才能加入)
AlipaySDK.framework
2.2個(gè).a靜態(tài)庫和1個(gè)framework 和一個(gè)bundle文件涕蜂,共計(jì)4個(gè)庫(在Demo中查找),如下:
libcrypto.a
libssl.a
AlipaySDK.framework
AlipaySDK. bundle
3.導(dǎo)入demo中的2個(gè)文件夾映琳,如下:
openssl
Util
導(dǎo)入效果如下:
Build,編譯發(fā)現(xiàn)會報(bào)以下錯誤
報(bào)錯 : #include <openssl/asn1.h> 找不到
解決方案:
在Build Settings選項(xiàng)卡中搜索 header search添加新的路徑為$(PROJECT_DIR)/FarmAndAnimal/Vendor/AliPaySDK/
其中這里的AliPaySDK 指的是openssl 的上一級文件為止萨西,不一定是AliPaySDK有鹿, 切記!
二.快速接入方式:
- Appdelegate
頭文件
#import <AlipaySDK/AlipaySDK.h>
代碼(Code)
Appdelegate 中加入以下代碼谎脯,原封不動的葱跋!(這里以只集成支付寶的為例,后期總結(jié)集成所有的支付的處理辦法)
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
if ([url.host isEqualToString:@"safepay"]) {
// 支付跳轉(zhuǎn)支付寶錢包進(jìn)行支付源梭,處理支付結(jié)果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
// 授權(quán)跳轉(zhuǎn)支付寶錢包進(jìn)行支付娱俺,處理支付結(jié)果
[[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(@"授權(quán)結(jié)果 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"]) {
// 支付跳轉(zhuǎn)支付寶錢包進(jìn)行支付,處理支付結(jié)果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
// 授權(quán)跳轉(zhuǎn)支付寶錢包進(jìn)行支付废麻,處理支付結(jié)果
[[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(@"授權(quán)結(jié)果 authCode = %@", authCode?:@"");
}];
}
return YES;
}
2.在要支付的功能類中導(dǎo)入以下代碼
頭文件:
#import "RSADataSigner.h"
#import <AlipaySDK/AlipaySDK.h>
代碼(Code):
// NOTE: 調(diào)用支付結(jié)果開始支付
//應(yīng)用注冊scheme,在AliSDKDemo-Info.plist定義URL types
NSString *appScheme = @"FarmBB";
[[AlipaySDK defaultService] payOrder:result.data fromScheme:appScheme callback:^(NSDictionary * resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
注意:2個(gè)參數(shù)解釋:
在請求訂單成功后荠卷,支付寶返回一坨字符串,如上為result.data 烛愧,以及支付成功后回調(diào)到自己應(yīng)用的標(biāo)示為appScheme 油宜,然后按照上面的進(jìn)行傳遞,在resultDic 中接受是否支付成功怜姿,如下:
NSString *resultStatus = resultDic[@"resultStatus"];
NSString *errStr = resultDic[@"memo"];
switch (resultStatus.integerValue) {
case 9000:// 成功
break;
case 6001:// 取消
break;
default:
break;
}
3.修改urlSchemes,按照如下圖所示慎冤,添加回調(diào)的url schemes ,注意要同上面的appScheme 保持一致,這樣可以保證支付成功還是失敗都能回到我的應(yīng)用中沧卢。
三.注意事項(xiàng):
1.報(bào)錯的原理處理
#include <openssl/asn1.h> 找不到蚁堤,原因是因?yàn)闆]有找到對應(yīng)的路徑,注意這里是<> 會從根目錄去尋找但狭,所
以如果設(shè)置路徑到 openssl的上一級就可以找到披诗,就解決了這個(gè)報(bào)錯撬即!
2.Appdelegate中的方法解釋:
下面的方法iOS9之前跳到支付寶返回判斷是否支付成功,或者訂單已經(jīng)下了藤巢,但是還沒有支付搞莺,就在這個(gè)方法中處理息罗!
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
下面的方法iOS9之后跳到支付寶返回判斷是否支付成功掂咒,或者訂單已經(jīng)下了,但是還沒有支付迈喉,就在這個(gè)方法中處理
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
3.支付流程說明:
(1).首先由客戶端發(fā)出下訂單的請求--->我們的服務(wù)端響應(yīng)并把自己的請求返回訂單信息绍刮,說明下訂單成功!
(2).其次客戶端繼續(xù)把服務(wù)端返回的字符串以及自己的appScheme 發(fā)給支付寶的客戶端App --->調(diào)起支付寶的客戶端(或者H5網(wǎng)頁)--->客戶端付款完成 --->支付寶把信息發(fā)給--->支付寶服務(wù)端 --->支付寶服務(wù)端返回支付情況給支付寶客戶端
(3).支付寶客戶端告知我們的商家App--->商家App顯示是否支付成功
(4).同時(shí)支付寶服務(wù)端會異步通知我們的商家服務(wù)端App告知是否支付成功
附上交易的圖片如下:
4.一定要記得修改urlSchemes
后期會把微信支付挨摸,銀聯(lián)銀聯(lián)支付等以及此三者的對接等寫一個(gè)完整的Demo整理下孩革,以供學(xué)習(xí)!
附上支付寶iOS端集成流程得运,貌似沒什么用膝蜈!
https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.sFUG6d&treeId=204&articleId=105295&docType=1
有什么問題,可以加QQ:1824496534熔掺,備注:支付
歡迎相互指導(dǎo)饱搏,一起進(jìn)步!
----- 來自DaviD