2016-11-04 1 views
0

В Кении и теперь, распространяясь в Африку и весь остальной мир, мы имеем удивительный способ отправки и получения денег через мобильные телефоны с мобильными деньгами. У двух ведущих поставщиков услуг Safaricom и Airtel есть свои мобильные денежные платформы, а именно Mpesa и AirtelMoney соответственно.Интеграция мобильных денег, таких как Mpesa и AirtelMoney с Android-приложением

Поскольку услуги Google Merchant недоступны в Кении, а также использование их будет уклоняться от потенциальных потребителей, я подумывал использовать как Mpesa, так и AirtelMoney для продажи своего приложения пользователям. Теперь обе службы Mobile Money отправляют текстовые сообщения подтверждения отправителю и получателям всякий раз, когда происходит транзакция.

Теперь, как я буду использовать эти службы в своем приложении, так как я безуспешно использовал доступный apis, который использует веб-платформу среди других технологий. Не все мои пользователи ежедневно пользуются Интернетом, так как мое приложение используется членами церкви. Но наверняка они ежедневно используют мобильные деньги. Буду признателен за любые усилия в этом направлении.

Я хочу, чтобы мое приложение, чтобы иметь возможность перейти от пробной премии, когда пользователь платит мне через Mpesa, потому что это своего рода появляется работа с смс проще по сравнению с Web APIs

ответ

2

У меня была аналогичная проблема с вами и решил использовать sms для достижения этой цели. Прежде всего, я использовал разрешения за предоставленную мне возможность сделать это:

<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 деятельности я добавил следующий код:

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; 
       } 

    } 
    } 
    } 

Я надеюсь, что это помогает. Код прост как можно скорее, вы можете изменить его в соответствии с вашими потребностями.

+0

Почему бы кто-то отказаться от моего ответа –

+0

, что совсем не хорошо –

0

Safaricom выпустил API-интерфейсы M-Pesa как API RESTful, доступные через их developer portal.

Safaricom github repository, имеет образец android application, который использует API "Lipa na M-Pesa Online". Этот API инициирует транзакцию M-Pesa от имени пользователя приложения, пользователю нужно только ввести свой PIN-код M-Pesa для завершения транзакции.

Смежные вопросы