Android:接受PayPal /信用卡付款
示例
在本教程中,我们将学习如何设置PayPalAndroidSDK以通过PayPal付款或信用卡购买来处理简单付款。在此示例的最后,您应该在应用程序中具有一个简单的按钮,单击该按钮时,会将用户转发到PayPal确认已设置的付款,然后将用户返回到该应用程序并记录付款确认。
PayPalDeveloperGithub存储库中提供了此示例的完整应用程序代码。
让我们开始吧。
第一步是获取SDK并将其添加到您的项目中。我们将引用添加到我们的build.gradle依赖关系中,如下所示:
dependencies { compile 'com.paypal.sdk:paypal-android-sdk:2.14.1' ... }
现在,我们转到MainActivity.java文件(或您要添加PayPal按钮集成的任何位置),并config为我们的客户端ID和将要使用的环境(沙盒)添加一个对象。
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>mainXML文件中,您可以为按钮添加以下定义,该定义将定义带有paypal_buttonID的按钮的文本和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>
放置好按钮后,我们现在必须处理按钮单击才能开始付款处理。在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); }
我们在这里要做的是首先serviceConfig使用config我们先前为客户ID和沙盒环境定义的来设置服务意图()。然后,我们指定要处理的付款对象。为了这个示例,我们设置了静态价格,货币和描述。在最终应用程序中,这些值应从用户尝试在应用程序中购买的内容中获取。最后,我们设置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)); //待办事项:将“确认”发送到您的服务器以进行验证 } catch (JSONException e) { Log.e("sampleapp", "没有确认数据: ", e); } } } else if (resultCode == Activity.RESULT_CANCELED) { Log.i("sampleapp", "用户已取消。"); } 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(...)方法基于用户产品选择动态提取付款信息。
将付款确认发送到您的服务器,并验证付款是否实际通过。
处理应用内的错误和取消用户案例。