sdk-python icon indicating copy to clipboard operation
sdk-python copied to clipboard

Document production constants settings

Open buddha314 opened this issue 3 years ago • 2 comments

To switch to production, the README states

# For PRODUCTION use
	createtransactioncontroller.setenvironment(constants.PRODUCTION)

However, the API documentation does not provide the format or list of variables to be held in constants.py.

buddha314 avatar Feb 15 '22 17:02 buddha314

Hi Buddha314 -- this has been bugging/confusing me for a while as today. Today I dug into the code and found pull request 26 which also refers to constant. I found the actual file at: https://github.com/AuthorizeNet/sdk-python/blob/master/authorizenet/constants.py

I can see now that the import should be: from authorizenet import constants

then later on in the code, you can have the line you use above createtransactioncontroller.setenvironment(constants.PRODUCTION)

I hope this helps you.

markcerv avatar Nov 26 '22 20:11 markcerv

My above comment is close, but not functional. Once I deployed the above code fragment to production and tried running a transaction, I got an error. :(

Bottom line, here's the correct way to call:

from authorizenet.constants import constants
from authorizenet.apicontrollers import createTransactionController


    if some_test_of_yours():
        createtransactioncontroller.setenvironment(constants.PRODUCTION)
    else:
        createtransactioncontroller.setenvironment(constants.SANDBOX)

    createtransactioncontroller.execute()

And here is a more complete example that might help others:

# related third party imports
from authorizenet import apicontractsv1
from authorizenet.constants import constants
from authorizenet.apicontrollers import createTransactionController

# Are there any settings you need?
from django.conf import settings

MERCHANTAUTH_NAME = settings.MERCHANTAUTH_NAME
MERCHANTAUTH_TRANS_KEY = settings.MERCHANTAUTH_TRANS_KEY



def process_card_payment(data_from_user):

    transactionType = "authCaptureTransaction"

    creditCard = apicontractsv1.creditCardType()
    creditCard.cardNumber = data_from_user["card_number"]
    creditCard.expirationDate = data_from_user["expiration_date"]
    creditCard.cardCode = data_from_user["card_code"]

    # Create order information
    order = apicontractsv1.orderType()
    order.invoiceNumber = data_from_user["res_id"]
    order.description = data_from_user["description"]

    # Set the customer's identifying information
    customerData = apicontractsv1.customerDataType()
    customerData.type = "individual"
    customerData.id = data_from_user["my_txn_id"]

    payment = apicontractsv1.paymentType()
    payment.creditCard = creditCard

    # Set the customer's Bill To address
    customerAddress = apicontractsv1.customerAddressType()
    customerAddress.firstName = data_from_user["first_name"]
    customerAddress.lastName = data_from_user["last_name"]
    # more fields like, address, city, state,zip, country

    transactionrequest = apicontractsv1.transactionRequestType()
    transactionrequest.transactionType = transactionType  # set above via parameter
    transactionrequest.amount = data_from_user["amount"]
    transactionrequest.payment = payment  # defined above in payment = apicontractsv1.paymentType()
    transactionrequest.billTo = customerAddress  # defined above in customerAddress = apicontractsv1.customerAddressType()
    transactionrequest.order = order  # defined above in order = apicontractsv1.orderType()
    transactionrequest.customer = customerData  # defined above in customerData = apicontractsv1.customerDataType()

    createtransactionrequest = apicontractsv1.createTransactionRequest()
    createtransactionrequest.merchantAuthentication = merchantAuth
    createtransactionrequest.refId = data_from_user["ref_id"]

    createtransactionrequest.transactionRequest = transactionrequest
    createtransactioncontroller = createTransactionController(createtransactionrequest)

    if this_is_a_prod_server():
        logger.debug("Setting the environment to be PRODUCTION")
        createtransactioncontroller.setenvironment(constants.PRODUCTION)
    else:
        logger.debug("Setting the environment to be SANDBOX")
        createtransactioncontroller.setenvironment(constants.SANDBOX)

    createtransactioncontroller.execute()

    response = createtransactioncontroller.getresponse()

    if response.messages.resultCode == "Ok":
        result = f"OK: Transaction ID : {response.transactionResponse.transId}"
        logger.info(result)
    else:
        result = (
            f"ERROR: response code: [{response.messages.resultCode}]"
            f" error code [{response.messages.message.code}]"
        )

        logger.error(result)

    return response

Hope this helps.

markcerv avatar Dec 29 '22 19:12 markcerv

TCS-Dev Dhanashree- The constants.py file is already present in the SDK. If you want to use the constants.py file inside the SDK, you have to include the below line in your code. “from authorizenet.constants import constants”

dhanashreeyadav1 avatar Sep 30 '24 10:09 dhanashreeyadav1