Skip to content
This repository has been archived by the owner on Jun 11, 2021. It is now read-only.

Latest commit

 

History

History
179 lines (128 loc) · 8.72 KB

future_payments_mobile.md

File metadata and controls

179 lines (128 loc) · 8.72 KB

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

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

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

概要

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

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

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

お客さまの同意を得る

サンプルアプリには、より完全な例が用意されています。ただし、最低限以下を行う必要があります。

  1. AndroidManifest.xmlファイルに許可を追加します。

    <!-- for most things, including card.io & paypal -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
  2. AndroidManifest.xmlファイルの<application>タグでSDKのサービスとアクティビティを宣言します。

    <service android:name="com.paypal.android.sdk.payments.PayPalService"
            android:exported="false" />
        
    <activity android:name="com.paypal.android.sdk.payments.LoginActivity" />
    <activity android:name="com.paypal.android.sdk.payments.PayPalFuturePaymentActivity" />
    <activity android:name="com.paypal.android.sdk.payments.FuturePaymentConsentActivity" />
    <activity android:name="com.paypal.android.sdk.payments.FuturePaymentInfoActivity" />
  3. PayPalConfigurationオブジェクトを作成します。このオブジェクトにより、SDKのさまざまな側面を設定できます。

    private static PayPalConfiguration config = new PayPalConfiguration()
    
    		// モック環境で開始します。準備完了後、sandbox (ENVIRONMENT_SANDBOX)
    		// または本番 (ENVIRONMENT_PRODUCTION)環境に切り替えます。
            .environment(PayPalConfiguration.ENVIRONMENT_NO_NETWORK)
    
            .clientId("<YOUR_CLIENT_ID>")
            
            // 最低限3つのマーチャント情報プロパティを設定する必要があります。
    		 //  これらは、アプリを登録した際にPayPalに提供した値と同じである必要があります。
            .merchantName("Example Store")
            .merchantPrivacyPolicyUri(Uri.parse("https://www.example.com/privacy"))
            .merchantUserAgreementUri(Uri.parse("https://www.example.com/legal"));
  4. アクティビティの作成時にPayPalServiceを開始し、破棄の際に停止します。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        Intent intent = new Intent(this, PayPalService.class);
    
        intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
    
        startService(intent);
    }
    
    @Override
    public void onDestroy() {
        stopService(new Intent(this, PayPalService.class));
        super.onDestroy();
    }
  5. PayPalの今後の支払いアクティビティを、たとえばボタンが押された場合などに起動します。

    public void onFuturePaymentPressed(View pressed) {
        Intent intent = new Intent(SampleActivity.this, PayPalFuturePaymentActivity.class);
        
        startActivityForResult(intent, REQUEST_CODE_FUTURE_PAYMENT);
    }
  6. onActivityResult()を実装します。

    @Override
    protected void onActivityResult (int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            PayPalAuthorization auth = data
                    .getParcelableExtra(PayPalFuturePaymentActivity.EXTRA_RESULT_AUTHORIZATION);
            if (auth != null) {
                try {
                    String authorization_code = auth.getAuthorizationCode();
    
                    sendAuthorizationToServer(auth);
    
                } catch (JSONException e) {
                    Log.e("FuturePaymentExample", "非常にまれなエラーが発生しました: ", e);
                }
            }
        } else if (resultCode == Activity.RESULT_CANCELED) {
            Log.i("FuturePaymentExample", "ユーザーがキャンセルしました。");
        } else if (resultCode == PayPalFuturePaymentActivity.RESULT_EXTRAS_INVALID) {
            Log.i("FuturePaymentExample",
                    "PayPalServiceを前に開始するための処理で、無効なPayPalConfigurationが含まれていた可能性があります。ドキュメントを参照してください。");
        }
    }
  7. プロセスを完了するため、サーバーに認可応答を送信します。

    private void sendAuthorizationToServer(PayPalAuthorization authorization) {
        
        // TODO:
        // 認可応答をサーバーに送信します。サーバーは認可コードを
        // OAuthのアクセストークンおよびリフレッシュトークンと交換できます。
        //
        // サーバーはこれらのトークンを保管するので、サーバーコードは、今後このユーザーの
        // 支払いを実行できます。
        
    }

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

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

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

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

public void onFuturePaymentPurchasePressed(View pressed) {
// SDKからアプリケーション相関IDを取得します。
String metadataId = PayPalConfiguration.getClientMetadataId(this);
        
// TODO: PayPalでの処理のため、相関IDと取引の詳細をサーバーに
// 送信します。
}

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

次の手順

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