Authorize.net支付网关向iOS swift的信用卡API收费
大家好,我正在使用支付网关charge credit api,但在将json对象传递给api时出错。这里是传递给charge credit api的原始json对象Authorize.net支付网关向iOS swift的信用卡API收费,ios,swift,payment-gateway,authorize.net,Ios,Swift,Payment Gateway,Authorize.net,大家好,我正在使用支付网关charge credit api,但在将json对象传递给api时出错。这里是传递给charge credit api的原始json对象 { "createTransactionRequest": { "merchantAuthentication": { "name": "XXXXXX", "transactionKey": "XXXXXXXX" }, "refI
{
"createTransactionRequest": {
"merchantAuthentication": {
"name": "XXXXXX",
"transactionKey": "XXXXXXXX"
},
"refId": "123456",
"transactionRequest": {
"transactionType": "authCaptureTransaction",
"amount": "5",
"payment": {
"creditCard": {
"cardNumber": "5424000000000015",
"expirationDate": "2020-12",
"cardCode": "999"
}
}
}
}
}
这是原始的json请求
但在iOS中,在生成JSON的过程中,JSON对象和JSON对象的顺序发生了变化,这就是我们从api中得到错误的原因
{
"createTransactionRequest": {
"merchantAuthentication": {
"name": "XXXXXX",
"transactionKey": "XXXXXXX"
},
"refId": "123456",
"transactionRequest": {
"amount": "5",
"payment": {
"creditCard": {
"cardCode": "999",
"cardNumber": "5424000000000015",
"expirationDate": "2020-12"
}
},
"transactionType": "authCaptureTransaction"
}
}
}
在将这个JSON对象传递给API之后,我们将得到下面的错误
{
"messages": {
"resultCode": "Error",
"message": [
{
"code": "E00003",
"text": "The element 'transactionRequest' in namespace 'AnetApi/xml/v1/schema/AnetApiSchema.xsd' has invalid child element 'amount' in namespace 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'. List of possible elements expected: 'transactionType' in namespace 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'."
}
]
}
}
下面是我在应用程序中创建JSON对象的代码
var dict = Dictionary<String, Any>()
dict=[
"merchantAuthentication": [
"name": "xxxxxxx",
"transactionKey": "xxxxxxx"
],
"refId": "5656",
"transactionRequest": [
"transactionType": "authCaptureTransaction",
"amount": "55",
"payment": [
"creditCard": [
"cardNumber": "4111111111111111",
"expirationDate": "2020-12",
"cardCode": "999"
]
]
]
]
var dict=Dictionary()
口述=[
“商品认证”:[
“名称”:“xxxxxxx”,
“transactionKey”:“xxxxxxx”
],
“refId”:“5656”,
“transactionRequest”:[
“transactionType”:“AuthCaptureTransation”,
“金额”:“55”,
“付款”:[
“信用卡”:[
“卡号”:“4111111111111”,
“到期日期”:“2020-12”,
“卡片代码”:“999”
]
]
]
]
打印后,此JSON序列被更改您阅读了吗?从链接页面可以清楚地看到,您遇到的是在后端将JSON元素转换为XML元素的副作用,特别是在JSON请求中的参数排序方面:
关于JSON支持的说明
授权.Net API,它不是
基于REST,通过JSON的翻译提供JSON支持
元素转换为XML元素。而JSON通常不需要一个集合
按照对象中元素的顺序,XML需要严格的顺序。
使用Authorize.NETAPI的开发人员应该强制对
元素以匹配此API引用
该块下面的示例还显示了它们的transactionType
参数作为transactionRequest
对象中的第一个属性出现Tl;dr-在事务请求
对象中向上移动事务类型
参数:
{
"createTransactionRequest": {
"merchantAuthentication": {
"name": "XXXXXX",
"transactionKey": "XXXXXXX"
},
"refId": "123456",
"transactionRequest": {
"transactionType": "authCaptureTransaction",
"amount": "5",
"payment": {
"creditCard": {
"cardCode": "999",
"cardNumber": "5424000000000015",
"expirationDate": "2020-12"
}
}
}
}
}
请尝试以下代码
let merchantSub = ["name": "XXXXXX",
"transactionKey": "XXXXXXX"]
let childCreditCard = ["cardCode": "999",
"cardNumber": "5424000000000015",
"expirationDate": "2020-12"]
let creditCard = ["creditCard":childCreditCard]
let transactionRequest = ["amount": "",
"payment":creditCard,
"transactionType":""] as [String : Any]
let merchantAuthentication = ["merchantAuthentication" :merchantSub,
"refId" : "123456",
"transactionRequest":transactionRequest] as [String : Any]
let param = ["createTransactionRequest" : merchantAuthentication]
if let data = try? JSONSerialization.data(withJSONObject: param, options: .prettyPrinted),
let str = String(data: data, encoding: .utf8) {
print(str)
}
不过,我建议使用类,但对于初始级别,请这样做 我按照您的指示尝试,但它显示错误{“messages”:{“resultCode”:“error”,“message”:[{“code”:“E00003”,“text”:“命名空间‘AnetApi/xml/v1/schema/AnetApiSchema.xsd’中的元素‘createTransactionRequest’在命名空间‘AnetApi/xml/v1/schema/AnetApiSchema.xsd’中具有无效的子元素‘transactionType’。可能的元素列表应为‘AnetApi/xml/v1/schema/AnetApiSchema.xsd’中的‘transactionRequest’。”请检查
payment
元素是否为数组对象是的,它是对象的数组..它的顺序问题..我如何在应用程序中维护JSON的顺序?请首先在postman中与coma一起尝试您的JSON请求。如果成功,那么我将向您发送创建JSON请求的代码。同时向我发送您的代码,以便我了解。是的,我发送JSON对象这是我的代码,var dict=Dictionary()dict=[“merchantAuthentication”:[“name”:“xxxxxx”,“transactionKey”:“xxxxx”],“refId”:“5656”,“transactionRequest”:[“transactionType”:“AuthCaptureTransage”,“amount”:“55”,“payment”:[“creditCard”:[“cardNumber”:“4111111”expirationDate:“2020-12”,“cardCode:“999”]]]]打印后,此对象序列被更改。请在问题中添加此代码,而不是在注释中添加此代码。“尝试此”并不是一个好答案。您应该解释此解决问题的方式和原因。我建议阅读,”