2017-09-13 46 views
1

我目前正在向客户收费,然后尝试根据该费用创建客户资料。问题是,当我尝试和真正建立这样的失败的客户,告诉我,没有任何反应,而是打印出`authorize.net从交易中创建客户资料

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

下面是代码,而这个块下面是一个比较说明什么我正在分析响应。

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

当我尝试并删除响应时,问题似乎就会发生。但是当我真正运行代码,建议开发者文档

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, 
               }) 

鉴于其documentation节目进行交易不知道为什么它返回它不工作的时候,你可以创建客户英寸

此外,当我检查schema for the XML response它似乎我设置正确。

回答

0

在C#SDK中遇到同样的问题。潜入其中说明错误消息:“客户资料创建失败,此支付方式不支持配置文件创建。”所以我猜你不能从不透明的卡片数据制作付款资料! :(

+0

不幸的是,这是正确的,在他们的论坛讨论后,https://community.developer.authorize.net/t5/Integration-and-Testing/Make-customer-profile-when-charging-card/mp/59867#M34438它说它不适用于不透明的数据 – nadermx