WedX - журнал о программировании и компьютерных науках

Проблема с отправкой json с клиентской стороны на бэкэнд

Я пытаюсь отправить сообщение Json на серверную часть фляги.

Клиентский код javascript:

    submit.addEventListener('click', function(){
    var myHeaders = new Headers();
    myHeaders.append("Content-Type", "application/json");


    var raw = JSON.stringify({"amount":Number(amount.value),
                              "ccnumber":`${ccnumber.value}`,
                              "month":`${ccmonth.value}`,
                              "year":`${ccyear.value}`,
                              "zip":`${zip.value}`,
                              "cvv":`${cvv.value}`,
                              "first_name":`${name.value}`,
                              "last_name":`${lastname.value}`,
                              "address1":`${address.value}`,
                              "city":`${city.value}`,
                              "state":`${state.value}`,
                              "country":`${country.value}`,
                              "isJava": "true",
                              "lang": navigator.language,
                              "colorDepth": screen.colorDepth,
                              "browserTZ": new Date().getTimezoneOffset(),
                              "screenWidth": screen.width,
                              "screenHeight": screen.height,
                              "browserAgent": navigator.userAgent});

    var requestOptions = {
        method: 'POST',
        headers: myHeaders,
        body: raw,
        redirect: 'follow' };

        fetch("https://0.0.0.0:80/consulting-h", requestOptions)
        .then(response => response.text())
            .then(result => console.log(result))
            .catch(error => console.log('error', error));
})

внутренний код:

requestJson = flask.request.json

    amount = requestJson['amount']
    ccnumber = requestJson['ccnumber']
    month = requestJson['month']
    year = requestJson['year']
    ccexp = f'{month}{year}'
    zip = requestJson['zip']
    cvv = requestJson['cvv']
    first_name = requestJson['first_name']
    last_name = requestJson['last_name']
    address1 = requestJson['address1']
    city = requestJson['city']
    state = requestJson['state']
    country = requestJson['country']

    # Browser Fingerprint
    isJava = requestJson['isJava']
    lang = requestJson['lang']
    colorDepth = requestJson['colorDepth']
    browserTZ = requestJson['browserTZ']
    screenWidth = requestJson['screenWidth']
    screenHeight = requestJson['screenHeight']
    browserAgent = requestJson['browserAgent']


    dataDict = {
        "challengeIndicator": "01",
        "amount": amount,
        "pan": ccnumber,
        "month": month,
        "year": year,
        "browser": {
            "browserAcceptHeader": "application/json",
            "browserJavaEnabled": isJava,
            "browserLanguage": lang,
            "browserColorDepth": colorDepth,
            "browserTZ": browserTZ,
            "browserScreenWidth": screenWidth,
            "browserScreenHeight": screenHeight,
            "browserUserAgent": browserAgent
        },
        "threeDSRequestorURL": requestorURL,

    }

    data = json.dumps(dataDict)


    print(data)



    postResponse =  requests.post('https://apisandbox.3dsintegrator.com/v2/authenticate/browser', headers=headers(),
                                 data=data).json()

    print(postResponse)

Результат:

{"challengeIndicator": "01", "amount": 1, "pan": "5107747733373841", "month": "06", "year":      "20", "browser": {"browserAcceptHeader": "application/json", "browserJavaEnabled": "true", "browserLanguage": "en", "browserColorDepth": "45", "browserTZ": "245", "browserScreenWidth": "1440", "browserScreenHeight": "900", "browserUserAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1"}, "threeDSRequestorURL": "https://5090ca5ec085.ngrok.io"}

Ответ сервера:

{'error': 'Не удалось разобрать тело запроса. Пожалуйста, проверьте формат JSON'}

если тот же запрос будет выполнен с Postman, он вернет действительный.

Json отправлен с PostmanL

var raw =    JSON.stringify({"amount":1,"ccnumber":"5107747722273841","month":"09","yea r":"20","zip":"33132","cvv":"352","first_name":"kevin","last_name":"luciano","address1":"244 biscayne","city":"Miami","state":"FL","country":"US","isJava":true,"lang":"en","colorDepth":"45","browserTZ":"230","screenWidth":"1440","screenHeight":"900","browserAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1"});

Что я могу сделать, чтобы это работало при отправке запроса со стороны клиента?


Ответы:


1

попробуйте что-то вроде JSON.stringify({amount:1, ccnumber: "5107747722273841" Обратите внимание на отсутствие имен параметров.

с другой стороны, не рекомендуется указывать данные кредитной карты на странице, использовать платежный шлюз, такой как PayPal, eWay, payway, stripe и т. д.

21.09.2020
Новые материалы

Как создать диаграмму градиентной кисти с помощью D3.js
Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


Для любых предложений по сайту: [email protected]