Невозможно определить способ вызова функции в правильном месте на веб-сайте django - PullRequest
0 голосов
/ 05 августа 2020

Я работаю над веб-сайтом django и обнаружил ошибку, которую не могу решить. Прошло несколько дней, но я не смог исправить ошибку. Я пытаюсь интегрировать платежный шлюз на свой сайт. У меня есть кнопка оплаты, которая при нажатии должна отправлять данные в базу данных, а также go на сайт оплаты. Но он хранит данные, но не попадает на сайт оплаты. Вот javascript для моей кнопки:

    document.getElementById('payment-info').addEventListener('click', function (e) {
      submitFormData()
    })

    function submitFormData() {
      console.log('Payment Button Clicked')
      var userFormData = {
        'name': null,
      }

      var shippingInfo = {
        'address': null,
      }

      shippingInfo.address = form.address.value
      userFormData.name=form.name.value

      var url = "/process_order/"
      fetch(url, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'X-CSRFToken': csrftoken,
        },
        body:JSON.stringify({'form': userFormData, 'shipping': shippingInfo }),
      })
        .then((response) => response.json())
        .then((data) => {
          console.log('Success:', data);
          alert('Transaction Completed')
          window.location.href = "{% url 'index' %}"
        })

    }
  </script>

Это мой views.py:

def processOrder(request):
    transaction_id = datetime.datetime.now().timestamp()
    data = json.loads(request.body)
    
    if request.user.is_authenticated:
        customer=request.user.customer
        order, created=Order.objects.get_or_create(customer=customer, complete=False)
        total=float(data['form']['total'])
        order.transaction_id=transaction_id

        if total == order.get_cart_total:
            order.complete = True
        order.save()    
        ShippingAddress.objects.create(
            customer=customer,
            order=order,
            address=data['shipping']['address'],
            name=data['form']['name'],
        )
    //Code for integration below

        param_dict = {

                'MID': 'DIY12386817555501617',
                'ORDER_ID': str(order.id),
                'TXN_AMOUNT': '4',
                'CUST_ID': 'j',
                'INDUSTRY_TYPE_ID': 'Retail',
                'WEBSITE': 'WEBSTAGING',
                'CHANNEL_ID': 'WEB',
                'CALLBACK_URL':'http://127.0.0.1:8000/handlerequest/',    
        }
   
        param_dict['CHECKSUMHASH'] = Checksum.generate_checksum(param_dict, MERCHANT_KEY)
        return render(request, 'paytm.html', {'param_dict': param_dict})

    return JsonResponse('Done',safe=False)
@csrf_exempt
def handlerequest(request):
    # paytm will send you post request here
    form = request.POST
    response_dict = {}
    for i in form.keys():
        response_dict[i] = form[i]
        if i == 'CHECKSUMHASH':
            checksum = form[i]

    verify = Checksum.verify_checksum(response_dict, MERCHANT_KEY, checksum)
    if verify:
        if response_dict['RESPCODE'] == '01':
            print('order successful')
        else:
            print('order was not successful because' + response_dict['RESPMSG'])
    
    return HttpResponse('doneee')

А это мой urls.py:

path("process_order/",views.processOrder,name="process_order"),

    path("handlerequest/",views.handlerequest,name="handlerequest"),

Этот код не работает. После нажатия кнопки оплаты я получаю эту ошибку: Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0 Эта ошибка относится к submitformdata () в моем javascript коде.

Я хочу тренироваться так, чтобы как только человек нажимал на кнопка оплаты и его транзакция завершена, тогда его данные отправляются в базу данных, иначе я не написал код в handlerequest. Пожалуйста, помогите мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...