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

Laravel出纳-“此客户没有附加的付款来源或默认付款方式。”

童子明
2023-03-14

我使用的是Laravel5.8版和出纳10.7版。1.

我想开始并收取用户注册时的每月订阅费。

所以我写进了RegisterController。php

public function register(Request $request)
    {
        $this->validator($request->all())->validate();


        DB::beginTransaction();

        event(new Registered($user = $this->create($request->all())));
        
        try {
            $newSubscription = $user->newSubscription('Standard Plan', 'price_1HJmedAuGtYRVrPxN9PNSPKi')->create($request->payment_method, ['email' => $user->email]);
        } catch ( IncompletePayment $exception ){
            DB::rollback();
            return redirect()->back()->with(['error_message' => $exception->getMessage()]);
        }

        DB::commit();

        $this->guard()->login($user);

        return $this->registered($request, $user)
                        ?: redirect($this->redirectPath());
    }

此外,我还将其添加到注册表中。刀身php文件:

<div class="flex flex-wrap mb-6">
                            <label for="card-element" class="block text-gray-700 text-sm font-bold mb-2">
                                Credit Card Info
                            </label>
                            <div id="card-element" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline"></div>
                            <div id="card-errors" class="text-red-400 text-bold mt-2 text-sm font-medium"></div>
                        </div>

以及:

<script src="https://js.stripe.com/v3/"></script>

    <script>
        const stripe = Stripe('pk_test_somekeysomekeyasdasd');
        console.log(stripe);
        const elements = stripe.elements();
        const cardElement = elements.create('card');
        cardElement.mount('#card-element');
        const cardHolderName = document.getElementById('name');
        const cardButton = document.getElementById('card-button');
        const clientSecret = cardButton.dataset.secret;
        let validCard = false;
        const cardError = document.getElementById('card-errors');
        cardElement.addEventListener('change', function(event) {
            
            if (event.error) {
                validCard = false;
                cardError.textContent = event.error.message;
            } else {
                validCard = true;
                cardError.textContent = '';
            }
        });
        var form = document.getElementById('signup-form');
        form.addEventListener('submit', async (e) => {
            event.preventDefault();
            const { paymentMethod, error } = await stripe.createPaymentMethod(
                'card', cardElement, {
                    billing_details: { name: cardHolderName.value }
                }
            );
            if (error) {
                // Display "error.message" to the user...
                console.log(error);
            } else {
                // The card has been verified successfully...
                var hiddenInput = document.createElement('input');
                hiddenInput.setAttribute('type', 'hidden');
                hiddenInput.setAttribute('name', 'payment_method');
                hiddenInput.setAttribute('value', paymentMethod.id);
                form.appendChild(hiddenInput);
                // Submit the form
                form.submit();
            }
        });
    
    </script>

Stripe\Exception\InvalidRequestException此客户没有附加的付款来源或默认付款方式。

有什么问题?我怎么能修好它?

共有1个答案

曾骁
2023-03-14

创建付款方式后,需要将其附加到客户:

$stripe->paymentMethods->attach(
  'pm_123',
  ['customer' => 'cus_abc']
);
 类似资料:
  • 我在laravel收银台遇到了一个问题,当我订阅一个产品时,取消订阅,然后再次订阅,它会创建一个新的付款方式(相同),并将其作为默认方式。但是为什么要将同一张卡存储两次呢?如果我取消并再次订阅,我会收到三次付款卡。如何检查付款方式是否已经存在? 非常感谢。 这是我的订阅: 以下是我的javascript:

  • 我在Stripe中创建了一个带有客户/信用卡的POC,我在Stripe中登录了我的仪表板,并且能够看到该客户有一个正确关联的默认来源(我添加的测试信用卡)。它显示这张卡是默认来源。 当我运行这个。网络代码: 为了得到该客户,它会正确地返回除其来源之外的所有内容。我希望能从中找到它的所有字段都是空的!我想知道他的默认付款来源,这样我就可以在前端显示它,并用一个小图标表示它是默认的。 DefaultS

  • 我有一个Squarespace应用程序,可以为客户收取费用,但Squarespare不创建客户对象,它只存储费用。 我的目标:当用户进行购买时,创建一个附加了订阅计划的Customer对象,以便我们可以对卡进行重复收费。 我可以通过条带测试API提取费用列表,并且每个费用都有一个包含卡令牌。因此,根据我的理解,我应该能够创建一个客户并传入源或源ID,它将向该客户添加源。 我的代码如下: 我在条纹沙

  • 使用此方法确认付款意图时,我收到以下错误

  • 在Java中,我如何判断 Stripe 中的卡是否是默认支付选项?例如: 或者,我可以查询默认付款来源吗? 我问这个问题的原因是因为我想向客户显示一张卡的最后4位数字,以向他们显示他们当前默认的支付选项。但如果有多张卡,我怎么知道?

  • 使用 Stripe 订阅 API,将发出,但它不包含对用于该付款的卡/源的引用。我知道附加到客户的默认源用于订阅发票上的付款,但如果默认源在发票支付和通过 webhook 接收事件之间的时间发生变化,则在我通过 webhook 接收事件时查找默认源将不是确定使用哪个付款源支付该发票的可靠方法。如何获取用于支付发票的来源?如果很重要,这是必要的,以便对成功付款进行与税收相关的操作,因此了解使用了哪张