예제 #1
0
def save_transaction(transaction: Transaction, transaction_resp):
    """
    Save the transaction response as a Transaction object to the db
    :param transaction: Transaction model object
    :param transaction_resp: Transaction respsonse from africastalking API
    """

    if type(transaction_resp) == dict and transaction_resp['status']:

        if transaction_resp['description']:
            transaction.description = transaction_resp['description']

        if transaction_resp['transactionId']:
            transaction.transaction_id = transaction_resp['transactionId']

        if transaction_resp['providerChannel']:
            transaction.provider_channel = transaction_resp['providerChannel']

        if transaction_resp['status'] == 'InvalidRequest':
            transaction.save()
            transaction_failed(
                transaction=transaction,
                error_message=
                'InvalidRequest: The request could not be accepted as one of the fields '
                'was invalid. The description field will contain more information.'
            )
            raise Exception('Transaction Failed: InvalidRequest')

        # Handle phone number not supported
        elif transaction_resp['status'] == 'NotSupported':
            # TODO: mark transaction phone number as invalid
            transaction.save()
            transaction_failed(
                transaction=transaction,
                error_message=
                'NotSupported: Checkout to the provided phone number is not supported.'
            )
            raise Exception('Transaction Failed: NotSupported')
        # Handle unknown fail
        elif transaction_resp['status'] == 'Failed':
            transaction.save()
            transaction_failed(transaction=transaction, error_message='Failed')
            raise Exception('Transaction Failed: Failed')
        # Successful transaction. Awaiting confirmation from user
        elif transaction_resp['status'] == 'PendingConfirmation':
            transaction.save()
            return
        else:
            transaction.save()
            transaction_failed(transaction=transaction)
    else:
        transaction_failed(transaction=transaction,
                           error_message='No response')
        raise Exception('Transaction Failed')
예제 #2
0
def save_transaction(transaction: Transaction, transaction_resp):

    if type(transaction_resp) == dict and transaction_resp['status']:

        if transaction_resp['description']:
            transaction.description = transaction_resp['description']

        if transaction_resp['transactionId']:
            transaction.transaction_id = transaction_resp['transactionId']

        if transaction_resp['providerChannel']:
            transaction.provider_channel = transaction_resp['providerChannel']

        if transaction_resp['status'] == 'InvalidRequest':
            transaction.save()
            transaction_failed(
                transaction=transaction,
                error_message=
                'InvalidRequest: The request could not be accepted as one of the fields '
                'was invalid. The description field will contain more information.'
            )
            raise Exception('Transaction Failed: InvalidRequest')
        #
        elif transaction_resp['status'] == 'NotSupported':
            transaction.save()
            transaction_failed(
                transaction=transaction,
                error_message=
                'NotSupported: Checkout to the provided phone number is not supported.'
            )
            raise Exception('Transaction Failed: NotSupported')
        #
        elif transaction_resp['status'] == 'Failed':
            transaction.save()
            transaction_failed(transaction=transaction, error_message='Failed')
            raise Exception('Transaction Failed: Failed')
        #
        elif transaction_resp['status'] == 'PendingConfirmation':
            transaction.save()
            pass
        else:
            transaction.save()
            transaction_failed(transaction=transaction)
    else:
        transaction_failed(transaction=transaction,
                           error_message='No response')
        raise Exception('Transaction Failed')