条纹每次付款都会创建新客户

时间:2020-03-18 13:07:11

标签: stripe-payments

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

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

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

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

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

        }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,
                ),
            ]);
        }

1 个答案:

答案 0 :(得分:1)

您正在为每次付款创建新的TokenCustomer。您应该以某种方式(例如,通过其email_addressToken的{​​{3}})来标识现有客户(在应用程序本地存储关系表)。然后,不使用新的Token和新的Customer,而是在收费之前以$customer的身份获取现有客户(他们的现有卡将自动使用)。