JavaScript和Stripe |支付方式

时间:2019-12-30 18:24:49

标签: javascript python django stripe-payments

我没有使用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

这是我的新代码正在与Stripe对话,我只需要获取呼叫的结果信息

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”的发布对象,其值将是“结果”

我是否想得太多?

1 个答案:

答案 0 :(得分:0)

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

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

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