PayPal Android:PayPal /クレジットカード決済を受け入れる


このチュートリアルでは、PayPal支払いまたはクレジットカードによる簡単な支払いを処理するためにPayPal Android SDKを設定する方法を学習します。この例の最後には、クリックするとユーザーがPayPalに転送され、設定された支払いが確認され、ユーザーがアプリケーションに戻って支払いの確認を記録する簡単なボタンがアプリケーションにあります。

このサンプルの完全なアプリケーションコードは、 PayPal Developer Githubリポジトリにあります

始めましょう。

最初の手順は、SDKを取得してプロジェクトに追加することです。 build.gradleへの参照を以下のように追加します。

dependencies {
    compile 'com.paypal.sdk:paypal-android-sdk:2.14.1'
    ...
}

次に、MainActivity.javaファイル(またはPayPalボタンの統合を追加する場所)に移動し、私たちが使用するクライアントIDと環境(サンドボックス)のconfigオブジェクトを追加します。

private static PayPalConfiguration config = new PayPalConfiguration()
    .environment(PayPalConfiguration.ENVIRONMENT_SANDBOX)
    .clientId("YOUR CLIENT ID");

ここで、 onCreate(...)メソッドでボタンを作成します。これにより、クリックされたPayPalによる支払い処理が可能になります。

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Button button = (Button) findViewById(R.id.paypal_button);
}

これで、そのボタンの機能を定義する必要があります。あなたのres>レイアウト>メインのXMLファイルでは、ボタンのテキストとonClickハンドラを定義するボタンの定義をpaypal_button IDのボタンに追加することができます。

<Button android:id="@+id/paypal_button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="@string/paypal_button"
    android:onClick="beginPayment" />

クリックすると、ボタンはbeginPayment(...)メソッドを呼び出します。次に、ボタンのテキストをstrings.xmlファイルに追加すると、次のようになります。

<string name="paypal_button">Pay with PayPal</string>

ボタンを所定の位置に置いたまま、支払い処理を開始するためにボタンクリックを処理する必要があります。前のonCreate(...)メソッドの下に次のbeginPayment(...)メソッドを追加します。

public void beginPayment(View view){
    Intent serviceConfig = new Intent(this, PayPalService.class);
    serviceConfig.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
    startService(serviceConfig);

    PayPalPayment payment = new PayPalPayment(new BigDecimal("5.65"), 
        "USD", "My Awesome Item", PayPalPayment.PAYMENT_INTENT_SALE);

    Intent paymentConfig = new Intent(this, PaymentActivity.class);
    paymentConfig.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
    paymentConfig.putExtra(PaymentActivity.EXTRA_PAYMENT, payment);
    startActivityForResult(paymentConfig, 0);
}

ここでは、まずクライアントIDとサンドボックス環境で定義したconfigを使用して、サービスインテント( serviceConfig )をconfigします。次に、処理する支払オブジェクトを指定します。この例では、固定価格、通貨、および説明を設定しています。最終的なアプリケーションでは、これらの値は、ユーザーがアプリケーションで購入しようとしているものから取得する必要があります。最後に、 paymentConfigを設定し、前に定義したconfigオブジェクトとpaymentオブジェクトを追加して、アクティビティを開始します。

この時点で、ユーザーはPayPalのログイン画面と支払い画面が表示され、PayPalまたはクレジットカードで支払うかどうかを選択することができます(手動入力またはカメラが利用可能な場合はcard.io経由)。その画面は次のようになります。

PayPal支払い確認画面

完了したら、支払いやキャンセルの確認後にPayPalがユーザーをアプリケーションに戻す準備ができたハンドラを準備する必要があります。その目的のためにonActivityResult(...)をオーバーライドonActivityResult(...)ましょう。

@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data){
    if (resultCode == Activity.RESULT_OK){
        PaymentConfirmation confirm = data.getParcelableExtra(
            PaymentActivity.EXTRA_RESULT_CONFIRMATION);
        if (confirm != null){
            try {
                Log.i("sampleapp", confirm.toJSONObject().toString(4));

                // TODO: send 'confirm' to your server for verification

            } catch (JSONException e) {
                Log.e("sampleapp", "no confirmation data: ", e);
            }
        }
    } else if (resultCode == Activity.RESULT_CANCELED) {
        Log.i("sampleapp", "The user canceled.");
    } else if (resultCode == PaymentActivity.RESULT_EXTRAS_INVALID) {
        Log.i("sampleapp", "Invalid payment / config set");
    }
}

onActivityResult(...)メソッド内で、 resultCodeれるresultCodeがRESULT_OK(ユーザー確認支払い)、RESULT_CANCELED(ユーザーキャンセル支払い)、またはRESULT_EXTRAS_INVALID(設定に問題があります)かどうかを確認しています。有効な確認の場合、支払いから返されたオブジェクトが取得され、このサンプルではログに記録されます。返されるものは、次のようなものになります。

{
    "client": {
        "environment": "sandbox",
        "paypal_sdk_version": "2.14.1",
        "platform": "Android",
        "product_name": "PayPal-Android-SDK"
    },
    "response": {
        "create_time": "2016-05-02T15:33:43Z",
        "id": "PAY-0PG63447RB821630KK1TXGTY",
        "intent": "sale",
        "state": "approved"
    },
    "response_type": "payment"
}

responseオブジェクトを見ると、 approved stateであることがわかります。これは、支払いが確認されたことを意味します。この時点で、サーバーにそのオブジェクトを送信して、支払いが実際に完了したことを確認する必要があります。これらの手順の詳細については、これらのドキュメントを参照してください

私たちの最後のステップは、私たちのonDestroy(...)クリーンアップすることonDestroy(...)

@Override
public void onDestroy(){
    stopService(new Intent(this, PayPalService.class));
    super.onDestroy();
}

それがすべてです。この例では、PayPalまたはクレジットカードで支払いを処理する簡単なボタンを作成しました。この時点から、このサンプルを展開するための次の手順がいくつかあります。

  • beginPayment(...)メソッドでユーザーの商品選択に基づいて支払い情報を動的にbeginPayment(...)
  • サーバーに支払い確認を送信し、支払いが実際に行ったことを確認します。
  • エラーを処理し、アプリ内のユーザーのキャンセルをキャンセルします。