Getting Started
To be able to make any transaction via open api portal, it is required to have an API key that exchanged for a session key. A valid session key is needed for every transaction.
API key is created whenever app is created.
The platform also provides public key for sandbox and open api. Sandbox is used for testing, when it is ready to make live open api is used.
The procedure are the same for testing and live though different public key are used for each environment. Since this focus more on testing for now, the public key to be used is sandbox public key.
public_key = 'MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArv9yxA69XQKBo24BaF/D+fvlqmGdYjqLQ5WtNBb5tquqGvAvG3WMFETVUSow/LizQalxj2ElMVrUmzu5mGGkxK08bWEXF7a1DEvtVJs6nppIlFJc2SnrU14AOrIrB28ogm58JjAl5BOQawOXD5dfSk7MaAA82pVHoIqEu0FxA8BOKU+RGTihRU+ptw1j4bsAJYiPbSX6i71gfPvwHPYamM0bfI4CmlsUUR3KvCG24rB6FNPcRBhM3jDuv8ae2kC33w9hEq8qNB55uw51vK7hyXoAa+U7IqP1y6nBdlN25gkxEA8yrsl1678cspeXr+3ciRyqoRgj9RD/ONbJhhxFvt1cLBh+qwK2eqISfBb06eRnNeC71oBokDm3zyCnkOtMDGl7IvnMfZfEPFCfg5QgJVk1msPpRvQxmEsrX9MQRyFVzgy2CWNIb7c+jPapyrNwoUbANlN8adU1m6yOuoX7F49x+OjiG2se0EJ6nafeKUXw/+hiJZvELUYgzKUtMAZVTNZfT8jjb58j8GVtuS+6TM2AutbejaCV84ZK58E2CRJqhmjQibEUO6KPdD7oTlEkFy52Y1uOOBXgYpqMzufNPmfdqqqSM4dU70PO8ogyKGiLAIxCetMjjm6FCMEA3Kc8K0Ig7/XtFm9By6VxTJK1Mg36TlHaZKP6VzVLXMtesJECAwEAAQ=='
Examples
Customer to business transaction
from pyepsa.vodacom import MPESA
m_pesa = MPESA(api_key=<api-key>, public_key=<platform-public-key>)
parameters = {
'input_Amount': 10,
'input_Country': 'TZN',
'input_Currency': 'TZS',
'input_CustomerMSISDN': '000000000001',
'input_ServiceProviderCode': '000000',
'input_ThirdPartyConversationID': 'asv02e5958774f7ba228d83d0d689761',
'input_TransactionReference': 'T1234C',
'input_PurchasedItemsDesc': 'Shoes',
}
results = m_pesa.customer2business(parameters)
Business to customer transaction
from pypesa.vodacom import MPESA
m_pesa = MPESA(api_key=<api-key>, public_key=<platform-public-key>)
parameters = {
'input_Amount': 10,
'input_Country': 'TZN',
'input_Currency': 'TZS',
'input_CustomerMSISDN': '000000000001',
'input_ServiceProviderCode': '000000',
'input_ThirdPartyConversationID': 'asv02e5958774f7ba228d83d0d689761',
'input_TransactionReference': 'T1234C',
'input_PurchasedItemsDesc': 'Shoes',
}
results = m_pesa.business2customer(parameters)
Business to business transaction
from pypesa.vodacom import MPESA
m_pesa = MPESA(api_key=<api-key>, public_key=<platform-public-key>)
parameters = {
'input_Amount': 10,
'input_Country': 'TZN',
'input_Currency': 'TZS',
'input_CustomerMSISDN': '000000000001',
'input_ServiceProviderCode': '000000',
'input_ThirdPartyConversationID': 'asv02e5958774f7ba228d83d0d689761',
'input_TransactionReference': 'T1234C',
'input_PurchasedItemsDesc': 'Shoes',
}
results = m_pesa.business2business(parameters)
Reversal transaction
from pypesa.vodacom import MPESA
m_pesa = MPESA(api_key=<api-key>, public_key=<platform-public-key>)
reversal_parameters = {
'input_ReversalAmount': '25',
'input_Country': 'TZN',
'input_ServiceProviderCode': '000000',
'input_ThirdPartyConversationID': 'asv02e5958774f7ba228d83d0d689761',
'input_TransactionID': '0000000000001',
}
results = m_pesa.reversal(reversal_parameters)
Query transaction status
from pypesa.vodacom import MPESA
m_pesa = MPESA(api_key=<api-key>, public_key=<platform-public-key>)
parameters = {
'input_QueryReference': '000000000000000000001',
'input_ServiceProviderCode': '000000',
'input_ThirdPartyConversationID':'asv02e5958774f7ba228d83d0d689761',
'input_Country': 'TZN',
}
results = m_pesa.status(parameters)
Sample Responses
Successful Transaction
[{
'status_code': 201,
'headers': {'date': 'Sun, 06 Dec 2020 05:11:43 GMT',
'x-frame-options': 'SAMEORIGIN', 'x-robots-tag': 'none',
'x-content-type-options': 'nosniff',
'x-xss-protection': '1; mode=block',
'strict-transport-security': 'max-age=16005600; includeSubDomains',
'content-type': 'application/json',
'access-control-allow-origin': '*',
'content-length': '252', 'Vary': 'Accept-Encoding'},
'body': {'output_ResponseCode': 'INS-0',
'output_ResponseDesc': 'Request processed successfully',
'output_TransactionID': 'G27DEn1DLoQ3',
'output_ConversationID': '08536a5d65ea4f50866db06f577cc5c1',
'output_ThirdPartyConversationID': 'asv02e5958774f7ba228d83d0d689761'}
}]
Duplicate Transaction
[{
'status_code': 409,
'headers': {'date': 'Sun, 06 Dec 2020 05:12:04 GMT',
'x-frame-options': 'SAMEORIGIN', 'x-robots-tag': 'none', 'x-content-type-options': 'nosniff',
'x-xss-protection': '1; mode=block', 'strict-transport-security': 'max-age=16005600; includeSubDomains',
'content-type': 'application/json',
'access-control-allow-origin': '*', 'content-length': '235', 'Vary': 'Accept-Encoding'},
'body': {'output_ResponseCode': 'INS-10',
'output_ResponseDesc': 'Duplicate Transaction',
'output_TransactionID': 'N/A',
'output_ConversationID': '47bbaba476494860a2c9be30678f4c1c',
'output_ThirdPartyConversationID': 'asv02e5958774f7ba228d83d0d689761'}
}]