PayPal Android:接受PayPal /信用卡付款


在本教程中,我們將學習如何設置PayPal Android SDK以通過PayPal付款或信用卡購買處理簡單付款。在此示例的末尾,您應該在應用程序中有一個簡單的按鈕,當單擊該按鈕時,會將用戶轉發到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> layout> main XML文件中,您可以為按鈕添加以下定義,該定義將為具有paypal_button ID的按鈕定義文本和onClick處理程序。

<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(...) onCreate(...)方法。

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 )。然後,我們指定要處理的付款對象。為了這個例子,我們設置靜態價格,貨幣和描述。在最終的應用程序中,這些值應該從用戶嘗試在應用程序中購買的內容中獲取。最後,我們設置了paymentConfig ,添加了我們之前定義的configpayment對象,並啟動了活動。

此時,將向用戶顯示PayPal登錄和付款屏幕,允許他們選擇是使用PayPal還是使用信用卡付款(如果相機可用,則通過手動輸入或card.io)。那個屏幕看起來像這樣:

PayPal付款確認屏幕

完成後,我們需要準備一個處理程序,以便PayPal在確認付款或取消後將用戶轉發回應用程序。讓我們為此目的覆蓋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是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對象,我們可以看到我們stateapproved state ,這意味著付款已得到確認。此時,應將該對象發送到您的服務器以確認付款實際已通過。有關這些步驟的詳細信息, 請參閱這些文檔

我們的最後一步是在onDestroy(...)進行清理。

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

這裡的所有都是它的。在這個例子中,我們創建了一個簡單的按鈕,用PayPal或信用卡處理付款。從這一點開始,您可以通過以下幾個步驟擴展此示例:

  • 根據beginPayment(...)方法中的用戶產品選擇動態beginPayment(...)支付信息。
  • 將付款確認發送到您的服務器並驗證付款是否已實際完成。
  • 在應用程序中處理錯誤和取消用戶案例。