当前位置: 首页 > 知识库问答 >
问题:

stripe paymentIntent api | stripe仪表板上的支付不完整

邬宏扬
2023-03-14

我正在从Changes API迁移到PaymentIntent API。我成功地安装了代码。

但我很惊讶地看到,每次我加载页面条带时,都会在条带dashboad上创建一个显示“未完成”付款状态的付款意图,点击带有所有详细信息的付款按钮后,该状态变为“成功”状态。

PHP代码

 $customer = \Stripe\Customer::create(array(
                'email' => $_SESSION['userEmail']
            ));
    $intent = \Stripe\PaymentIntent::create([
    'amount' => $varTotalPrice,
    'currency' => 'eur',
    'customer' => $customer->id,
    'payment_method_types' => ['card'],
    'description' => $arrCreditResult['creditTitle']
    ]);

正如您所知,这为我提供了在js脚本中使用的客户机_密钥。

JS代码

<script type="text/javascript">
            var stripe = Stripe('<?php echo $pubkey; ?>');
            var elements = stripe.elements();
            var payBtnHtml = document.getElementById("submit").innerHTML;
            var card = elements.create('card', {
                style: {
                    base: {
                        iconColor: '#666EE8',
                        color: '#31325F',
                        lineHeight: '40px',
                        fontWeight: 600,
                        fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
                        fontSize: '15px',
                        '::placeholder': {
                            color: '#31325F',
                            fontWeight:300,
                            fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
                            fontSize: '15px'
                        }
                    }
                }
            });
            card.mount('#card-element');
            
            var cardholderName = document.querySelector('input[name=cardholder-name]');            
            var form = document.getElementById('payment-form');
            var clientSecret = document.getElementById('payment-form').getAttribute("data-secret");

            card.on('change', function(event) {
                var displayError = document.getElementById('card-errors');
                if (event.error) {
                    displayError.textContent = event.error.message;
                } else {
                    displayError.textContent = '';
                }
            });
                       
            var form = document.getElementById('payment-form');
            
            form.addEventListener('submit', function(ev) {
                ev.preventDefault();
                document.getElementById("submit").disabled = true;
                document.getElementById("submit").innerHTML = WAIT;
                stripe.confirmCardPayment(clientSecret, {
                    payment_method: {
                        card: card,
                        billing_details: {
                            name: cardholderName.value
                        }
                    }
                }).then(function(result) {
                    if (result.error) {
                        // Show error to your customer (e.g., insufficient funds)
                        document.getElementById("submit").disabled = false;
                        console.log(result.error.message);
                    } else {
                        // The payment has been processed!
                        if (result.paymentIntent.status === 'succeeded') {
                            document.getElementById("submit").disabled = false;
                            document.getElementById("payBtn").innerHTML=payBtnHtml
                            alert("paymemt done");
                            debug(result);
                            return false;
                            // Show a success message to your customer
                            // There's a risk of the customer closing the window before callback
                            // execution. Set up a webhook or plugin to listen for the
                            // payment_intent.succeeded event that handles any business critical
                            // post-payment actions.
                        }
                    }
                });
            });


        </script>

我只想在用户点击支付按钮时创建条带支付。与收费API相同。

共有2个答案

淳于乐池
2023-03-14

特别感谢您的建议@Justin inMichael

经过一点点努力,我在这里找到了一个可行的解决方案:-

https://github.com/stripe-samples/accept-a-card-payment

在这里我使用方法“无webhooks”:-

https://github.com/stripe-samples/accept-a-card-payment/tree/master/without-webhooks/server/php

这很容易实现,只需稍作修改。

>

  • 更改条带键。

    如果您要重命名文件夹,请检查stripe.js中的文件路径。这里他们使用获取(“stripe-key.php”)来获取密钥和其他东西

    根据要求对pay.php文件进行更改。

    您可能需要一些更有用的链接:-

    1. https://stripe.com/docs/js/appendix/supported_locales
    2. https://stripe.com/docs/api/errors/handling
    3. https://stripe.com/docs/api/metadata

  • 慕承恩
    2023-03-14

    您可以重构代码,仅在需要时创建支付意图。步骤如下:

    1. 每次加载页面时停止创建支付意图,并删除数据机密属性
    2. 在您的服务器上创建一个URL,该URL将创建一个按需支付意图,并返回其客户机机密(通常会以JSON格式返回此信息)
    3. 在JavaScript中,当客户按下pay按钮时,获取创建支付意图的URL。在响应中使用客户机密,而不是数据机密的值来完成支付
     类似资料:
    • 但是,这些文档不是用于stripe Connect的。他们是为定期条纹支付。 我的代码与文档相同,只是我的paymentIntents是在连接的帐户上创建的,因为我希望收费在连接的帐户上。 这会给我抛出错误,这是有意义的,因为客户是在平台帐户上设置的。 我想把客户和付款方式保存到我的平台账户,然后在连接的账户上收费。 有没有一种类似于文档的好方法,或者我必须做一个类似的工作--代码保存客户和支付方

    • 有人能告诉我Stripe CLI应用程序的语法吗 只有代表另一个帐户(使用OAuth密钥、条带帐户头或目标参数)提出请求时,才能申请费用 我无法破译目标参数语法,例如 条带支付计划创建--金额2000--申请费金额500--客户客户测试用户--货币=欧元--支付方式pm_卡_visa--确认=真-d转账_数据[]=账户测试用户

    • 使用iOS SDK for Stripe,我们可以执行以下操作吗 创建客户配置文件,其中客户id可以发送并存储到后端 向客户配置文件添加、编辑、删除信用卡 卡可以从后端自动计费

    • 所以这是我第一次使用Stripe,我想做的就是这个。为了测试的目的,我为它创建了一个后端。但我遇到了一个问题,当我单击pay按钮时,控制台。是什么导致了这个错误? server.js stripe.js 付款单 条形容器

    • 我正在使用PHP条纹付款表单来收集付款。付款似乎正在通过OK,并在成功完成后将用户带到确认页面。我处于测试模式,能够看到在仪表板的“付款”部分显示的付款。但是,当我单击仪表板的“主页”部分时,我在“总量”选项卡下看不到它们。我的代码没有创建错误日志。此外,条纹仪表板也没有显示错误。付款通常需要一段时间才能显示在仪表板上(即使在测试模式下)吗?或者还有别的什么? 下面是我在研究互联网后尝试过的——清

    • 本文向大家介绍Paypal支付不完全指北,包括了Paypal支付不完全指北的使用技巧和注意事项,需要的朋友参考一下 啥都不说,先吐槽 Paypal 真心坑爹,跟国内支付完全没法比,能不接入就不接入吧!!! 准备工作 重要事情 Paypal下单支付后,需要主动跟paypal确认收款(capture),否则该笔订单并不是完成状态!!! 账号 自己前往Paypal develop注册一个吧,注意区分沙箱