你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS的Ping++支付接入步驟(詳細)

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

編輯:IOS開發綜合

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 *)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 文檔。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved