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(...)
方法。
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
,新增了我們之前定義的 config
和 payment
物件,並啟動了活動。
此時,將向使用者顯示 PayPal 登入和付款螢幕,允許他們選擇是使用 PayPal 還是使用信用卡付款(如果相機可用,則通過手動輸入或 card.io)。那個螢幕看起來像這樣:
完成後,我們需要準備一個處理程式,以便 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
物件,我們可以看到我們有一個 state
的 approved
,這意味著付款已經確認。此時,應將該物件傳送到你的伺服器以確認付款實際已通過。有關這些步驟的詳細資訊,請參閱這些文件 。
我們的最後一步是清理我們的 onDestroy(...)
。
@Override
public void onDestroy(){
stopService(new Intent(this, PayPalService.class));
super.onDestroy();
}
這裡的所有都是它的。在這個例子中,我們建立了一個簡單的按鈕,用 PayPal 或信用卡處理付款。從這一點開始,你可以通過以下幾個步驟擴充套件此示例:
- 根據
beginPayment(...)
方法中的使用者產品選擇動態提取支付資訊。 - 將付款確認傳送到你的伺服器並驗證付款是否已實際完成。
- 在應用程式中處理錯誤和取消使用者案例。