如何在安卓应用中集成 PayPal?
简介
我们可以在任何安卓应用中看到不同的支付网关,用于向应用用户收取款项,以提供特定服务,例如 Paytm、Razorpay、PayPal 等等。本文将介绍如何在安卓应用中集成 PayPal。
实现
我们将创建一个简单的应用,其中包含一个文本视图,用于显示应用标题。之后,我们将创建一个文本编辑框,用于输入用户需要支付的金额,以及一个用于支付的按钮。
步骤 1:创建用于 PayPal SDK 的客户端 ID
访问该 URL 并使用您的 PayPal 账号和密码登录。登录后,您会看到一个创建应用程序的选项。点击该选项即可创建一个新应用程序,并在其中指定应用程序名称和其他必需的详细信息。填写完所有必需数据后,系统将创建一个新应用程序,您将看到一个屏幕,其中显示了我们创建的应用程序的客户端 ID。我们将在项目中使用该客户端 ID,因此请务必复制它。
步骤 2:在 Android Studio 中创建新项目
打开 Android Studio,如下图所示。在下图所示的界面中,点击"新建项目"创建一个新的 Android Studio 项目。
点击"新建项目"后,您将看到如下界面。
在此界面中,只需选择"空 Activity",然后点击"下一步"。点击"下一步"后,您将看到如下界面。
在此屏幕中,我们只需指定项目名称。然后,包名将自动生成。
注意:请确保选择 Java 作为语言。
指定所有详细信息后,单击"完成"以创建一个新的 Android Studio 项目。
项目创建完成后,我们将看到两个已打开的文件:activity_main.xml 和 MainActivity.java 文件。
步骤 3:在 build.gradle 文件中添加 PayPal SDK 依赖项
导航到 Gradle 脚本 > build.gradle 文件(应用程序级别),并在 dependencies 部分添加以下依赖项。
implementation 'com.paypal.sdk:paypal-android-sdk:2.14.2'
添加上述依赖项后,只需同步项目即可安装。
步骤 4:处理 activity_main.xml
导航至 activity_main.xml 文件。如果该文件不可见,请在左侧面板中导航至 app>res>layout>activity_main.xml 以打开该文件。打开该文件后,将以下代码添加到其中。代码中添加了注释,以便您了解详细信息。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<!-- on below line creating a text view for displaying the heading of our application -->
<TextView
android:id="@+id/idTVHeading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="100dp"
android:layout_marginEnd="10dp"
android:gravity="center"
android:padding="4dp"
android:text="Paypal Integration in Android"
android:textAlignment="center"
android:textColor="@color/black"
android:textSize="20sp"
android:textStyle="bold" />
<!-- on below line creating edit text for name -->
<EditText
android:id="@+id/idEdtAmount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/idTVHeading"
android:layout_margin="10dp"
android:hint="Enter Name"
android:inputType="number" />
<!-- on below line creating a button for making a payment-->
<Button
android:id="@+id/idBtnMakePayment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/idEdtAmount"
android:layout_margin="10dp"
android:padding="4dp"
android:text="Make Payment"
android:textAllCaps="false" />
</RelativeLayout>
说明:在上面的代码中,我们创建了一个根布局,它使用相对布局 (RelativeLayout)。在这个布局中,我们创建了一个文本视图 (TextView),用于显示应用程序的标题。之后,我们创建了一个文本编辑框 (EditText),用于让用户输入需要支付的金额。最后,我们创建了一个按钮,用于支付。
步骤 5:在 AndroidManifest.xml 文件中添加权限
导航到 app>AndroidManifest.xml 文件,并在 manifest 标签中添加以下权限以访问互联网。
<uses-permission android:name="android.permission.INTERNET" />
步骤 6:使用 MainActivity.java 文件
导航至 MainActivity.java 文件。如果该文件不可见,请在左侧面板中导航至 app>res>layout>MainActivity.java 打开该文件。打开该文件后,将以下代码添加到其中。代码中添加了注释,以便您详细了解其含义。
package com.example.java_test_application;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.paypal.android.sdk.payments.PayPalConfiguration;
import com.paypal.android.sdk.payments.PayPalPayment;
import com.paypal.android.sdk.payments.PayPalService;
import com.paypal.android.sdk.payments.PaymentActivity;
import com.paypal.android.sdk.payments.PaymentConfirmation;
import org.json.JSONException;
import org.json.JSONObject;
import java.math.BigDecimal;
public class MainActivity extends AppCompatActivity {
// 下面这行代码创建了一个用于存储 PayPal 客户 ID 的变量。
private static final String clientID = "Paste your client id here";
// 创建变量以编辑下面一行中的文本。
private EditText amountEdt;
// 创建下面这行按钮的变量。
private Button payBtn;
// 下面这行代码创建了一个变量来存储 PayPal SDK 的请求代码。
public static final int PAYPAL_REQUEST_CODE = 123;
// 下面这行代码创建了一个 PayPal 配置对象
private static PayPalConfiguration config = new PayPalConfiguration()
// 首先搭建模拟环境。准备就绪后,
// 切换到沙箱环境(ENVIRONMENT_SANDBOX)
// 或实时(环境生产)
.environment(PayPalConfiguration.ENVIRONMENT_SANDBOX)
// 下面这行代码传递的是一个客户端 ID。
.clientId(clientID);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化以下行中编辑文本的变量。
amountEdt = findViewById(R.id.idEdtAmount);
// 正在初始化下面这行按钮的变量。
payBtn = findViewById(R.id.idBtnMakePayment);
// 为下面这行按钮添加点击监听器。
payBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 下面这行代码会验证姓名和年龄是否为空。
if (amountEdt.getText().toString().isEmpty()) {
// 如果姓名和年龄都为空,则在下面一行显示一条提示信息。
Toast.makeText(getApplicationContext(), "Please enter amout to be paid", Toast.LENGTH_SHORT).show();
} else {
makePayment(amountEdt.getText().toString());
}
}
});
}
private void makePayment(String amount) {
// 在下面这行创建PayPal付款。
PayPalPayment payment = new PayPalPayment(new BigDecimal(String.valueOf(amount)), "USD", "Course Fees",
PayPalPayment.PAYMENT_INTENT_SALE);
// 在以下代码行创建 PayPal 付款活动 Intent
Intent intent = new Intent(this, PaymentActivity.class);
// 将上面创建的 PayPal 配置添加到 Intent 中。
intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
// 在以下代码行将 PayPal 付款添加到 Intent 中。
intent.putExtra(PaymentActivity.EXTRA_PAYMENT, payment);
// 启动 Intent 活动以获取结果
// 请求代码将在 onActivityResult 方法中使用
startActivityForResult(intent, PAYPAL_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 如果结果是来自 PayPal 请求代码
if (requestCode == PAYPAL_REQUEST_CODE) {
// 如果结果正常,即用户没有取消付款。
if (resultCode == Activity.RESULT_OK) {
// 收到付款确认
PaymentConfirmation confirm = data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION);
// 如果确认不为空
if (confirm != null) {
try {
// 获取付款详情
String paymentDetails = confirm.toJSONObject().toString(4);
// 下面这行代码提取了 JSON 响应并将其显示在文本视图中。
JSONObject payObj = new JSONObject(paymentDetails);
String payID = payObj.getJSONObject("response").getString("id");
String state = payObj.getJSONObject("response").getString("state");
// 下方一行显示一条包含付款状态的提示信息
Toast.makeText(this, "Payment : " + state + "
with payment id is : " + payID, Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
// 处理下面这行的 JSON 异常
Log.e("Error", "an extremely unlikely failure occurred: ", e);
}
}
} else if (resultCode == Activity.RESULT_CANCELED) {
// 下面这行会显示一条提示信息,表明用户已取消付款。
Toast.makeText(this, "User cancelled the payment..", Toast.LENGTH_SHORT).show();
} else if (resultCode == PaymentActivity.RESULT_EXTRAS_INVALID) {
// 下面这行会显示无效支付配置的提示信息。
Toast.makeText(this, "Invalid payment config was submitted..", Toast.LENGTH_SHORT).show();
}
}
}
}
说明:在上面的代码中,首先我们创建了一个字符串变量来存储客户端 ID,我们需要将您的客户端 ID 添加到该变量中。然后,我们创建了一个用于按钮和文本编辑框的变量,最后创建了一个用于存储请求代码的变量,我们将使用该请求代码来检查 Intent。之后,我们创建了一个名为 config 的变量,用于生成 PayPal 付款配置,我们将使用该配置来执行 PayPal 付款。现在我们来看看 onCreate 方法。这是每个 Android 应用程序的默认方法。当应用程序视图创建时,会调用此方法。在此方法中,我们设置内容视图,即名为 activity_main.xml 的布局文件,以从该文件中设置 UI。在 onCreate 方法中,我们使用 activity_main.xml 文件中指定的 ID 初始化文本编辑框和按钮变量。
之后,我们为这两个按钮添加了点击事件监听器。在点击事件监听器中,我们首先检查金额文本编辑框是否为空。如果编辑文本为空,我们会显示一条 Toast 消息;在另一种情况下,我们会调用"付款"方法并将金额传递给该方法。
在"付款"方法中,我们创建了一个用于存储 PayPal 付款的变量。然后,我们调用 PayPal 付款 Activity Intent 来进行付款。最后,我们调用"开始"Activity 的"结果"方法来执行 PayPal 付款。
现在,我们创建了一个 Activity 的"结果"方法,用于检查用户付款的状态:已完成、已取消或失败。并根据状态向用户显示相应的 Toast 消息。
添加以上代码后,只需点击顶部栏中的绿色图标即可在移动设备上运行我们的应用程序。
注意:请确保您已连接到您的真实设备或模拟器,并添加您的客户端 ID。
输出
结论
在以上文章中,我们探讨了如何在安卓应用程序中集成PayPal以接收付款。

