ConnectionResetError при использовании fetch API для передачи данных в представление Django, которое отправляет данные на внешний api

Я пытаюсь реализовать Opayo(Sagepay) с помощью Django. Я пытаюсь отправить переменную card_identifier из моего шаблона в представление, используя fetch API. Затем представление будет использовать пакет requests для отправки этого card_identifier вместе с другими данными в api для обработки платежа. В ответ api должен получить JsonResponse, который я хочу передать обратно в шаблон или использовать для перенаправления на страницу успеха или неудачи платежа.

    async function processPayment() {
    var card_identifier = document.querySelector('[name="card-identifier"]').value
    var url = "{% url 'sagepay:processing_payment' %}"
     
    await fetch(url, {
        method: 'POST',
        headers: { 'content-type': 'application/json', 'X-CSRFToken': csrftoken, },
        body: JSON.stringify({ merchantSessionKey: merchantSessionKeyContext, card_identifier: card_identifier, })
      })
      .then(response => response.json())
      .then(data => console.log(data))
      .catch(error => console.log(error))
}

В представлении я собираю эту переменную card_identifier и использую ее для осуществления платежа через пост-запрос к sagepay api.

def process_payment(request):
body = json.loads(request.body)
card_identifier = body["card_identifier"]
merchantSessionKey = body["merchantSessionKey"]

basket = Basket(request)
total = str(basket.get_total_price())
total = total.replace(".", "")
amount = int(total)

headers = {
    "Authorization": "my key goes here",
}
data = {
    "transactionType": "Payment",
    "paymentMethod": {"card": {"merchantSessionKey": merchantSessionKey, "cardIdentifier": card_identifier}},
    "vendorTxCode": "ggmachiSnesdaqjcjjjhqsbxjka",
    "amount": amount,
    "currency": "EUR",
    "description": "Demo transaction",
    "apply3DSecure": "UseMSPSetting",
    "customerFirstName": "Sam",
    "customerLastName": "Jones",
    "billingAddress": {
        "address1": "407 St. John Street",
        "city": "London",
        "postalCode": "EC1V 4AB",
        "country": "GB",
    },
    "entryMethod": "Ecommerce",
}

response = requests.post("https://pi-test.sagepay.com/api/v1/transactions", headers=headers, json=data)
jsonresponse = response.json()
print(jsonresponse)

return JsonResponse(jsonresponse)

Вот ошибка, которую я получаю:

Exception occurred during processing of request from ('127.0.0.1', 51080)
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/socketserver.py", line 650, in process_request_thread
    self.finish_request(request, client_address)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/socketserver.py", line 360, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/socketserver.py", line 720, in __init__
    self.handle()
  File "/Users/johndodd/Desktop/Programming/Professional/GGMachines/venv/lib/python3.9/site-packages/django/core/servers/basehttp.py", line 174, in handle
    self.handle_one_request()
  File "/Users/johndodd/Desktop/Programming/Professional/GGMachines/venv/lib/python3.9/site-packages/django/core/servers/basehttp.py", line 182, in handle_one_request
    self.raw_requestline = self.rfile.readline(65537)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/socket.py", line 704, in readinto
    return self._sock.recv_into(b)
ConnectionResetError: [Errno 54] Connection reset by peer
enter code here

В консоли браузера у меня такая ошибка:

TypeError: Cannot read property 'requestContent' of undefined

Я протестировал часть Fetch API с базовым представлением django, и этот код работает, т.е. я могу вывести данные, которые передаются моему представлению django, и представление возвращает ответ на фронтенд.

Я также подключаюсь к sagepay api, и он возвращает ответ с подтверждением платежа. Так что, похоже, все правильно. Похоже, что проблема возникает, когда jsonresponse передается обратно из представления в шаблон. Есть ли у кого-нибудь идеи, почему это может происходить, или может быть есть лучший способ сделать это? Спасибо

Вернуться на верх