【问题标题】:JavaScript & Stripe | PaymentMethodsJavaScript 和条纹 |支付方式
【发布时间】:2020-04-19 11:02:17
【问题描述】:

我没有使用 Javascript 的经验,我一直致力于与 Stripe 的集成。我慢慢能够了解他们的代码是如何工作的,但需要有关如何将结果与表单一起发回以进入我的下一个函数的建议。

这里是可以工作的旧代码,并为单次付款发回“令牌”:

var purchaseButton = document.getElementById('purchase-button');
            purchaseButton.classList.add('is-loading');
            stripe.createToken(card).then(function (result) {
                if (result.error) {
                    // Inform the customer that there was an error.
                    var errorElement = document.getElementById('card-errors');
                    errorElement.textContent = result.error.message;
                    purchaseButton.classList.remove('is-loading');
                } else {
                    // Send the token to your server.
                    stripeTokenHandler(result.token);
                }
            });
        }
    });
    function stripeTokenHandler(token) {
        // Insert the token ID into the form so it gets submitted to the server
        var form = document.getElementById('payment-form');
        var hiddenInput = document.createElement('input');
        hiddenInput.setAttribute('type', 'hidden');
        hiddenInput.setAttribute('name', 'stripeToken');
        hiddenInput.setAttribute('value', token.id);
        form.appendChild(hiddenInput);
        // Submit the form
        form.submit();
    }

这在帖子中返回了“stripetoken”,我想使用下面的新代码并获得相同的效果,但检索此处描述的 result.paymentMethod:https://stripe.com/docs/js/payment_intents/create_payment_method

这是我与条带通信的新代码,我只需要获取调用的结果信息

var purchaseButton = document.getElementById('purchase-button');
            purchaseButton.classList.add('is-loading');
            stripe.createPaymentMethod({
            type: 'card',
            card: card,
            })
            .then(function (result) {
                if (result.error) {
                    // Inform the customer that there was an error.
                    var errorElement = document.getElementById('card-errors');
                    errorElement.textContent = result.error.message;
                    purchaseButton.classList.remove('is-loading');
                } else {
                    // Send the token to your server.
                     paymentmethod(result.token);
                }
            });
        }
    });
    function paymentmethod(token) {
        // Insert the token ID into the form so it gets submitted to the server
        var form = document.getElementById('payment-form');
        var hiddenInput = document.createElement('input');
        hiddenInput.setAttribute('type', 'hidden');
        hiddenInput.setAttribute('name', 'paymentmethod');
        hiddenInput.setAttribute('value', token.paymentMethod);
        form.appendChild(hiddenInput);
        // Submit the form
        form.submit();
    }

这是我理解 JS 的基本方法。我在想这段代码会返回一个名为“paymentmethod”的帖子对象,其值将是“结果”

我是不是想多了?

【问题讨论】:

    标签: javascript python django stripe-payments


    【解决方案1】:

    您的代码就在这里!如果您要创建付款方式而不是令牌,则在您的承诺中,您可以使用result.paymentMethod 而不是result.token 获得付款方式。在您的paymentmethod 函数中,您需要附加付款方式的 ID (pm_xxxyyyyzzz),假设您调用传递给此函数的变量token,请尝试token.id

    在调试 javascript 时,我始终建议使用您的 browser console 并使用 console.log 语句将对象打印到控制台(例如 console.log(result); 以了解此对象的结构)。

    除此之外,您还可以查看 Stripe 的 documentationsamples,了解这些新支付流程的最佳做法。虽然您仍然可以使用上述支付方式收集卡片详细信息,但 Stripe 的新流程可能会简化事情,并且更适合处理需要 3D 安全身份验证的卡片等条件。

    【讨论】:

    • 太棒了!我进行了这些更改,现在我得到了一个从 paymentmethod 返回的对象,但该值未定义。所以,我猜这意味着我没有具体说明什么条纹发回给我。我将使用您向我展示的控制台语句。感谢您的帮助!
    猜你喜欢
    • 2017-09-14
    • 2021-03-05
    • 1970-01-01
    • 2021-08-02
    • 2020-12-30
    • 2021-07-02
    • 1970-01-01
    • 2021-11-19
    • 2021-10-08
    相关资源
    最近更新 更多