I'm attempting to update a CustomerPaymentProfile with validationMode = liveMode. It fails because echeck doesn't seem to support this.
Is there any way for me to check if liveMode is supported before attempting an update with validationMode = liveMode?
This processor does not accept zero dollar authorization for this card type.
def update_customer_payment_profile(
self,
payment,
customerPaymentProfileId,
first_name,
last_name,
contact_dictionary,
company_name,
set_as_default=True,
validation_mode=ValidationMode.liveMode):
print('Updating customer payment profile', customerPaymentProfileId)
address = contact_dictionary.get('address')
city = contact_dictionary.get('city')
state = contact_dictionary.get('state')
zip_code = contact_dictionary.get('zip_code')
country = 'US'
phone = contact_dictionary.get('phone')
paymentProfile = apicontractsv1.customerPaymentProfileExType()
paymentProfile.billTo = CustomerProfile.make_billTo(
first_name, last_name, company_name, address,
city, state, zip_code, country, phone)
paymentProfile.payment = payment
paymentProfile.customerPaymentProfileId = customerPaymentProfileId
action = apicontractsv1.updateCustomerPaymentProfileRequest()
action.merchantAuthentication = self.merchantAuth
action.paymentProfile = paymentProfile
action.customerProfileId = str(
self.instance.authorizenet_customer_profile_id)
action.validationMode = validation_mode.value
controller = updateCustomerPaymentProfileController(action)
controller.execute()
response = controller.getresponse()
if response.messages.resultCode == OK:
msg = 'Successfully created a customer payment profile with id: {}'
print(msg.format(customerPaymentProfileId))
if set_as_default:
self.instance.authorizenet_default_payment_profile_id = int(
customerPaymentProfileId)
self.instance.save()
return customerPaymentProfileId
else:
raise AuthorizeNetError(response.messages.message[0]['text'].text)
def update_customer_payment_profile_echeck(
self,
customerPaymentProfileId,
account_type,
routing_number,
account_number,
name_on_account,
bank_name,
customer_type,
first_name,
last_name,
contact_dictionary=None,
company_name=None,
use_model_address=True,
set_as_default=True,
validation_mode=ValidationMode.liveMode):
contact_dictionary = self.create_contact_dictionary(
use_model_address, contact_dictionary)
payment = CustomerProfile.make_bankAccount(
account_type, routing_number, account_number,
name_on_account, bank_name)
return self.update_customer_payment_profile(
payment,
customerPaymentProfileId,
first_name,
last_name,
contact_dictionary,
company_name,
set_as_default,
validation_mode)
06-14-2018 11:40 AM
The documentation for validationMode could be improved, it does not mention eChecks. ValidationMode does not work for eCheck payment profiles because eCheck transactions are not authorized in real-time like credit cards.
validationMode -
Indicates the processing mode for the request. If the customer profile contains no payment data, this field should not be sent.
String.
Use testMode to perform a Luhn mod-10 check on the card number, without further validation. Use liveMode to submit a zero-dollar or one-cent transaction (depending on card type and processor support) to confirm the card number belongs to an active credit or debit account.
06-15-2018 11:36 AM