Android 步驟 1 佈局初始化和處理伺服器響應

PayPal Developer Github 儲存庫中提供了此應用程式的完整示例程式碼(Android +節點伺服器)。

建立應用程式的 Android 部分的第一個階段是設定基本佈局並處理從我們將在 Node 中設定的伺服器返回的響應。

首先建立一個新的 PayPalConfiguration 物件來存放你的應用程式資訊。

private static PayPalConfiguration config = new PayPalConfiguration()
        .environment(PayPalConfiguration.ENVIRONMENT_SANDBOX)
        .clientId("YOUR APPLICATION CLIENT ID")
        .merchantName("My Store")
        .merchantPrivacyPolicyUri(Uri.parse("https://www.example.com/privacy"))
        .merchantUserAgreementUri(Uri.parse("https://www.example.com/legal"));

接下來,我們為 onCreate(...) 新增一個簡單的按鈕,作為我們的付款啟動。這只是為了觸發操作,並且應該作為建立使用者未來付款的啟動過程(例如,當他們同意訂閱時)。

@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 > activity_main.xml 下,我們新增按鈕的定義及其相關動作,點選它時會呼叫 beginFuturePayment(...),我們將在一分鐘內定義。

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

res > values > strings.xml 下,我們為按鈕新增一個字串引用。

<string name="paypal_button">Process Future Payment</string>

現在我們新增按鈕處理程式,以便在使用者單擊按鈕時啟動呼叫以開始將來的付款流程。我們在這裡做的是使用我們在此示例頂部設定的配置物件啟動支付服務。

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

    Intent intent = new Intent(this, PayPalFuturePaymentActivity.class);
    intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
    startActivityForResult(intent, 0);
}

當啟動進行未來付款的呼叫時,我們將獲得一些需要傳送到我們伺服器的資訊。我們從有效的未來付款請求(authCodemetadataId)中提取此資訊,然後執行非同步請求到伺服器以完成將來的付款(詳見步驟 2)。

@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{
                //prepare params to be sent to server
                String authCode = auth.getAuthorizationCode();
                String metadataId = PayPalConfiguration.getClientMetadataId(this);
                String [] params = {authCode, metadataId};

                //process async server request for token + payment
                ServerRequest req = new ServerRequest();
                req.execute(params);

            } catch (JSONException e) {
                Log.e("FPSample", "JSON Exception: ", e);
            }
        }
    } else if (resultCode == Activity.RESULT_CANCELED) {
        Log.i("FPSample", "User canceled.");
    } else if (resultCode == PayPalFuturePaymentActivity.RESULT_EXTRAS_INVALID) {
        Log.i("FPSample", "Invalid configuration");
    }
}

最後,我們定義了我們的 onDestroy()

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