如何在 Android 應用中整合 PayPal?


介紹

在任何 Android 應用程式中,我們都可以看到不同的支付閘道器用於從應用程式使用者那裡收取費用,以提供特定的服務,例如 Paytm、Razorpay、Paypal 等。在本文中,我們將瞭解如何在 Android 應用程式中整合 PayPal。

實施

我們將建立一個簡單的應用程式,其中我們將建立一個 TextView 用於顯示應用程式的標題。之後,我們將建立一個 EditText 用於輸入使用者需要支付的金額,以及一個用於進行支付的按鈕。

步驟 1:建立用於使用 PayPal SDK 的客戶端 ID

導航到 URL 並使用您的 PayPal ID 和密碼登入。在其中,您將看到一個建立應用程式的選項。只需單擊該選項即可在此處建立新的應用程式,並在其中指定應用程式名稱和其他所需詳細資訊。填寫所有必需資料後,將建立一個新應用程式,您將看到一個螢幕,其中您可以看到我們建立的應用程式的客戶端 ID。我們將在專案中使用該客戶端 ID,因此請確保將其複製。

步驟 2:在 Android Studio 中建立一個新專案

導航到 Android Studio,如下面的螢幕所示。在下面的螢幕中,單擊“新建專案”以建立一個新的 Android Studio 專案。

單擊“新建專案”後,您將看到下面的螢幕。

在此螢幕中,我們只需選擇“空活動”並單擊“下一步”。單擊“下一步”後,您將看到下面的螢幕。

在此螢幕中,我們只需指定專案名稱。然後,包名稱將自動生成。

注意 - 請確保將語言選擇為 Java。

指定所有詳細資訊後,單擊“完成”以建立一個新的 Android Studio 專案。

建立專案後,我們將看到兩個開啟的檔案,即 activity_main.xml 和 MainActivity.java 檔案。

步驟 3:在 build.gradle 檔案中新增 paypal sdk 依賴項

導航到 Gradle 指令碼 > build.gradle 檔案(app)級別,並在依賴項部分新增以下依賴項。

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>

說明:在上面的程式碼中,我們正在建立一個根佈局作為相對佈局。在此佈局內,我們正在建立一個 TextView 用於顯示應用程式的標題。之後,我們正在建立一個 EditText 用於輸入使用者需要支付的金額。然後建立一個用於進行支付的按鈕。

步驟 5:在 AndroidManifest.xml 檔案中新增許可權

導航到 app > AndroidManifest.xml 檔案,並在清單標記中新增以下許可權以訪問網際網路。

<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 {
   // on below line creating a variable for client id of pay pal.
   private static final String clientID = "Paste your client id here";
   // creating variables for edit text on below line.
   private EditText amountEdt;
   // creating variable for button on below line.
   private Button payBtn;
   // on below line creating a variable to store request code for paypal sdk
   public static final int PAYPAL_REQUEST_CODE = 123;
   // on below line creating a Paypal Configuration Object
   private static PayPalConfiguration config = new PayPalConfiguration()
           // Start with mock environment.  When ready,
           // switch to sandbox (ENVIRONMENT_SANDBOX)
           // or live (ENVIRONMENT_PRODUCTION)
           .environment(PayPalConfiguration.ENVIRONMENT_SANDBOX)
           // on below line we are passing a client id.
           .clientId(clientID);
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       // initializing variables for edit text on below line.
       amountEdt = findViewById(R.id.idEdtAmount);
       // initializing variables for button on below line.
       payBtn = findViewById(R.id.idBtnMakePayment);
       // adding click listener for button on below line.
       payBtn.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               // on below line validating if name and age is empty or not.
               if (amountEdt.getText().toString().isEmpty()) {
                   // if both name and age is empty we are displaying a toast message on below line.
                   Toast.makeText(getApplicationContext(), "Please enter amout to be paid", Toast.LENGTH_SHORT).show();
               } else {
                   makePayment(amountEdt.getText().toString());
               }
           }
       });
   }
   private void makePayment(String amount) {
       // Creating a paypal payment on below line.
       PayPalPayment payment = new PayPalPayment(new BigDecimal(String.valueOf(amount)), "USD", "Course Fees",
               PayPalPayment.PAYMENT_INTENT_SALE);
       // Creating Paypal Payment activity intent on below line
       Intent intent = new Intent(this, PaymentActivity.class);
       //putting the paypal configuration to the intent from the configuration we have created above.
       intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
       // Putting paypal payment to the intent on below line.
       intent.putExtra(PaymentActivity.EXTRA_PAYMENT, payment);
       // Starting the intent activity for result
       // the request code will be used on the method onActivityResult
       startActivityForResult(intent, PAYPAL_REQUEST_CODE);
   }
   @Override
   protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
       // If the result is from paypal request code
       if (requestCode == PAYPAL_REQUEST_CODE) {
           // If the result is OK i.e. user has not canceled the payment
           if (resultCode == Activity.RESULT_OK) {
               // Getting the payment confirmation
               PaymentConfirmation confirm = data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION);
               // if confirmation is not null
               if (confirm != null) {
                   try {
                       // Getting the payment details
                       String paymentDetails = confirm.toJSONObject().toString(4);
                       // on below line we are extracting json response and displaying it in a text view.
                       JSONObject payObj = new JSONObject(paymentDetails);
                       String payID = payObj.getJSONObject("response").getString("id");
                       String state = payObj.getJSONObject("response").getString("state");
                       // on below line displaying a toast message with the payment status
                       Toast.makeText(this, "Payment : " + state + "
with payment id is : " + payID, Toast.LENGTH_SHORT).show(); } catch (JSONException e) { // handling json exception on below line Log.e("Error", "an extremely unlikely failure occurred: ", e); } } } else if (resultCode == Activity.RESULT_CANCELED) { // on below line we are displaying a toast message as user cancelled the payment. Toast.makeText(this, "User cancelled the payment..", Toast.LENGTH_SHORT).show(); } else if (resultCode == PaymentActivity.RESULT_EXTRAS_INVALID) { // on below line displaying toast message for invalid payment config. Toast.makeText(this, "Invalid payment config was submitted..", Toast.LENGTH_SHORT).show(); } } } }

說明:在上面的程式碼中,首先我們為我們的客戶端 ID 建立一個字串變數,我們必須在其中新增您的客戶端 ID,然後我們為我們的按鈕和 EditText 建立一個變數,最後為請求程式碼建立一個變數,我們將使用它來檢查意圖。之後,我們建立一個名為 config 的變數,該變數用於生成我們將用於使用 PayPal 進行支付的 PayPal 支付配置。現在我們將看到 onCreate 方法。這是每個 Android 應用程式的預設方法。此方法在建立應用程式檢視時呼叫。在此方法中,我們設定內容檢視,即名為 activity_main.xml 的佈局檔案,以從該檔案中設定 UI。在 onCreate 方法中,我們使用我們在 activity_main.xml 檔案中給出的 ID 初始化 EditText 和按鈕變數。

之後,我們為兩個按鈕添加了一個點選監聽器。在點選監聽器中,我們首先檢查金額的 EditText 欄位是否為空。如果 EditText 為空,我們將顯示一條吐司訊息,在另一個條件下,我們呼叫 make payment 方法並在該方法中傳遞我們的金額。

在 make payment 方法中,我們為 PayPal 支付建立一個變數。然後,我們呼叫 PayPal 支付活動意圖以進行支付。我們呼叫 start activity for result 方法以進行 PayPal 支付。

現在,我們建立了一個活動結果方法,在其中我們檢查使用者進行的支付狀態,無論是已支付、已取消還是已失敗。相應地,我們還會向用戶顯示吐司訊息。

新增上述程式碼後,現在我們只需單擊頂部的綠色圖示即可在移動裝置上執行我們的應用程式。

注意 - 請確保您已連線到您的真實裝置或模擬器並新增您的客戶端 ID。

輸出

結論

在本文中,我們瞭解瞭如何在 Android 應用程式中整合 PayPal 以接收付款。

更新於: 2023 年 5 月 8 日

2K+ 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.