2017-09-13 7 views
1

Je charge actuellement un client et tente ensuite de créer un profil client basé sur cette charge. Le problème est que quand je tente de créer réellement le client, il échoue, me disant qu'il n'y a pas de réponse et imprime à la place sur `authorize.net création d'un profil client à partir de la transaction

AttributeError: no such child: {AnetApi/xml/v1/schema/AnetApiSchema.xsd}customerProfileId

Voici le code, et en dessous de ce morceau est un peu plus d'explications et ce Je fais pour analyser la réponse.

merchantAuth = apicontractsv1.merchantAuthenticationType() 
merchantAuth.name = app_config.AUTHORIZE_KEYS['apiLoginId'] 
merchantAuth.transactionKey = app_config.AUTHORIZE_KEYS['transactionKey'] 
# Create the payment object for a payment nonce 
opaqueData = apicontractsv1.opaqueDataType() 
opaqueData.dataDescriptor = request.form['dataDesc'] 
opaqueData.dataValue = request.form['dataValue'] 

# Add the payment data to a paymentType object 
paymentOne = apicontractsv1.paymentType() 
paymentOne.opaqueData = opaqueData 

# Create order information 
order = apicontractsv1.orderType() 
order.invoiceNumber = "invoice_%s" % user.id 
order.description = "Awesome" 
# Set the customer's identifying information 
customerData = apicontractsv1.customerDataType() 
customerData.type = "individual" 
customerData.id = "cus_%s" % user.id 
customerData.email = email 
# Giving the credit card info 
# Setting billing information 
billto = apicontractsv1.nameAndAddressType() 
billto.firstName = request.form['firstName'] 
billto.lastName = request.form['lastName'] 
billto.address = address1 
billto.city = city 
billto.state = state 
billto.zip = zipcode 
billto.country = country 
item = request.form['item'] 
if item == 'dollar': 
    amount = "3.00" 
if item == "monthly": 
    amount = "5.00" 
    length = 1 
if item == "annual": 
    amount = "50.00" 
    length = 12 
# Create order information 
order = apicontractsv1.orderType() 
order.invoiceNumber = "invoice_%s" % user.id 
order.description = "Awesomeness" 

# # Set the customer's Bill To address 
customerAddress = apicontractsv1.customerAddressType() 
customerAddress.firstName = request.form['firstName'] 
customerAddress.lastName = request.form['lastName'] 
customerAddress.address = address1 
customerAddress.city = city 
customerAddress.state = state 
customerAddress.zip = zipcode 
customerAddress.country = country 

# Create customer profile on transaction 
createcustomerprofile = apicontractsv1.customerProfilePaymentType() 
createcustomerprofile.createProfile = True 

# Create a transactionRequestType object and add the previous objects to it. 
transactionrequest = apicontractsv1.transactionRequestType() 
transactionrequest.transactionType = "authCaptureTransaction" 
transactionrequest.amount = amount 
transactionrequest.payment = paymentOne 
transactionrequest.order = order 
transactionrequest.billTo = customerAddress 
transactionrequest.customer = customerData 
transactionrequest.profile = createcustomerprofile 

# Assemble the complete transaction request 
createtransactionrequest = apicontractsv1.createTransactionRequest() 
createtransactionrequest.merchantAuthentication = merchantAuth 
createtransactionrequest.refId = refId 
createtransactionrequest.transactionRequest = transactionrequest 

# Create the controller 
createtransactioncontroller = createTransactionController(createtransactionrequest) 
createtransactioncontroller.setenvironment(app_config.AUTH_NET_ENVIRONMENT) 
createtransactioncontroller.execute() 

Le problème semble se produire lorsque j'essaie de déclencher la réponse. mais quand je lance en fait le code comme il est suggéré dans la documentation développeurs

response = createtransactioncontroller.getresponse() 
logging.debug("%s" % response) 
if response is not None: 
     # Check to see if the API request was successfully received and acted upon 
    if response.messages.resultCode == "Ok": 
     # Since the API request was successful, look for a transaction response 
     # and parse it to display the results of authorizing the card 
     if hasattr(response.transactionResponse, 'messages') == True: 
      if hasattr(response.profileResponse, 'messages') == True: 
       print('made it here') 
      models.Payment(user=user, payment_date=datetime.utcnow(), 
            authorize={'email': email, 'updated': False, 
               'address': u'%s %s' % (address1, address2), 
               'messages': {'transId':'%s' % response.transactionResponse.transId, 
               'responseCode':'%s' % response.transactionResponse.responseCode, 
               'auth_code':'%s' % response.transactionResponse.messages.message[0].code, 
               'Description':'%s' % response.transactionResponse.messages.message[0].description, 
               'email':email}, 
               # 'customerProfileId': '%s' % response.profileResponse.customerProfileId, 
               # 'customerPaymentProfileIdList': '%s' % response.profileResponse.customerPaymentProfileIdList, 
               }) 

Compte tenu de leurs documentation montre que vous pouvez créer le client au moment de la transaction ne sais pas pourquoi il est de retour que cela ne fonctionne pas.

Aussi quand je vérifie le schema for the XML response il semble que je le règle correctement.

Répondre

0

Avoir le même problème dans C# SDK. En plongeant dans celui-ci, il affiche un message d'erreur: "La création du profil client a échoué. Cette méthode de paiement ne prend pas en charge la création de profil." Donc, je suppose que vous ne pouvez pas faire un profil de paiement à partir de données de carte opaque! :(

+0

Malheureusement, c'est correct, après une discussion dans leur forum, https://community.developer.authorize.net/t5/Integration-and-Testing/Make-customer-profile-when-charging-card/mp/59867 # M34438 dit qu'il ne fonctionne pas avec les données opaques – nadermx