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(...)
方法中的用户产品选择动态提取支付信息。 - 将付款确认发送到你的服务器并验证付款是否已实际完成。
- 在应用程序中处理错误和取消用户案例。