Stripe每次付款都会创建一个新客户



解决方案:将带有用户id的对象Charge存储在数据库中,每次检查我们是否认识该用户:

$customerAlreadyKnown = OrdersModel::checkIfUserKnown($email);

如果我们知道,那么我们必须更新客户来源(不知道为什么(:

if(gettype($customerAlreadyKnown)=='array'){
StripeCustomer::update(
$customerAlreadyKnown[0]['user_id'],
['source' => $token]
);
$charge = StripeCharge::create([
'customer' => $customerAlreadyKnown[0]['user_id'],
'amount' => $itemPrice,
'currency' => 'eur',
'description' => $_POST['description'],
'metadata' => array(
'order_id' => $orderID,
),
]);

否则,我们将创建一个新客户

}else{
// Add customer to stripe
$customer = StripeCustomer::create(array(
'email' => $email,
'card' => $token,
));
$charge = StripeCharge::create([
'customer' => $customer->id,
'amount' => $itemPrice,
'currency' => 'eur',
'description' => $_POST['description'],
'metadata' => array(
'order_id' => $orderID,
),
]);
}

您正在为每次付款创建一个新的TokenCustomer。相反,您应该以某种方式(例如通过他们的电子邮件地址或Token的卡指纹(识别现有客户(在应用程序上本地存储关系表(。然后,不要使用新的Token和新的Customer,而是在收费前将现有客户检索为$customer(他们现有的卡将自动使用(。

相关内容

最新更新