2017-09-13 41 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