JSON节点的顺序更改,同时使请求Swift



我正在尝试发布以下JSON主体请求JSON:

let parameters =  [
        "createTransactionRequest": [
            "merchantAuthentication": [
                "name": "xxxxxxxx",
                "transactionKey": "xxxxxxxxx"
            ],
            "refId": "123456",
            "transactionRequest": [
                "transactionType": "authCaptureTransaction",
                "amount": "5",
                "payment": [
                    "opaqueData": [
                        "dataDescriptor": desc!,
                        "dataValue": tocken!
                    ]
                ]
            ]
        ]
    ]

当我尝试打印(参数)节点的顺序更改时,它看起来像

["createTransactionRequest":
 ["refId": "123456", 
"transactionRequest":
 ["payment":  ["opaqueData": ["dataDescriptor": "COMMON.ACCEPT.INAPP.PAYMENT", "dataValue": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx="]],
 "transactionType": "authCaptureTransaction",
 "amount": "5"],
 "merchantAuthentication": ["name": "xxxxxxx", "transactionKey": 
"6gvE46G5seZt563w"]
]
]

我得到的回应

{ messages =     {
        message =         (
                        {
                code = E00003;
                text = "The element 'createTransactionRequest' in namespace
 'AnetApi/xml/v1/schema/AnetApiSchema.xsd' has invalid child element 
'refId' in namespace 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'. List of
 possible elements expected: 'merchantAuthentication' in namespace 
'AnetApi/xml/v1/schema/AnetApiSchema.xsd'.";
            }
        );
        resultCode = Error;
    };
}

这真的很烦人。任何人的帮助将非常感谢。

您需要更改数据结构如下:

struct Transaction: Codable {
    let createTransactionRequest: CreateTransactionRequest
}
struct CreateTransactionRequest: Codable {
    let merchantAuthentication: MerchantAuthentication
    let refId: String
    let transactionRequest: TransactionRequest
}
struct MerchantAuthentication: Codable {
    let name: String
    let transactionKey: String
}
struct TransactionRequest: Codable {
    let transactionType: String
    let amount: String
    let payment: Payment
}
struct Payment: Codable {
    let opaqueData: OpaqueData
}
struct OpaqueData: Codable {
    let dataDescriptor: String
    let dataValue: String
}

测试

let json = """
    { "createTransactionRequest":
        { "merchantAuthentication":
            { "name": "YOUR_API_LOGIN_ID",
               "transactionKey": "YOUR_TRANSACTION_KEY"
             },
          "refId": "123456",
          "transactionRequest":
               { "transactionType": "authCaptureTransaction",
                 "amount": "5",
                 "payment":
                   { "opaqueData":
                       { "dataDescriptor": "COMMON.ACCEPT.INAPP.PAYMENT",
                         "dataValue": "PAYMENT_NONCE_GOES_HERE"
                        }
                    }
                }
             }
          }
"""
let jsonData = Data(json.utf8)
do {
    let transaction = try JSONDecoder().decode(Transaction.self, from: jsonData)
    print(transaction)
    // encoding
    let encodedData = try JSONEncoder().encode(transaction)
    print(String(data: encodedData, encoding: .utf8)!)
} catch {
    print(error)
}

{" createTransActionRequest":{" merChantaUthentication":{" name":" ouy_api_login_id"," transactionKey":" your_transaction_key"}," refid":" refid":" 123456","金额":" 5","付款":{" opaquedata":{" datavalue":" payay_nonce_goes_here"," datadescriptor":" common.accept.inapp.payment.payment"}}}}}}}}}}}

最新更新