vue.js - TypeError : stripe. redirectToCheckout 不是 nuxt.js 中的函数

标签 vue.js stripe-payments nuxt.js

我正在尝试集成 strip 支付网关。我有一个用于前端的 nuxt.js 和用于后端的 adonis.js。

我从前端调用 api 到后端以创建 checkoutSession 并返回 sessionID。我能够创建 checkoutSession 并返回 sessionID 并且在 api 响应中我调用 stripe.redirectToCheckout 但它不是重定向而是给出错误,因为 stripe.redirectToCheckout 不是一个函数。如何将用户重定向到结帐页面?

我也安装了 stripe-js 文件。

import { loadStripe } from '@stripe/stripe-js'
const stripe = loadStripe(process.env.STRIPE_PK)

<button class="btn btn-primary btn-block text-center rounded" @click="checkout()">Buy</button>

import { loadStripe } from '@stripe/stripe-js'
const stripe = loadStripe(process.env.STRIPE_PK)

export default {
    methods: {
        checkout() {
            let params = {
                payment_method_types: ['card'],
                line_items: [
                  {
                    name: 'Buy Now',
                    images: ['image.jpg'],
                    amount: 100 + '00',
                    currency: 'usd',
                    quantity: 1,
                  },
                ],
                mode: 'payment',
                success_url: `${process.env.URL}/success`,
                cancel_url: window.location.href,
            }
            axios
                .post(`${process.env.API_BASE_URL}/stripe/session`, params, {
                    'Content-type': 'application/json',
                    Accept: 'application/json',
                })
                .then((response) => {
                    this.stripeSession = response.data.data
                    stripe.redirectToCheckout({sessionId: this.stripeSession})
                })
                .catch((e) => {
                    console.log(e)
                })
        }
    },
}
</script>

最佳答案

根据 tyhe doc,loadStripe 是一个异步函数,尝试在 stripe 分配中添加 await:

const stripe = await loadStripe(process.env.STRIPE_PK)

编辑: 要摆脱 Module parse failed: Cannot use keyword 'await' outside an async function 错误,您只需要在函数声明之前添加异步:

async function myAsyncFunction() {
  const test = await myPromise();
}

因为我没有你的函数的完整定义,所以我不能在你的代码中向你展示它:-(

但是一个奇怪的解决方案(混合“等待”和“然后”)是:

import { loadStripe } from '@stripe/stripe-js';

axios
  .post(`${process.env.API_BASE_URL}/stripe/session`, params, {
    'Content-type': 'application/json',
    Accept: 'application/json',
  })
  .then(async response => {
    this.stripeSession = response.data.data;
    const stripe = await loadStripe(process.env.STRIPE_PK);
    stripe.redirectToCheckout({ sessionId: this.stripeSession });
  })
  .catch(e => {
    console.log(e);
  });

关于vue.js - TypeError : stripe. redirectToCheckout 不是 nuxt.js 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65774179/

相关文章:

stripe-payments - LIVE 模式下的 strip 测试

php - Stripe - 手动支付

nuxt.js - 在 Nuxt 2.13 中使用 privateRuntimeConfig

javascript - 在 Nuxt.Js 中为 document.title 添加一个观察者

javascript - 默认情况下选中复选框

javascript - HTTP 请求的 .then 子句中出现 CORS 错误

javascript - 无法在 Axios 调用之外获取值

node.js - 使用 Stripe Firebase 扩展 Webhook 未触发运行订阅付款

vue.js - Nuxt await async + vuex

javascript - vue 文件未捕获引用错误 : Vue is not defined in .