使用 Stripe API,我尝试首先通过订阅,然后通过客户资料来检索客户的默认付款方式。像这样:
try {
$subscription = \Stripe\Subscription::retrieve($subscriptionId);
$defaultPaymentMethodId = $subscription->default_payment_method;
if (empty($defaultPaymentMethodId)) {
$customer = \Stripe\Customer::retrieve($customerId);
$defaultPaymentMethodId = $customer->invoice_settings->default_payment_method;
}
if (!empty($defaultPaymentMethodId)) {
$paymentMethod = \Stripe\PaymentMethod::retrieve($defaultPaymentMethodId);
$last4 = $paymentMethod->card->last4;
$exp_year = $paymentMethod->card->exp_year;
$exp_month = sprintf("%02d", $paymentMethod->card->exp_month);
$brand = ucwords($paymentMethod->card->brand);
$has_payment_method = true; // Set to true if a payment method is found
} else {
$last4 = $exp_year = $exp_month = $brand = null; // Set these to null to avoid potential issues
}
} catch (Exception $e) {
logError('Stripe API error trying to get payment method details: ' . $e->getMessage());
}
在这两种情况下,我都得到“空”结果,尽管我可以在 Stripe 仪表板中看到客户实际上设置了默认付款方式:(我只接受银行卡,因此它必须是卡)
我已经尝试过各种故障排除方法。 API对于其他工作来说工作得很好,我可以检索客户的所有其他信息,只是不是默认的付款方式。
还有什么想法我还可以尝试吗?
如果您在仪表板中的付款方式上看到
default
标签,则该付款方式可以存储在两个位置:
invoice_settings.default_payment_method
default_source
中的 Customer 对象上(用于某些旧集成)所以一定要检查这两个地方。