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')
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')