Exemple #1
0
def send_b2c_request(amount, phone_number, transaction_id, occassion=''):
    """
    seds a b2c request
    :param amount:
    :param phone_numer:
    :return:
    """
    url = settings.B2C_URL
    headers = {
        "Content-Type": 'application/json',
        'Authorization': 'Bearer {}'.format(AuthToken.objects.get_token())
    }
    request = dict(InitiatorName=settings.B2C_INITIATOR_NAME,
                   SecurityCredential=settings.B2C_SECURITY_TOKEN,
                   CommandID=settings.B2C_COMMAND_ID,
                   Amount=str(amount),
                   PartyA=settings.B2C_SHORTCODE,
                   PartyB=str(phone_number),
                   Remarks="record-{}".format(str(transaction_id)),
                   QueueTimeOutURL=settings.B2C_QUEUE_TIMEOUT_URL,
                   ResultURL=settings.B2C_RESULT_URL,
                   Occassion=occassion)

    response = post(url=url, headers=headers, data=json.dumps(request))
    return response.json()
Exemple #2
0
def send_b2c_request(amount, phone_number, transaction_id, occassion=""):
    """
    seds a b2c request
    :param amount:
    :param phone_numer:
    :return:
    """
    url = f"{settings.MPESA_URL}/mpesa/b2c/v1/paymentrequest"
    headers = {
        "Authorization": "Bearer {}".format(AuthToken.objects.get_token("b2c"))
    }
    request = dict(
        InitiatorName=settings.B2C_INITIATOR_NAME,
        SecurityCredential=settings.B2C_SECURITY_TOKEN,
        CommandID=settings.B2C_COMMAND_ID,
        Amount=str(amount),
        PartyA=settings.B2C_SHORTCODE,
        PartyB=str(phone_number),
        Remarks="record-{}".format(str(transaction_id)),
        QueueTimeOutURL=settings.B2C_QUEUE_TIMEOUT_URL,
        ResultURL=settings.B2C_RESULT_URL,
        Occassion=occassion,
    )

    response = post(url=url, headers=headers, data=request)
    return response.json()
Exemple #3
0
def process_online_checkout(msisdn, amount, account_reference='', transaction_desc=''):
    """
    Handle the online checkout
    :param msisdn:
    :param amount:
    :param account_reference:
    :param transaction_desc:
    :return:
    """
    url = settings.C2B_ONLINE_CHECKOUT_URL
    headers = {"Content-Type": 'application/json',
               'Authorization': 'Bearer {}'.format(AuthToken.objects.get_token())}
    timestamp = str(datetime.now())[:-7].replace('-', '').replace(' ', '').replace(':', '')
    password = base64.b64encode(bytes('{}{}{}'.format(settings.C2B_ONLINE_SHORT_CODE, settings.C2B_ONLINE_PASSKEY,
                                                      timestamp), 'utf-8')).decode('utf-8')
    body = dict(
        BusinessShortCode=settings.C2B_ONLINE_SHORT_CODE,
        Password=password,
        Timestamp=timestamp,
        TransactionType=settings.C2B_TRANSACTION_TYPE,
        Amount=str(amount),
        PartyA=str(msisdn),
        PartyB=settings.C2B_ONLINE_SHORT_CODE,
        PhoneNumber=str(msisdn),
        CallBackURL=settings.C2B_ONLINE_CHECKOUT_CALLBACK_URL,
        AccountReference='ref-'.format(account_reference),
        TransactionDesc='desc-'.format(transaction_desc)
    )
    response = post(url=url, headers=headers, data=json.dumps(body))
    return response.json()
Exemple #4
0
def process_online_checkout(
    msisdn: int,
    amount: int,
    account_reference: str,
    transaction_desc: str,
    is_paybil=True,
):
    """
    Handle the online checkout
    :param msisdn:
    :param amount:
    :param account_reference:
    :param transaction_desc:
    :param is_paybil: If set to False it means we are make a till transaction
    :return:
    """
    transaction_type = "CustomerPayBillOnline"
    if not is_paybil:
        transaction_type = "CustomerBuyGoodsOnline"

    url = f"{settings.MPESA_URL}/mpesa/stkpush/v1/processrequest"
    headers = {
        "Authorization": "Bearer {}".format(AuthToken.objects.get_token("c2b"))
    }
    timestamp = (str(datetime.now())[:-7].replace("-",
                                                  "").replace(" ", "").replace(
                                                      ":", ""))
    password = base64.b64encode(
        bytes(
            "{}{}{}".format(
                settings.C2B_ONLINE_SHORT_CODE,
                settings.C2B_ONLINE_PASSKEY,
                timestamp,
            ),
            "utf-8",
        )).decode("utf-8")
    body = dict(
        BusinessShortCode=settings.C2B_ONLINE_SHORT_CODE,
        Password=password,
        Timestamp=timestamp,
        TransactionType=transaction_type,
        Amount=str(amount),
        PartyA=str(msisdn),
        PartyB=settings.C2B_ONLINE_PARTY_B,
        PhoneNumber=str(msisdn),
        CallBackURL=settings.C2B_ONLINE_CHECKOUT_CALLBACK_URL,
        AccountReference=account_reference,
        TransactionDesc=transaction_desc,
    )
    response = post(url=url, headers=headers, data=body)
    return response.json()
Exemple #5
0
def register_c2b_url():
    """
    Register the c2b_url
    :return:
    """
    url = settings.C2B_REGISTER_URL
    headers = {
        "Content-Type": 'application/json',
        'Authorization': 'Bearer {}'.format(AuthToken.objects.get_token('c2b'))
    }
    body = dict(ShortCode=settings.C2B_SHORT_CODE,
                ResponseType=settings.C2B_RESPONSE_TYPE,
                ConfirmationURL=settings.C2B_CONFIRMATION_URL,
                ValidationURL=settings.C2B_VALIDATE_URL)
    response = post(url=url, headers=headers, data=json.dumps(body))
    return response.json()
Exemple #6
0
def register_c2b_url():
    """
    Register the c2b_url
    :return:
    """
    url = f"{settings.MPESA_URL}/mpesa/c2b/v1/registerurl"
    headers = {
        "Authorization": "Bearer {}".format(AuthToken.objects.get_token("c2b"))
    }
    body = dict(
        ShortCode=settings.C2B_SHORT_CODE,
        ResponseType=settings.C2B_RESPONSE_TYPE,
        ConfirmationURL=settings.C2B_CONFIRMATION_URL,
        ValidationURL=settings.C2B_VALIDATE_URL,
    )
    response = post(url=url, headers=headers, data=body)
    return response.json()