Reseller-initiated Customer Payment

This is one of the 2 ways a reseller can receive cash from their customers. In the Mobile Money space, this is achieved through USSD push or STK push. The customer receives a prompt to enter their mobile money account PIN.

This acts as consent and completes the transaction by transfering e-value from the customer's wallet to a business short code (Paybill) or to a merchant short code (Till). The Tanda I/O RESTful API supports this channel natively.

For easier reconciliations, Tanda handles the Mobile Money accountReference in a special way. The accountReference is built from the reseller's wallet A/c number and the customer's phone number using the format {resellerWallerAccout}{accountNumber}. The calling code is stripped from the accountNumber prior.

Expected command ID

  • CustomerPayment

Expected Service Provider ID(s)

  • MPESA

Expected request parameters

  • amount (Transaction Amount)
  • accountNumber (Customer's mobile number)
  • merchantWallet (Merchant Collection Wallet Number issued by Tanda. This parameter is Optional)

Expected result parameters

  • transactionRef (Reference number generated by the MMO)

Customer-initiated Customer Payment

There is going to be a time when Reseller-initiated Customer Payment won't be suitable due to technical or business reasons. In that case, the customer will need:

  • Business number (Shared by Tanda)
  • Account Number {resellerWallerAccount}{customer's mobile number without calling code} e.g. if resellerWallerAccount = 123456, customer's mobile number = 07XXXXXXXX, then the Account number will be: 1234567XXXXXXXX

IPN

Configure your preferred callback URL and Basic Auth username and password from the Tanda Reseller Portal. All Customer-initiated customer payments will be POSTed to that callback URL.

πŸ“˜

Secure your callback URL using Basic Auth. The username and password are configured from the Tanda Reseller Portal

The configured callback URL MUST:

  • Accept POST HTTP requests
  • Accept application/json Content-Type
  • Be publicly accessible

The IPN request body should have the following JSON format:

{
  "wallet": {
    "id": {collectionsWalletId},
    "account": {collectionsWalletAccountNumber},
    "actual": {collectionsWalletActualBalance},
    "available": {collectionsWalleAvailableBalance},
    "currency": "KES"
  },
  "customer": {
    "account": {customerMobileNumber},
    "name": {customerFullName}
  },
  "transaction": {
    "id": {transactionId},
    "amount": {amount},
    "currency": "KES",
    "channel": {collectionChannel},
    "type": {D/W},
    "reference": {reference},
    "timestamp": "yyyy-MM-dd'T'HH:mm:ssZ"
  }
}
Language
Authentication
OAuth2
Click Try It! to start a request and see the response here!