如何通过 VJ 中的条纹 Apple 付款?

时间:2021-02-02 11:52:06

标签: vue.js stripe-payments applepay applepayjs payment-request-api

我正在尝试按照此处的指南 ( https://stripe.com/docs/stripe-js/elements/payment-request-button ) 为网络和 Stripe 设置 Apple Pay。域验证和所有预设置等初始步骤已完成,但我在执行付款步骤时遇到问题。

Apple Pay 按钮显示在我的 Safari 浏览器中。单击按钮时,我触发了一个名为 Paymentmethode() 的事件,我在实时检查时遇到此错误。要么您没有将卡保存到您的电子钱包,要么当前域 (pwafe.devco.pk) 未为 Apple 注册支付。访问 https://dashboard.stripe.com/account/apple_pay 以注册此域。 main.js:25。和按钮隐藏 我在第 3 步后迷路了,不知道该怎么做。我正在向我的后端和后端发帖,创建付款意图并返回 client_secret

 paymentMethod() {
      // STEP 1 FROM GUIDE
      var stripe = Stripe("pk_test_YxSI6F4QeV0XCofSgabilbTu00ChOmJWJ0", {
        apiVersion: "2020-08-27",
        stripeAccount: "CONNECTED_STRIPE_ACCOUNT_ID",
      });
      // STEP 2 FROM GUIDE
      var paymentRequest = stripe.paymentRequest({
        country: "US",
        currency: "usd",
        total: {
          label: "Demo total",
          amount: 1099,
        },
        requestPayerName: true,
        requestPayerEmail: true,
      });

      // STEP 3 FROM GUIDE
      var elements = stripe.elements();
      var prButton = elements.create("paymentRequestButton", {
        paymentRequest: paymentRequest,
      });
      // console.log("before api call", paymentRequest);
      paymentRequest.canMakePayment().then(function (result) {
        // console.log("after api called" + result);
        if (result) {
          prButton.mount("#payment-request-button");
        } else {
          //prButton.mount('#payment-request-button');
          document.getElementById("payment-request-button").style.display =
            "none";
        }
      });
      // STEP 4 FROM GUIDE -- THIS RETURNS A CLIENT SECRET
      let clientSecret;
      axios
        .post("https://pwa.devco.pk/api/Create_PaymentIntent", {})
        .then((resp) => {
          // Assign this previously defined variable
          clientSecret = resp.client_secret;
        });
      paymentRequest.on("paymentmethod", function (ev) {
        // Confirm the PaymentIntent without handling potential next actions (yet).
        stripe
          .confirmCardPayment(
            clientSecret,
            {
              payment_method: ev.paymentMethod.id,
            },
            {
              handleActions: false,
            }
          )
          .then(function (confirmResult) {
            if (confirmResult.error) {
              // Report to the browser that the payment failed, prompting it to
              // re-show the payment interface, or show an error message and close
              // the payment interface.
              ev.complete("fail");
            } else {
              // Report to the browser that the confirmation was successful, prompting
              // it to close the browser payment method collection interface.
              ev.complete("success");
              // Check if the PaymentIntent requires any actions and if so let Stripe.js
              // handle the flow. If using an API version older than "2019-02-11" instead
              // instead check for: `paymentIntent.status === "requires_source_action"`.
              if (confirmResult.paymentIntent.status === "requires_action") {
                // Let Stripe.js handle the rest of the payment flow.
                stripe.confirmCardPayment(clientSecret).then(function (result) {
                  if (result.error) {
                    let data = {
                      msg: "An error occurred. Please try again.",
                    };
                    this.handleShowFlashMsg(data);
                    // The payment failed -- ask your customer for a new payment method.
                  } else {
                    this.handleShowOrderConfirmModal();
                    // The payment has succeeded.
                  }
                });
              } else {
                // The payment has succeeded.
              }
            }
          });
      });
      var paymentRequest = stripe.paymentRequest({
        country: "US",
        currency: "usd",
        total: {
          label: "Demo total",
          amount: 1099,
        },
        requestShipping: true,
        // `shippingOptions` is optional at this point:
        shippingOptions: [
          // The first shipping option in this list appears as the default
          // option in the browser payment interface.
          {
            id: "free-shipping",
            label: "Free shipping",
            detail: "Arrives in 5 to 7 days",
            amount: 0,
          },
        ],
      });
      paymentRequest.on("shippingaddresschange", function (ev) {
        if (ev.shippingAddress.country !== "US") {
          ev.updateWith({
            status: "invalid_shipping_address",
          });
        } else {
          // Perform server-side request to fetch shipping options
          fetch("/calculateShipping", {
            data: JSON.stringify({
              shippingAddress: ev.shippingAddress,
            }),
          })
            .then(function (response) {
              return response.json();
            })
            .then(function (result) {
              ev.updateWith({
                status: "success",
                shippingOptions: result.supportedShippingOptions,
              });
            });
        }
      });

      var stripe = Stripe("pk_test_YxSI6F4QeV0XCofSgabilbTu00ChOmJWJ0", {
        apiVersion: "2020-08-27",
        stripeAccount: "CONNECTED_STRIPE_ACCOUNT_ID",
      });
    },

1 个答案:

答案 0 :(得分:0)

您应该验证域注册并将卡添加到 wallet.tha