Как назначить сумму (сумму) заказа магазина при оформлении заказа на сумму в процессе оформления платежного шлюза? - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь интегрировать платежный шлюз Razorpay в мой интернет-магазин, основанный на ecwid.В соответствии с процессом, описанным в документации ecwid, мне нужно расшифровать детали заказа, предоставленные моим магазином, отправить данные для обработки на мой платежный шлюз и, наконец, перенаправить клиента обратно в магазин.

На основев документах Razorpay мне нужен код сценария на основе формы, помещенный в тег кнопки.При нажатии на кнопку отправляется форма оформления заказа, и клиент приступает к выполнению платежа.

<button id="rzp-button1">Pay</button>
<script src="https://checkout.razorpay.com/v1/checkout.js"></script>
<script>
var options = {
  "key": "YOUR_KEY_ID",
  "amount": "2000", // 2000 paise = INR 20
  "name": "Merchant Name",
  "description": "Purchase Description",
  "image": "/your_logo.png",
  "handler": function (response){
      alert(response.razorpay_payment_id);
  },
  "prefill": {
      "name": "Harshil Mathur",
      "email": "harshil@razorpay.com"
  },
  "notes": {
    "address": "Hello World"
  },
  "theme": {
    "color": "#F37254"
  }
};
var rzp1 = new Razorpay(options);

document.getElementById('rzp-button1').onclick = function(e){
  rzp1.open();
  e.preventDefault();
}
</script>

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

Это мой код до сих пор.Это кажется очень окольным и все еще не работает.Любая помощь будет оценена.

purchaseRouter.route('/')
.post((req, res, next) => {
  var algorithm = encryptionHelper.CIPHERS.AES_128_CBC;
  var originalBase64 = req.body.data.replace(/-/g, "+").replace(/_/g, "/");
  const key = process.env.ECWID_CLIENT_SECRET.slice(0, 16);
  var decText = encryptionHelper.decryptText(algorithm, key, originalBase64, 
   "base64");
  var jsonText = JSON.parse(decText);
  var amount = jsonText.cart.order.total;
  //var name = jsonText.billingPerson.name;
  var email = jsonText.cart.order.email;
  amount = amount*100;
  var options = {
   "key": process.env.RAZORPAY_KEY_ID,
   "amount": amount,
   "name": "Fluvium",
   "description": "Board & Combat Sportswear",
   "image": "/your_logo.png",
   "handler": function (response){
     console.log(response.razorpay_payment_id);
     if (typeof response.razorpay_payment_id == 'undefined' ||  
        response.razorpay_payment_id < 1) {
      console.log("Error" + response.razorpay_payment_id);;
     } else {
       document.getElementById('razorpay_payment_id').value =  
          response.razorpay_payment_id;
       document.getElementById('razorpay_signature').value = 
        response.razorpay_signature;
       document.razorpayform.submit();
     }
     location.href = redirect_url;
    },
    "prefill": {
      "name": "",
      "email": email
    },
    "notes": {
       "address": "Hello World"
    },
    "theme": {
       "color": "#F37254"
    }
   };
    //res.send(JSON.stringify(options));
  var html='';
  html += "<form name='razorpayform' action='/purchase/razorpay' 
      method='POST'>";
  html += "<input type='hidden name='razorpay_payment_id' 
      id='razorpay_payment_id'>"
  html += "<input type='hidden' name='razorpay_signature'  
      id='razorpay_signature' >"
  html += "</form>"
  html += "<script src='https://checkout.razorpay.com/v1/checkout.js'> 
      </script>";
  html += "<script>";
  html += "var options = " + JSON.stringify(options);
  html += "; var rzp1 = new Razorpay(options);";
  html += "rzp1.open();";
  html += "</script>";
 res.send(html);
});

1 Ответ

0 голосов
/ 03 октября 2018

options.handler - это функция, которая теряется при запуске JSON.stringify(options).

Чтобы сохранить ее, нам необходимо преобразовать логику функции в строку.Эта строка является IIFE , которая возвращает ваш исходный handler.

Итак, ваш код теперь будет

purchaseRouter.route('/')
.post((req, res, next) => {
  var algorithm = encryptionHelper.CIPHERS.AES_128_CBC;
  var originalBase64 = req.body.data.replace(/-/g, "+").replace(/_/g, "/");
  const key = process.env.ECWID_CLIENT_SECRET.slice(0, 16);
  var decText = encryptionHelper.decryptText(algorithm, key, originalBase64, 
   "base64");
  var jsonText = JSON.parse(decText);
  var amount = jsonText.cart.order.total;
  //var name = jsonText.billingPerson.name;
  var email = jsonText.cart.order.email;
  amount = amount*100;
  var options = {
   "key": process.env.RAZORPAY_KEY_ID,
   "amount": amount,
   "name": "Fluvium",
   "description": "Board & Combat Sportswear",
   "image": "/your_logo.png",
    "handler": "(function getHandler (response) { return function (response) { console.log(response.razorpay_payment_id); if (typeof response.razorpay_payment_id == 'undefined' || response.razorpay_payment_id < 1) { console.log('Error' + response.razorpay_payment_id); } else { document.getElementById('razorpay_payment_id').value = response.razorpay_payment_id; document.getElementById('razorpay_signature').value = response.razorpay_signature; document.razorpayform.submit(); } location.href = redirect_url; } })()",
    "prefill": {
      "name": "",
      "email": email
    },
    "notes": {
       "address": "Hello World"
    },
    "theme": {
       "color": "#F37254"
    }
   };
    //res.send(JSON.stringify(options));
  var html='';
  html += "<form name='razorpayform' action='/purchase/razorpay' 
      method='POST'>";
  html += "<input type='hidden name='razorpay_payment_id' 
      id='razorpay_payment_id'>"
  html += "<input type='hidden' name='razorpay_signature'  
      id='razorpay_signature' >"
  html += "</form>"
  html += "<script src='https://checkout.razorpay.com/v1/checkout.js'> 
      </script>";
  html += "<script>";
  html += "var options = " + JSON.stringify(options);
  html += "; options.handler = eval(options.handler);";
  html += "var rzp1 = new Razorpay(options);";
  html += "rzp1.open();";
  html += "</script>";
 res.send(html);
});

Я добавил html += "; options.handler = eval(options.handler);"; и преобразовалhandler ключ, чтобы стать строкой.

...