Stripe payments 在每次付款时创建一个新客户

Stripe payments 在每次付款时创建一个新客户,stripe-payments,Stripe Payments,解决方案:将带有用户id的对象费用存储在db中,并每次检查我们是否认识该用户: $customerAlreadyKnown = OrdersModel::checkIfUserKnown($email); 如果我们知道,那么我们必须更新客户来源(不知道为什么): 否则,我们将创建一个新客户 }else{ // Add customer to stripe $customer = \Stripe\Customer::create(

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

 $customerAlreadyKnown = OrdersModel::checkIfUserKnown($email);
如果我们知道,那么我们必须更新客户来源(不知道为什么):

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

        }else{
            // Add customer to stripe
            $customer = \Stripe\Customer::create(array(
                'email' => $email,
                'card' => $token,
            ));

            $charge = \Stripe\Charge::create([
                'customer' => $customer->id,
                'amount' => $itemPrice,
                'currency' => 'eur',
                'description' => $_POST['description'],
                'metadata' => array(
                    'order_id' => $orderID,
                ),
            ]);
        }

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

那么,您认为
客户::创建
会做什么呢?在创建一个现有客户之前,您需要先搜索现有客户,然后在
Charge::create
调用中使用它。是的,但我在那里找不到如何操作的文档。。。它们有一个\Stripe\Customer::retrieve('cus_GvtXe1bYKwCBk2');但我不知道如何获得身份证;请特别注意
email
参数。啊,我不想存储客户id,它在charge对象中,因此我可以存储它,然后使用\Stripe\customer::retrieve('cus_GvtXe1bYKwCBk2')确定,但现在我有一个错误“customer cusu gvctjg4i1vdic没有id为tok_1Go3s8f0s5Mejamxe8njsw的链接源”
        }else{
            // Add customer to stripe
            $customer = \Stripe\Customer::create(array(
                'email' => $email,
                'card' => $token,
            ));

            $charge = \Stripe\Charge::create([
                'customer' => $customer->id,
                'amount' => $itemPrice,
                'currency' => 'eur',
                'description' => $_POST['description'],
                'metadata' => array(
                    'order_id' => $orderID,
                ),
            ]);
        }