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();
}