Авторизуйтесь. net платежный шлюз Зарядите API кредитной карты для iOS swift - PullRequest
0 голосов
/ 20 февраля 2020

Привет всем, так как я использую платежный шлюз оплаты через платежный шлюз, но я получаю ошибку при передаче объекта json в api.и вот мой оригинальный JSON объект, который передается для зарядки кредитного API.

{
    "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"
      ]
    ]
  ]
]

после печати эта JSON последовательность изменяется

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

пожалуйста, попробуйте следующий код.

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

Однако я рекомендую использовать класс, но для начального уровня сделайте это.

0 голосов
/ 20 февраля 2020

Вы прочитали документацию ? На связанной странице очень ясно, что вы сталкиваетесь с побочным эффектом их перевода JSON элементов в XML элементов в бэкэнде, особенно в отношении порядка параметров в вашем запросе JSON:

A Примечание относительно JSON Поддержка

API Authorize. Net, не основанный на REST, предлагает поддержку JSON посредством перевода JSON элементов в XML элементов. Хотя JSON обычно не требует установленного порядка для элементов в объекте, XML требует строгого упорядочения. Разработчики, использующие API Authorize. Net, должны принудительно упорядочить элементы в соответствии с этим справочным руководством API.

Их примеры под этим блоком также показывают, что их параметры transactionType сначала отображаются как Атрибут в объекте transactionRequest. Tl; dr - переместите параметр transactionType вверх в объекте transactionRequest:

{
    "createTransactionRequest": {
        "merchantAuthentication": {
            "name": "XXXXXX",
            "transactionKey": "XXXXXXX"
        },
        "refId": "123456",
        "transactionRequest": {
            "transactionType": "authCaptureTransaction",
            "amount": "5",
            "payment": {
                "creditCard": {
                    "cardCode": "999",
                    "cardNumber": "5424000000000015",
                    "expirationDate": "2020-12"
                }
            }
        }
    }
} 
...