iOS的Ping++支付接入步驟(詳細)

来源:http://www.cnblogs.com/Li-zhen/archive/2016/02/14/5165204.html
-Advertisement-
Play Games

iOS Ping++ 支付


Ping++ SDK

1.簡介

Ping++ SDK包括Server和Client兩部分。

其中Server目前支持 PHP,Java,Python,Node.js,Ruby,Go,C# 七種語言。

Client目前支持 iOS終端,Android終端,手機網頁PC網頁這四種平臺,分別對應iOS,Android,HTML5PC這四種Client SDK。

2.環境

為了提高接入效率,Ping++提供了Live和Test兩個工作模式提供開發者接入時使用,這兩種模式切換非常簡單,只需要在使用Server SDK 的過程中設置 API Key 時根據自己的需要使用相應的Key即可,設置為test key 表明使用Test 模式,設置為live key 則使用Live模式。Test Key 在你註冊Ping++後即可自動獲得,Live key 則是在你完成簽約後獲得。

1⃣️Test 模式

Test模式提供開發測試時使用。因為Test模式吧支付流程與渠道草書隔離開,所以開發可以與渠道申請同時進行,從而縮短接入調試時間,Test 模式中發起虛擬交易不會調用真實支付控制項,支付時客戶端會調轉到Ping++提供的支付頁面

2⃣️Live 模式

Live 時應用上線的模式。該模式下會發生真實的交易,調起真實的支付控制項產生真實的資金流動,所以請確保在Test模式下所有的攻能逗測試通過後,在切換到Live模式。

3.參數

應用在接入 Ping++ SDK 時,需要使用以下三個參數,這三個參數你可以在管理平臺中獲取:

1⃣️API Key:是 Ping++ 分配給你的唯一身份標識,即上面說到的Test KeyLive Key。

2⃣️應用ID:是 Ping++ 分配給你的應用的唯一標識。

3⃣️Notify URL:是 Ping++ 系統用來向你的應用後臺推送非同步通知時使用的地址,該地址必須是一個互聯網可以訪問的地址。你可以在 Ping++ 管理平臺中對應的應用內進行設置。

下麵介紹下Ping++如何發起並完成支付

 

1. Client 發送支付要素給 Server

用戶選擇渠道點擊交易按鈕, Client 收集交易所需的相關參數傳遞給 Server (伺服器的地址為代碼中的 URL)

 

NSMutableURLRequest * postRequest=[NSMutableURLRequest requestWithURL:url];

    NSDictionary* dict = @{

                           @"channel" : self.channel,

                           @"amount"  : amountStr

                           };

[postRequest setHTTPMethod:@"POST"];

    [postRequest setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];

    NSData* data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];

    NSString *bodyData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    [postRequest setHTTPBody:[NSData dataWithBytes:[bodyData UTF8String] length:strlen([bodyData UTF8String])]];

    ViewController * __weak weakSelf = self;

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    [self showAlertWait];

    [NSURLConnection sendAsynchronousRequest:postRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

        dispatch_async(dispatch_get_main_queue(), ^{

            NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;

            [weakSelf hideAlert];

            if (httpResponse.statusCode != 200) {

                NSLog(@"statusCode=%ld error = %@", (long)httpResponse.statusCode, connectionError);

                [weakSelf showAlertMessage:kErrorNet];

                return;

            }

            if (connectionError != nil) {

                NSLog(@"error = %@", connectionError);

                [weakSelf showAlertMessage:kErrorNet];

                return;

            }

            NSString* charge = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

            NSLog(@"charge = %@", charge);

            //客戶端從伺服器端拿到charge對象後,調用下麵的方法

           //請看3.Client 調起支付控制項完成支付

       });

    }];

 

2. Server 發送支付請求並將返回的支付憑據傳給 Client

Server 接收並處理 Client 傳過來的數據,使用 Ping++ 提供的方法向 Ping++ 發起交易,並將從 Ping++ 獲得的帶支付憑據的 Charge 對象返回給 Client。

3. Client 調起支付控制項完成支付

Client 接收 Server 返回的帶支付憑據的 Charge 對象並用之調起支付插件完成交易.

//客戶端從伺服器端拿到charge對象後,調用下麵的方法

            [Pingpp createPayment:charge viewController:weakSelf appURLScheme:kUrlScheme withCompletion:^(NSString *result, PingppError *error) {

                NSLog(@"completion block: %@", result);

                if (error == nil) {

                    NSLog(@"支付成功");

                } else {

                    NSLog(@"PingppError: code=%lu msg=%@", (unsigned  long)error.code, [error getMsg]);

                    NSLog(@"支付失敗");

                }

                [weakSelf showAlertMessage:result];

            }];

4. 渠道同步返回支付結果給 Client

在上一步中用戶完成了支付,渠道會返回一個支付結果給客戶端,這裡 Client 需要做的是處理此結果。

渠道為銀聯、百度錢包或者渠道為支付寶但未安裝支付寶錢包時,交易結果會在調起插件時的 Completion 中返回。 渠道為微信、支付寶且安裝了支付寶錢包時,請實現 UIApplicationDelegate 的 - application:openURL:sourceApplication:annotation: 方法:

#warning 渠道為微信、支付寶且安裝了支付寶錢包時實現方法

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{

    [Pingpp handleOpenURL:[NSURL URLWithString:kUrl] withCompletion:^(NSString *result, PingppError *error) {

        if ([result isEqualToString:@"success"]) {

            //...

        }else{

            NSLog(@"PingppError: code=%lu msg=%@", error.code, [error getMsg]);

        }

    }];

    return YES;

}

5. Server 收到 Ping++ 發送的交易結果的非同步通知

Ping++ 會把從渠道收到的非同步通知告訴商戶 Server,客戶 Server 接收到非同步通知是一個帶支付狀態的完整的 Charge 對象,客戶在接收到非同步通知後需要回覆 success 給 Ping++ 表明成功收到非同步通知。所有的交易結果,商戶均須以非同步通知結果為準。關於非同步通知具體請參見 API Reference 文檔。

 

參考鏈接: https://www.pingxx.com/guidance/client/sdk/ios

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 閑聊:新年第一天上班,看著自己15年年底寫的代碼,真心覺得很爛,因為年底沒時間去寫,一想著做後臺管理需要獲取一周的開始和結束日期,就慌了,項目趕著測試呢,還有好多事情未做,就直接抄襲了網上的一段錯誤代碼,其實真的很簡單,今天重新花點時間封裝一下,以備後用,大神勿噴,謝謝! 一、封裝為jQuery版日
  • var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411]; numbers = numbers.sort(function(){ return Math.random() – 0.5}); /* numbers 數組將類似於 [
  • function generateRandomAlphaNum(len) { var rdmString = ""; for( ; rdmString.length < len; rdmString += Math.random().toString(36).substr(2));return rd
  • 文檔對象模型DOM(Document Object Model)定義訪問和處理HTML文檔的標準方法。 DOM 將HTML文檔呈現為帶有元素、屬性和文本的樹結構(節點樹)。 把上面的代碼拆分為Dom節點圖 如圖: 三種常見的DOM節點: 1.元素節點: 比如:html、h2、p、ul、li 即標簽
  • iOS記憶體管理的方式是引用計數機制。分為MRC(人式引用計數)和ARC(自動引用計數)、 為什麼要學習記憶體管理? 記憶體管理方式是引用計數機制,通過控制對象的引用計數來實現操作對象的功能。一個對象的生命周期有生成,持有,釋放,銷毀。引用計數分為ARC,MRC,在MRC中,增加引用計數的方法是retai
  • android許可權大全轉http://www.cnblogs.com/classic/archive/2011/06/20/2085055.html
  • 關於XML解析的blog有很多,我本來不想寫的;不過我發現有一些細節他們都沒有說,我這裡就多說一些細節。 我們在哪些地方用XML:現在json用的這麼多,使用XML通訊的已經不多了。我遇到的場景是,我們的伺服器有很多個,需要用戶去選擇。那麼我們就需要定期維護一個伺服器列表,這個伺服器列表的配置文件我
  • 1.模擬器上運行正常,但是真機調試時報編譯鏈接錯誤 :ld: '/Users/wangqipeng/Desktop/iOS支付寶官方文檔/AlixPayDemo/libcrypto.a(bio_lib.o)' does not contain bitcode. You must rebuild it
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...