我根据这篇文章将JSON发布到测试API:https://developer.authorize.net/api/reference/index.html customer-profiles-update-customer-payment-profile
它清楚地表明,我可以包括,从他们收到的,一个更新的支付元素:
paymentProfile Contains payment information for the customer profile.
Sensitive information that is not being updated can be masked.
这是我的整个对象:
{
"updateCustomerPaymentProfileRequest": {
"merchantAuthentication": {
"name": "XXXXX",
"transactionKey": "XXXXX"
},
"refId": "XXXXX",
"customerProfileId": "XXXXX",
"paymentProfile": {
"defaultPaymentProfile": true,
"customerPaymentProfileId": "XXXXX",
"payment": {
"creditCard": {
"cardNumber": "XXXX1111",
"expirationDate": "2023-12"
}
},
"originalNetworkTransId": "XXXXX",
"originalAuthAmount": 0.0,
"billTo": {
"phoneNumber": "XXXXX-XXXXX",
"firstName": "XXXXX",
"lastName": "XXXXX",
"address": "XXXXX XXXXX",
"city": "XXXXX",
"state": "XXXXX",
"zip": "XXXXX-XXXXX",
"country": "US"
}
},
"validationMode": "testMode"
}
}
返回,我得到这个错误:
{
"messages": {
"resultCode": "Error",
"message": [
{
"code": "E00003",
"text":"The element 'paymentProfile' in namespace 'AnetApi/xml/v1/schema/AnetApiSchema.xsd' has invalid child element 'payment' in namespace 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'."
}
]
}
}
这没有意义。它几乎完全符合文档。在错误消息中,他们提到了xml模式。当我打开它时,它显示了支付配置文件的不同类型:
https://api.authorize.net/xml/v1/schema/AnetApiSchema.xsd
节目:
<xs:element name="updateCustomerPaymentProfileRequest">
<xs:complexType>
<xs:complexContent>
<xs:extension base="anet:ANetApiRequest">
<xs:sequence>
<xs:element name="customerProfileId" type="anet:numericString"/>
<xs:element name="paymentProfile" type="anet:customerPaymentProfileExType"/>
<xs:element name="validationMode" type="anet:validationModeEnum" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
其中customerPaymentProfileExType只是一个customerPaymentProfileId:
<xs:complexType name="customerPaymentProfileExType">
<xs:complexContent>
<xs:extension base="anet:customerPaymentProfileType">
<xs:sequence>
<xs:element name="customerPaymentProfileId" type="anet:numericString" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
如果我提供JSON来匹配上面的规范,我得到这个错误:
{
"refId": "XXXXX",
"messages": {
"resultCode": "Error",
"message": [
{
"code": "E00029",
"text": "Payment information is required."
}
]
}
}
解决方案:defaultPaymentProfile和customerPaymentProfileId必须列在paymentProfile中的支付实体之后。
那么这样做:
"paymentProfile": {
"payment": {
"creditCard": {
"cardNumber": "XXXX1111",
"expirationDate": "2023-12"
}
},
"defaultPaymentProfile": true,
"customerPaymentProfileId": "XXXXX"
},
:
"paymentProfile": {
"defaultPaymentProfile": true,
"customerPaymentProfileId": "XXXXX",
"payment": {
"creditCard": {
"cardNumber": "XXXX1111",
"expirationDate": "2023-12"
}
},
},