如何在安卓系统中整合Hover SDK进行离线M-Pesa支付

273 阅读6分钟

在安卓系统中整合Hover SDK进行离线M-Pesa支付

在Android应用程序中整合支付模块是很有趣的,但对初学者来说,这可能是一个挑战。电子支付是电子商务应用货币化的一个关键功能。在现代社会中,M-Pesa交易可以在线和离线进行。

在你的应用程序中纳入支付功能时,有不同的支付网关可供选择。

例如,你可以使用Safaricom Daraja API,iPay,Pesapal,和PayPal。然而,这些网关缺乏一个东西;离线支持。

大多数人拥有智能手机,但并不总是连接到互联网。他们可能需要在离线时进行交易,如汇款。这就是Hover SDK 的用处。

什么是Hover SDK?

Hover是一个安卓SDK,允许将货币功能整合到移动应用程序中。

这个SDK不需要互联网连接,相反,它可以在安卓应用中自动进行USSD

该SDK可以在全球任何移动网络上运行USSD会话。这包括USSD互动,如移动货币支付、购买通话时间、支付账单、购买互联网捆绑服务、访问银行服务等。

前提条件

要继续学习,你应该具备以下条件

  • 在你的机器上安装了[Android Studio]。
  • 具有创建和运行Android应用程序的良好知识。
  • [Kotlin]编程语言和视图绑定的基本知识。
  • 一个Hover账户。

目标

在本教程中,我们将。

  • 了解Hover SDK如何工作。
  • 创建一个Hover应用程序。
  • 了解动作,包括如何创建和定制它们。
  • 将Hover SDK集成到Android应用中。

Hover SDK是如何工作的?

通常情况下,USSD会话涉及拨打一个给定的根代码,然后按照编号指示访问所提供的服务。

这个过程有时是令人厌烦的,因为用户可能会犯错或USSD会话可能会超时。

在我们的案例中,我们需要用Hover SDK在安卓系统中实现M-Pesa Send Money 服务的自动化。

以下是你在使用USSD会话时向一个人汇款的步骤。

  1. 拨打*334#
  2. 1 ,选择Send money
  3. 再一次,按1 ,选择Send money
  4. 输入收件人的phone number
  5. 输入你想发送的amount
  6. 输入你的M-Pesa PIN
  7. 最后,按1accept 并完成交易。

有了Hover SDK,用户不需要通过所有这些步骤来进行交易。USSD会话是自动化的。

什么是行动?

术语action ,指的是使用USSD代码时的路径。Hover使用创建的行动来导航到设备的USSD菜单。

登录到您的Hover账户,点击仪表板上的+ New Action ,创建一个动作。

Creating Action

行动包括。

  • 一个名称 - 在本教程中我们将使用Send Money
  • 一个描述,这是可选的。
  • 运行该服务的移动网络供应商/SIM卡 - 本教程中我们将使用Safaricom
  • 行动类型--我们将使用USSD 类型。
  • 根代码 - 用于启动会话的短代码。

创建动作后,你需要添加steps 。USSD会话中的每个屏幕都由一个步骤表示。

下面是你可以按照不同种类的步骤从USSD会话中发送钱的例子。

  • 数字 - 预定义的选项,如输入1。
  • 变量 - 随着程序的运行而改变的条目,如要发送的金额。Hover SDK将在运行时输入它们。
  • PIN提示 - 向用户显示PIN输入界面。

下面是你如何将这些步骤放在Hover仪表板中。

  • 一个Number 类型的步骤,选择 "1 "来发送金钱。
  • 同样,一个Number 类型的步骤来选择 "1 "发送金钱。
  • 一个Variable 的步骤,选择收件人的电话号码。
  • 一个Variable ,选择要转移的金额。
  • 增加插入用户的PIN码步骤--当行动在设备上执行时,用户被要求输入他们的PIN码。
  • 最后,提供一个Number 步骤,让你选择 "1 "来完成交易。

Add steps to Action

对于我们所包含的两个变量,我们将使用变量名称phoneNumberamount ,在运行时为这些步骤提供数值。

一旦你保存了这个动作,你就可以进入下一个步骤。在你的仪表板上,你会看到与此类似的东西。

Created Action

在Hover仪表板中创建一个Hover应用程序

你的安卓应用由一个在Hover服务器上运行的Hover应用来代表。一个独特的API令牌被分配给在Hover仪表板上建立的每个应用程序。

要创建一个Hover应用,请进入你的账户仪表板,选择+ New App

  • 输入你的应用程序的名称 - 这将只作为一个参考。
  • 输入你的应用程序包的名称 - 它必须与你的应用程序级build.gradle 文件中的applicationId 相同。
  • 你可以指定一个Webhook URL,Hover将向其发送USSD会话信息的JSON表示。

Creating Hover App

在Android中实现Hover

利用Hover SDK,我们将创建一个简单的Android应用程序,执行M-Pesa汇款交易。

第1步 - 创建我们的安卓应用程序

在这一步,创建一个空的Android Studio项目,如下图所示。

Android Studio project

第2步 - 设置项目

在你的项目级build.gradle 文件中,添加Hover maven资源库。

allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url "http://maven.usehover.com/releases" }
    }
}

在你的应用级build.gradle 文件中,添加Hover依赖项。

implementation 'com.hover:android-sdk:1.7.2'

在你的AndroidManifest.xml 文件中,包括你的API令牌。

<application
    ...
    <meta-data
        android:name="com.hover.ApiKey"
        android:value="Your_Token"/>
</application>

当仍在清单文件中时,别忘了包括以下权限。

<manifest
    ...
    <uses-sdk tools:overrideLibrary="com.hover.sdk" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
</manifest>

第3步 - 设计用户界面

在这一步,我们将设计一个简单的XML 布局,提示用户输入收件人的电话号码和交易的金额。

最后,该布局将有一个按钮来启动交易过程。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:text="Hover SDK M-PESA Send Money"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editTextPhoneNumber"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="16dp"
        android:layout_marginTop="16dp"
        android:hint="Phone e.g. 07123456"
        android:inputType="phone"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

    <EditText
        android:id="@+id/editTextAmount"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:hint="Amount"
        android:inputType="number"
        app:layout_constraintEnd_toEndOf="@+id/editTextPhoneNumber"
        app:layout_constraintStart_toStartOf="@+id/editTextPhoneNumber"
        app:layout_constraintTop_toBottomOf="@+id/editTextPhoneNumber" />

    <Button
        android:id="@+id/buttonSend"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:text="Send"
        app:layout_constraintEnd_toEndOf="@+id/editTextAmount"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="@+id/editTextAmount"
        app:layout_constraintTop_toBottomOf="@+id/editTextAmount"/>    
</androidx.constraintlayout.widget.ConstraintLayout>

第4步 - 在MainActivity中初始化Hover

onCreate 方法中,调用Hover.initialize(this) ,下载我们创建的动作,并在应用程序中初始化Hover SDK。

第5步 - 运行USSD会话

在这一步,一旦用户点击发送按钮,USSD动作就会启动。

binding.buttonSend.setOnClickListener {
            try {
                val intent = HoverParameters.Builder(this)
                    .request("ActionID")
                    .extra("phoneNumber", binding.editTextPhoneNumber.text.toString().trim())
                    .extra("amount", binding.editTextAmount.text.toString().trim())
                    .buildIntent()

                startActivityForResult(intent, 0)
            } catch (e: Exception) {
                Toast.makeText(this@MainActivity, "Hover Error", Toast.LENGTH_SHORT).show()
            }
        }

在上面的代码中,我们已经创建了一个类型为HoverParameters 的意图,并将以下方法串联起来。

  • .request("ActionID") 并传递你在hover dashboard中生成的ActionID。
  • .extra("phoneNumber", PHONE_NUMBER) 和 - 这些是我们在创建Action时声明的运行时变量。.extra("amount", AMOUNT)
  • 最后,我们添加了buildIntent() 方法来创建一个HoverParamater 意向。

创建意图后,调用startActivityForResult(intent, 0) 来启动它。

注意:记得把你的代码包在一个try...catch 块内,以处理任何异常。

第6步--监听USSD会话的信息

我们在MainActivity中覆盖了onActivityResult() ,以获得经过处理的USSD会话的结果。

RESULT_OK 表示一个请求被接受,并且正在被USSD运营商处理,而 表示出了问题。RESULT_CANCELED

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        try {
            if (requestCode == 0 && resultCode == RESULT_OK) {

                Toast.makeText(this, "You will receive an M-Pesa confirmation message shortly",
                    Toast.LENGTH_SHORT).show()
            } else if (requestCode == 0 && resultCode == RESULT_CANCELED) {

                Toast.makeText(this, data?.getStringExtra("error"), Toast.LENGTH_SHORT).show()
                Log.d(TAG, "onActivityResult: ${data?.getStringExtra("error")}")
            }
        } catch (e: Exception) {
            Log.d(TAG, "onActivityResult: ${e.localizedMessage}")
        }
    }

你可以通过以下方式获得会话的universally unique identifier (UUID)。

val uuid = data?.getStringExtra("uuid");

结论

Hover SDK可以被集成到需要支付模块的大型项目中。

在本教程中,我们已经学会了如何在Hover仪表板上勾勒动作、添加步骤以及创建悬停应用程序。我们还将Hover SDK整合到了一个Android应用程序中。