gpt4 book ai didi

gatsby - 将优惠券添加到 Stripe Checkout 或 allow_promotion_codes : true on redirectToCheckout

转载 作者:行者123 更新时间:2023-12-04 01:14:16 24 4
gpt4 key购买 nike

随着 super 光滑的更新 Stripe Checkout我一直在研究如何在结帐过程中添加优惠券输入。
我知道我可以设置 allow_promotion_codes: trueSession object ...但是已经关注了 Gatsby implementation我正在使用 redirectToCheckout不会接受这些参数的方法。
你知道一种创建新 session 并将其传递给 redirectToCheckout 的方法吗?方法?
我已经看了很长时间,在网上找不到任何东西来完成工作+鉴于我的浅薄理解/上述内容,这听起来很愚蠢......感觉就像我应该能够做的事情。

最佳答案

TL; 博士;您可以在 Stripe 结账时允许使用优惠券代码,您目前必须通过后端创建 session 来实现这一点,但这非常简单,只需要几行 JS 和后端代码。
为此,它需要:

  • JS 到 AJAX 调用后端以获取带有 allow_promotion_codes: true 的 sessionID
  • JS 至 redirectToCheckout()一旦从后端获得 sessionID

  • (而不是直接在 JS 中使用 redirectToCheckout() 的默认设置。)
    这是一个使用 Javascript 和 PHP 的示例:
    前端(Javascript):
    (请务必更改“您的 STRIPE 产品 ID”和“您的 AJAX 端点”值,并使用您的 Stripe key 启动 https://js.stripe.com/v3)。
        // bind the button
    document.getElementById('checkout-button').addEventListener('click', function (e) {

    // stop any normal action (if a link)
    e.preventDefault();

    // retrieve a session ID
    ajax_checkoutsession('YOUR STRIPE PRODUCT ID',function (response) {

    // got errors?
    if (typeof response.checkoutSessionId == undefined){

    // could fallback to sending with redirectToCheckout directly
    // otherwise, backend error

    }

    stripe.redirectToCheckout({
    sessionId: response.checkoutSessionId,
    })
    .then(function (result) {


    // if error
    if (result.error) {

    // If `redirectToCheckout` fails due to a browser or network
    // error, display the localized error message to your customer.
    // deal with error

    }

    })
    .catch(function (err) {

    // deal with non-network Stripe error

    });

    },function(err){

    // deal with AJAX error

    });

    }


    function ajax_checkoutsession(plan,cb,errcb){

    var data = {
    'action': 'retrieve_checkout_session',
    'plan': plan
    };

    jQuery.ajax({
    type: "POST",
    url: 'YOUR AJAX ENDPOINT',
    "data": data,
    dataType: 'json',
    timeout: 20000,
    success: function(response) {

    // callback
    if (typeof cb == "function") cb(response);

    return response;

    },
    error: function(response){

    // callback
    if (typeof errcb == "function") errcb(response);

    }

    });

    }
    然后后端 php 非常简单...(需要 Stripe 库、您的 Stripe key 和您的成功/取消 URL):
    // load vendor files
    require(dirname( __FILE__ ) . '/vendor/autoload.php');

    // setup Stripe
    \Stripe\Stripe::setApiKey('YOUR STRIPE SECRET KEY');

    // retrieve plan / product
    $plan = 'defaultplan'; if (isset($_POST['plan'])) $plan = sanitize_text_field( $_POST['plan'] );

    // build any line items (for now, simply one)
    $line_items = [[
    'price' => $plan,
    'quantity' => 1
    ]];

    // Sign customer up for subscription
    // Note we could use: `client_reference_id`, `customer`, or `customer_email` for returning customers
    $checkout_session = \Stripe\Checkout\Session::create([
    'success_url' => 'https://yoursite.com/success?session_id={CHECKOUT_SESSION_ID}',
    'cancel_url' => 'https://yoursite.com/cancelled',
    'payment_method_types' => ['card'],
    'mode' => 'subscription',
    'allow_promotion_codes' => true,
    'line_items' => $line_items
    ]);

    echo json_encode(['checkoutSessionId' => $checkout_session['id']]);
    exit();
    注意事项:
  • 如果由于某种原因您的 AJAX sessionID 生成中断,您的结帐将无法工作。 (您可以通过回退到原始 redirectToCheckout() 调用来解决此问题。
  • 上面的例子今天 100% 适用于订阅,(需要适应其他支付方式)

  • 有用链接:
  • Stripe backend allow_promotion_codes attribute
  • Stripe example repository which uses an approach much like this to add coupons to Stripe checkout
  • 关于gatsby - 将优惠券添加到 Stripe Checkout 或 allow_promotion_codes : true on redirectToCheckout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63859411/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com