Stripe создать нового клиента каждый платеж - PullRequest
0 голосов
/ 18 марта 2020

РЕШЕНИЕ: Сохраните в дБ объект Зарядите с помощью идентификатора пользователя и проверяйте каждый раз, знаем ли мы этого пользователя:

 $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 Ответ

1 голос
/ 18 марта 2020

Вы создаете новые Token и Customer для каждого платежа. Вместо этого вы должны каким-либо образом идентифицировать своих существующих клиентов (локально хранить таблицу отношений в своем приложении) (например, по их email_адресу или Token отпечатку карты ). Затем вместо использования новых Token и новых Customer извлеките существующего клиента как $customer, прежде чем начислять (его существующая карта будет использоваться автоматически).

...