Laravel集成Stripe处理Apple Pay令牌时提示Invalid token id,如何解决?
解决Apple Pay令牌在Stripe PaymentIntent中报错「Invalid token id」的问题
问题核心原因
Google Pay返回的是Stripe直接兼容的标准令牌(如tok_xxx格式),但Apple Pay返回的是EC_v1格式的加密支付令牌,它包含data、header、version三个核心部分,仅传递token.data无法被Stripe识别,因此触发「Invalid token id」错误。
解决方案步骤
1. 前端调整:传递完整的Apple Pay令牌
不要再单独发送token.data,而是将整个token对象(包含data、header、version的JSON结构)转换为字符串后发送给后端。
Flutter端示例代码:
// 假设拿到的Apple Pay响应为paymentResult var applePayToken = paymentResult['token']; // 将完整token对象转为JSON字符串发送 var requestData = { 'amount': 100, 'currency': 'usd', 'apple_pay_token': jsonEncode(applePayToken), }; // 发送requestData到后端接口
2. 后端Laravel代码修改
接收完整的Apple Pay令牌字符串,直接传入payment_method_data.card.token字段:
$intent = PaymentIntent::create([ 'amount' => $data['amount'] * 100, // 转换为分单位 'currency' => $data['currency'], 'payment_method_types' => ['card'], 'payment_method_data' => [ 'type' => 'card', 'card' => [ 'token' => $data['apple_pay_token'], // 传入完整的Apple Pay令牌JSON字符串 ] ], ]);
额外检查项
- 确认Stripe账号已开启Apple Pay功能,并完成商户ID、支付证书的配置。
- 确保前端传递的令牌字符串格式完整,无截断或转义错误。
内容的提问来源于stack exchange,提问作者ProIEZRush
相关产品推荐
相关产品推荐

