Как Stripe API обновляет электронную почту клиента? - PullRequest
0 голосов
/ 16 апреля 2019

У меня проблемы с получением Stripe API для обновления электронной почты клиента.Когда пользователь входит в систему, появляется форма для обновления его адреса электронной почты.Адрес электронной почты обновляется в моей таблице базы данных, но я не могу заставить Stripe API обновить клиента.

Вот код, который я использую:

if (isset($customerid)) {
        try {
            $cu = \Stripe\Customer::update(
                $customer_id,
                [
                    'email' => $_SESSION['email'],
                ]
            );

            $output = "<p>Success!</p>";
        } catch (\Stripe\Error\Card $e) {

            // Use the variable $error to save any errors
            // To be displayed to the customer later in the page
            $body = $e->getJsonBody();
            $err = $body['error'];
            $error = $err['message'];

            $output = "Error: $error";
        }
        // Add additional error handling here as needed
    }

$ customerid получен из моегобазы данных, и подпрограмма ошибки вставлена ​​из кода обновления моей карты.

Вот тело запроса POST из журналов:

{
  "email": {
    "0": "myemail@mydomain.com"
  }
}

Я получаю фатальную ошибку при запуске сценария:

Fatal error: Uncaught Stripe\Error\InvalidRequest: Invalid string: {:"0"=>"myemail@mydomain.com"}

и следующее из журналов:

{
  "error": {
    "message": "Invalid string: {:"0"=>"myemail@mydomain.com"}",
    "param": "email",
    "type": "invalid_request_error"
  }
}

Любые идеи или предложения?


Так должен выглядеть php-код для Marcin?Очевидно, я в значительной степени новичок.

if (isset($customerid)) {
        try {
            $cu = \Stripe\Customer::update(
                $customer_id,
                [
                    "email": "myemail@mydomain.com",
                ]
            );

            $output = "<p>Success!</p>";
        } catch (\Stripe\Error\Card $e) {

            // Use the variable $error to save any errors
            // To be displayed to the customer later in the page
            $body = $e->getJsonBody();
            $err = $body['error'];
            $error = $err['message'];

            $output = "Error: $error";
        }
        // Add additional error handling here as needed
    }

Сначала я сделал это из справочника по API, и я попытался подражать их примеру:

\Stripe\Stripe::setApiKey("sk_test_xxxxxxxxxxxxxxxxxxx");

\Stripe\Customer::update(
  'cus_ElRYM0KexefrGt',
  [
    'metadata' => ['order_id' => '6735'],
  ]
);

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Сообщение об ошибке довольно понятно.Вы передаете объект JSON, который затем преобразуется в строку как {:"0"=>"myemail@mydomain.com"}.Это неверный синтаксис электронной почты, поэтому вы видите ошибку.Вы просто должны передать только один адрес электронной почты:

  "email": "myemail@mydomain.com"

точно так же, как задокументировано :

необязательно

адрес электронной почты клиента.Он отображается рядом с клиентом в вашей информационной панели и может быть полезен для поиска и отслеживания.Это может быть до 512 символов.Это можно сбросить, обновив значение до нуля, а затем сохранив.

0 голосов
/ 16 апреля 2019

Вот что сработало:

\Stripe\Stripe::setApiKey("sk_test_xxxxxxxxxxxxxxxxxxx");

    \Stripe\Customer::update(
        $sc_customer_id,
        [
            'email' => $newemail,
        ]
    );
...