0

I'm trying to integrate flutterwave payment into my nodejs project but i keep getting 'An invalid email passed' on the flutterwave modal and "Uncaught DOMException: Failed to execute 'postMessage' on 'Window': NodeList object could not be cloned." in my google chrome console

<form method="POST" >
    <input type="hidden" value="<%- course.name %>" name="order[name]">
    <input type="hidden" value="<%- course.price %>" name="order[price]">
    <input type="hidden" value="<%- course._id %>" name="course_id">
    <input type="hidden" value="<%- currentUser.name %>" name="orderUser[name]">
    <input type="hidden" value="<%- currentUser.phone %>" name="orderUser[phone]">
    <input type="hidden" value="<%- currentUser.email %>" name="orderUser[email]">
    <input type="hidden" value="<%- currentUser.username %>" name="orderUser[username]">
    <input type="hidden" value="<%- currentUser._id %>" name="user_id">
    <script src="https://checkout.flutterwave.com/v3.js"></script>
    <button type="button" onClick="makePayment()">Pay Now</button>
</form>

this is the flutterwave integration script

 <script>
    function makePayment() {
      FlutterwaveCheckout({
        public_key: public key here,
        tx_ref: ("KDA_" + Math.floor(Math.random() * 1000000000) + 1),
        amount: document.getElementsByName("order[price]").value,
        currency: "NGN",
        country: "NG",
        payment_options: " ",
        redirect_url: "http://localhost:8000/courses",
        meta: {
          consumer_id: document.getElementsByName('user_id'),
        },
        customer: {
          email: document.getElementsByName("orderUser[email]").value,
          phone_number: document.getElementsByName("orderUser[phone]".value),
          name: document.getElementsByName("orderUSer[name]").value,
        },
        callback: function (data) {
          console.log(data);
        },
        onclose: function() {
          // close modal
        },
        customizations: {
          title: "My store",
          description: "Payment for items in cart",
          logo: "http://localhost:8000/images/KDA%20logo.jpg",
        },
      });
    }
  </script>

1 Answers1

0

All you need to do is to change the name variable to id, because document.getElementByName returns a NodeList, which cannot be cloned.

Adrian Mole
  • 49,934
  • 160
  • 51
  • 83