将 Mpesa 和 Airtel Money 等移动货币与 Android 应用集成
Intergrating Mobile Money like Mpesa and AirtelMoney with Android App
在肯尼亚,现在传播到非洲和世界其他地方,我们有一种令人惊叹的方式,可以通过手机创造移动货币来发送和接收资金。两家领先的服务提供商 Safaricom 和 Airtel 分别拥有自己的移动货币平台,即 Mpesa 和 AirtelMoney。
由于 Google 商家服务在肯尼亚不可用,使用它们也会避开潜在消费者,我一直在考虑使用 Mpesa 和 AirtelMoney 向用户销售我的应用程序。现在,无论何时发生交易,移动货币服务都会向发送方和接收方发送确认短信。
现在我将如何在我的应用程序上使用此服务,因为我未能成功使用使用网络平台和其他技术的可用 API。并非我的所有用户每天都使用互联网,因为我的是一个供教会成员使用的应用程序。但可以肯定的是,他们确实每天都在使用移动货币。我将不胜感激为此付出的任何努力。
我希望我的应用程序能够在用户通过 Mpesa 向我付款时从试用版更改为高级版,因为与网络 API 相比,使用短信似乎更容易
我遇到了与您类似的问题,因此决定使用短信来实现 objective。首先,我使用了允许我这样做的权限:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver
android:name="com.example.myapp.IncomingMessage"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BROADCAST_SMS" >
<intent-filter android:priority="2147483647" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
并在我的 IncomingMessage activity 中添加了以下代码:
package com.example.myapp;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
@SuppressLint("ShowToast")
public class IncomingMessage extends BroadcastReceiver
{
final SmsManager sms = SmsManager.getDefault();
public void onReceive(Context paramContext, Intent paramIntent)
{
SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(paramContext.getApplicationContext()).edit();
if (!PreferenceManager.getDefaultSharedPreferences(paramContext.getApplicationContext()).getBoolean("js_vsb_is_paid", false))
{
Bundle localBundle = paramIntent.getExtras();
if (localBundle != null) {}
for (;;)
{
int i;
String sender;
String message;
try {
Object[] arrayOfObject = (Object[])localBundle.get("pdus");
i = 0;
if (i >= arrayOfObject.length) {
return;
}
SmsMessage localSmsMessage = SmsMessage.createFromPdu((byte[])arrayOfObject[i]);
sender = localSmsMessage.getDisplayOriginatingAddress();
message = localSmsMessage.getDisplayMessageBody();
Log.i("SmsReceiver", "senderNum: " + sender + "; message: " + message);
if (sender.equalsIgnoreCase("MPESA")) {
if (message.contains("JACKSON SIRO"))
{
editor.putBoolean("app_is_paid", true);
editor.commit();
//Toast.makeText(paramContext, "App Has been Activated!", Toast.LENGTH_LONG).show();
}
}
else if (sender.equalsIgnoreCase("AirtelMoney")) {
if (message.contains("JACKSON SIRO")) {
editor.putBoolean("app_is_paid", true);
editor.commit();
//Toast.makeText(paramContext, "App Has been Activated!", Toast.LENGTH_LONG).show();
}
}
} catch (Exception localException) {
Log.e("SmsReceiver", "Exception smsReceiver" + localException);
return;
}
}
}
}
希望对您有所帮助。代码很简单,也许你会根据自己的需要修改它
Safaricom 已发布 M-Pesa APIs 作为 RESTful APIs 可通过他们的 developer portal.
访问
Safaricom github repository, has a sample android application that uses "Lipa na M-Pesa Online" API。此 API 代表应用程序的用户发起 M-Pesa 交易,用户只需输入他们的 M-Pesa PIN 即可完成交易。
使用您选择的后端语言(Java、php、等等),解决 MPESA 集成的最佳方法是将 Mpesa 支付存储在数据库中 table然后从那里扩展您的业务逻辑。
您还可以 require/include 您的业务逻辑文件,一旦确认文件中有付款确认,并从那里执行您的业务逻辑。这适用于 C2B mpesa API。查看此 Mpesa C2B integration guide 了解更多信息。
另一方面,B2C mpesa 集成也最好在后端完成。只要业务逻辑脚本完成,就需要 B2C 支付请求文件。
阅读 Mpesa B2C integration guide 此处了解更多详情。
在肯尼亚,现在传播到非洲和世界其他地方,我们有一种令人惊叹的方式,可以通过手机创造移动货币来发送和接收资金。两家领先的服务提供商 Safaricom 和 Airtel 分别拥有自己的移动货币平台,即 Mpesa 和 AirtelMoney。
由于 Google 商家服务在肯尼亚不可用,使用它们也会避开潜在消费者,我一直在考虑使用 Mpesa 和 AirtelMoney 向用户销售我的应用程序。现在,无论何时发生交易,移动货币服务都会向发送方和接收方发送确认短信。
现在我将如何在我的应用程序上使用此服务,因为我未能成功使用使用网络平台和其他技术的可用 API。并非我的所有用户每天都使用互联网,因为我的是一个供教会成员使用的应用程序。但可以肯定的是,他们确实每天都在使用移动货币。我将不胜感激为此付出的任何努力。
我希望我的应用程序能够在用户通过 Mpesa 向我付款时从试用版更改为高级版,因为与网络 API 相比,使用短信似乎更容易
我遇到了与您类似的问题,因此决定使用短信来实现 objective。首先,我使用了允许我这样做的权限:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver
android:name="com.example.myapp.IncomingMessage"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BROADCAST_SMS" >
<intent-filter android:priority="2147483647" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
并在我的 IncomingMessage activity 中添加了以下代码:
package com.example.myapp;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
@SuppressLint("ShowToast")
public class IncomingMessage extends BroadcastReceiver
{
final SmsManager sms = SmsManager.getDefault();
public void onReceive(Context paramContext, Intent paramIntent)
{
SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(paramContext.getApplicationContext()).edit();
if (!PreferenceManager.getDefaultSharedPreferences(paramContext.getApplicationContext()).getBoolean("js_vsb_is_paid", false))
{
Bundle localBundle = paramIntent.getExtras();
if (localBundle != null) {}
for (;;)
{
int i;
String sender;
String message;
try {
Object[] arrayOfObject = (Object[])localBundle.get("pdus");
i = 0;
if (i >= arrayOfObject.length) {
return;
}
SmsMessage localSmsMessage = SmsMessage.createFromPdu((byte[])arrayOfObject[i]);
sender = localSmsMessage.getDisplayOriginatingAddress();
message = localSmsMessage.getDisplayMessageBody();
Log.i("SmsReceiver", "senderNum: " + sender + "; message: " + message);
if (sender.equalsIgnoreCase("MPESA")) {
if (message.contains("JACKSON SIRO"))
{
editor.putBoolean("app_is_paid", true);
editor.commit();
//Toast.makeText(paramContext, "App Has been Activated!", Toast.LENGTH_LONG).show();
}
}
else if (sender.equalsIgnoreCase("AirtelMoney")) {
if (message.contains("JACKSON SIRO")) {
editor.putBoolean("app_is_paid", true);
editor.commit();
//Toast.makeText(paramContext, "App Has been Activated!", Toast.LENGTH_LONG).show();
}
}
} catch (Exception localException) {
Log.e("SmsReceiver", "Exception smsReceiver" + localException);
return;
}
}
}
}
希望对您有所帮助。代码很简单,也许你会根据自己的需要修改它
Safaricom 已发布 M-Pesa APIs 作为 RESTful APIs 可通过他们的 developer portal.
访问Safaricom github repository, has a sample android application that uses "Lipa na M-Pesa Online" API。此 API 代表应用程序的用户发起 M-Pesa 交易,用户只需输入他们的 M-Pesa PIN 即可完成交易。
使用您选择的后端语言(Java、php、等等),解决 MPESA 集成的最佳方法是将 Mpesa 支付存储在数据库中 table然后从那里扩展您的业务逻辑。
您还可以 require/include 您的业务逻辑文件,一旦确认文件中有付款确认,并从那里执行您的业务逻辑。这适用于 C2B mpesa API。查看此 Mpesa C2B integration guide 了解更多信息。
另一方面,B2C mpesa 集成也最好在后端完成。只要业务逻辑脚本完成,就需要 B2C 支付请求文件。
阅读 Mpesa B2C integration guide 此处了解更多详情。