Skip to content

Latest commit

 

History

History
executable file
·
200 lines (140 loc) · 9.67 KB

future_payments_mobile.md

File metadata and controls

executable file
·
200 lines (140 loc) · 9.67 KB

今後の支払い(Future Payments)のためのモバイルの統合

ここでは、PayPalアカウントを使用して今後の支払いを行うためにユーザーの同意を得る方法を説明します。

まだ実行していない場合は、プロジェクトにSDKを追加するための基本的な概要と手順のREADMEを参照してください。

概要

ご使用のアプリは、モバイルSDKを使って異なるタイミングで2つの情報を取得します。

最初に、PayPalアカウントからの支払いを行うため、お客さまの同意を得る必要があります。これは以下のように実行されます。

後に、事前承認された支払いの開始時に、アプリケーション相関IDを取得する必要があります。これは以下のように実行されます。

お客さまの同意を得る

  1. SDKを初期化し、クライアントIDを入力します。この操作は通常、AppDelegateのdidFinishLaunchingWithOptions:メソッドで行います。

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
      // ...
      [PayPalMobile initializeWithClientIdsForEnvironments:@{PayPalEnvironmentProduction : @"YOUR_CLIENT_ID_FOR_PRODUCTION",
                                                             PayPalEnvironmentSandbox : @"YOUR_CLIENT_ID_FOR_SANDBOX"}];
      // ...
      return YES;
    }

    注: 本番環境からクライアントIDを取得していない場合は、PayPalEnvironmentProductionの項目を省略できます。

  2. PayPalFuturePaymentDelegateの下位のクラス(UIViewControllerのサブクラスとしてなど)を作成します。

    // SomeViewController.h
    #import "PayPalMobile.h"
    
    @interface SomeViewController : UIViewController<PayPalFuturePaymentDelegate>
    // ...
    @end
  3. PayPalConfigurationオブジェクトを作成します。このオブジェクトにより、SDKのさまざまな側面を設定できます。

    // SomeViewController.m
    
    @interface SomeViewController ()
    // ...
    @property (nonatomic, strong, readwrite) PayPalConfiguration *payPalConfiguration;
    // ...
    @end
    
    @implementation SomeViewController
    
    - (instancetype)initWithCoder:(NSCoder *)aDecoder {
      self = [super initWithCoder:aDecoder];
      if (self) {
        _payPalConfiguration = [[PayPalConfiguration alloc] init];
    
        // 値の詳細とデフォルト値はPayPalConfiguration.hを参照してください。
    
        // 最低限3つのマーチャント情報プロパティを設定する必要があります。
        // これらは、アプリを登録した際にPayPalに提供した値と同じである必要があります。
        _payPalConfiguration.merchantName = @"Ultramagnetic Omega Supreme";
        _payPalConfiguration.merchantPrivacyPolicyURL = [NSURL URLWithString:@"https://www.omega.supreme.example/privacy"];
        _payPalConfiguration.merchantUserAgreementURL = [NSURL URLWithString:@"https://www.omega.supreme.example/user_agreement"];
    
      }
      return self;
    }
  4. 環境を確立し、PayPalのサーバーに事前接続します。

    ユーザーが支払いを開始する可能性のあるビューコントローラーを最初に表示する際に行うことをおすすめします。 (接続時間は制限されているため、コントローラーの表示よりもかなり前に事前接続することはしないでください。)

    // SomeViewController.m
    
    - (void)viewWillAppear:(BOOL)animated {
      [super viewWillAppear:animated];
    
      // モック環境で作業を開始してください。準備完了後、PayPalEnvironmentProductionに切り替えます。
      [PayPalMobile preconnectWithEnvironment:PayPalEnvironmentNoNetwork];
    }
  5. 設定を使用してPayPalFuturePaymentViewControllerを作成および表示します。

    // SomeViewController.m
    
    - (IBAction)obtainConsent {
    
      PayPalFuturePaymentViewController *fpViewController;
      fpViewController = [[PayPalFuturePaymentViewController alloc] initWithConfiguration:self.payPalConfiguration
                                                                                 delegate:self];
    
      //PayPalFuturePaymentViewControllerを表示します。
      [self presentViewController:fpViewController animated:YES completion:nil];
    }
  6. PayPalFuturePaymentDelegateデリゲートメソッドを実装し、成功時の認可応答やユーザーによるキャンセルの通知を受信します。 実装により、モーダルビューコントローラーを破棄する必要があります。

    // SomeViewController.m
    
    #pragma mark - PayPalFuturePaymentDelegateメソッド
    
    - (void)payPalFuturePaymentDidCancel:(PayPalFuturePaymentViewController *)futurePaymentViewController {
      // ユーザーがログインをキャンセルしました。PayPalLoginViewControllerを破棄します。
      [self dismissViewControllerAnimated:YES completion:nil];
    }
    
    - (void)payPalFuturePaymentViewController:(PayPalFuturePaymentViewController *)futurePaymentViewController
                    didAuthorizeFuturePayment:(NSDictionary *)futurePaymentAuthorization {
      // ユーザーは、問題なくPayPalにログインし、今後の支払いに同意しました。
    
      // ここでコードはサーバーに認可応答を送信する必要があります。
      [self sendAuthorizationToServer:futurePaymentAuthorization];
    
      // 必ずPayPalLoginViewControllerを破棄してください。
      [self dismissViewControllerAnimated:YES completion:nil];
    }
  7. プロセスを完了するため、サーバーに認可応答を送信します。

    // SomeViewController.m
    
    - (void)sendAuthorizationToServer:(NSDictionary *)authorization {
      // 認可応答全体を送信します
      NSData *consentJSONData = [NSJSONSerialization dataWithJSONObject:authorization
                                                                options:0
                                                                  error:nil];
    
      // (ここにネットワークコードを記述します)
      //
      // 認可応答をサーバーに送信すると
      // 認可コードをOAuthのアクセストークンおよびリフレッシュトークンと交換できます。
      //
        // サーバーはこれらのトークンを保管するので、サーバーコードは、今後このユーザーの
        // 支払いを実行できます。
    }

アプリケーション相関IDの取得

モバイル端末から事前承認された支払い(「今後の支払い」)を開始する場合、モバイルアプリは、アプリケーション相関IDをモバイルSDKから取得し、サーバーに渡す必要があります。サーバーは、PayPalに送信する支払いリクエストにこのアプリケーション相関IDを含める必要があります。

PayPalは、このアプリケーション相関IDを使用して、ユーザーが同意した有効な端末およびアプリから支払いが行われていることを認証します。これは、不正取引や拒否を減らすことに役立ちます。PayPalは、適切にアプリケーション相関IDを提供しない取引での損失についてはいっさい保護しません。

この値をキャッシュまたは格納しないでください。

例:

- (IBAction)paymentButtonTapped:(UIButton *)sender {

    // アクティビティインジケーターを表示します。

    NSString *metadataID = [PayPalMobile clientMetadataID];

    // PayPalでの処理のため、相関IDと取引の詳細をサーバーに送信します。
}

サーバーは、PayPalへの支払いリクエストを作成する際、HTTPヘッダーPayPal-Client-Metadata-Idに、SDKから取得したこのアプリケーション相関IDの値を含める必要があります。

次の手順

今後の支払いのためのサーバー側の統合を読み、認可コードとOAuth2のトークンを交換して、アクセストークンと相関IDにより支払いを作成します。