支付__支付寶App支付接入流程(一)

不理解支付功能集成的什么商戶端,用戶端,支付平臺端沒關系,本篇以本人集成支付寶已經成功了為例,解讀支付寶的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

導入效果如下:

導入的外庫,共計6個文件.png

Build,編譯發現會報以下錯誤
報錯 : #include <openssl/asn1.h> 找不到
解決方案:
在Build Settings選項卡中搜索 header search添加新的路徑為$(PROJECT_DIR)/FarmAndAnimal/Vendor/AliPaySDK/
其中這里的AliPaySDK 指的是openssl 的上一級文件為止,不一定是AliPaySDK, 切記!

二.快速接入方式:

  1. 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 保持一致,這樣可以保證支付成功還是失敗都能回到我的應用中。

修改我的urlSchemes.png

三.注意事項:

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告知是否支付成功

附上交易的圖片如下:


支付寶交易流程圖.png

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容