You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Cashier(Stripe) createAsStripeCustomer函数调用报错求助

解决Laravel Cashier v9.0调用createAsStripeCustomer()参数错误的问题

看起来你遇到的问题核心是传递给createAsStripeCustomer()的参数格式不对,而不是单纯的API版本不兼容,咱们一步步来理清楚:

1. 先排查最可能的原因:Android端传递的不是原始Stripe令牌

你提到传入的是Android端生成的$token,但报错里的mCard、mCreated这些字段,明显是Stripe Android SDK里Token对象的内部属性(Java/Kotlin的字段命名风格)——这说明你大概率把整个Token对象序列化(比如转成JSON再转成数组)传过来了,而不是提取出原始的令牌字符串(格式一般是tok_xxxxxxxxx)。

正确的做法是在Android端,从Stripe生成的Token对象里调用getId()方法,拿到纯字符串格式的令牌,再传递给后端。比如Android端代码大概是这样:

Stripe.createToken(card, new TokenCallback() {
    @Override
    public void onSuccess(Token token) {
        String stripeTokenId = token.getId(); // 这才是要传给后端的内容
        // 把stripeTokenId发送到你的Laravel后端
    }

    @Override
    public void onError(Exception error) {
        // 处理错误
    }
});

2. 验证后端接收的参数格式

在调用createAsStripeCustomer()之前,先打印一下你接收到的$token:

dd($token);

如果输出是一个包含mCard、mId等键的数组/对象,那肯定是错的;正确的应该是类似tok_123456789abcdef的字符串。

3. 正确调用createAsStripeCustomer()的方式

当你拿到正确的令牌字符串后,需要把它放到数组的source键里传给方法(Cashier v9的要求):

$user->createAsStripeCustomer([
    'source' => $valid_stripe_token_string
]);

4. 关于API版本兼容性的补充

Laravel Cashier v9.0对应的Stripe API版本是2019-02-19,如果你Android端用的是较新的Stripe SDK(比如支持PaymentMethod API的版本),可能会遇到令牌类型不匹配的问题。不过先解决上面的参数格式问题,如果还是报错,再考虑:

  • 要么在Android端切换回生成传统Token的方式(如果SDK支持的话);
  • 要么考虑升级Cashier版本,但Laravel 5.7最高兼容到Cashier v10,升级前要仔细看官方迁移文档,避免依赖冲突。

先按上面的步骤排查,应该能解决这个参数错误的问题。

内容的提问来源于stack exchange,提问作者Zoka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:08:19