Stripe API如何更新客户电子邮件?

时间:2019-04-15 21:15:32

标签: php stripe-payments

我很难获得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"
  }
}

有什么想法或建议吗?


这是每个Marcin的php代码的样子吗?显然我是个菜鸟。

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 个答案:

答案 0 :(得分:1)

错误消息在这里很容易解释。您传递JSON对象,然后将其转换为{:"0"=>"myemail@mydomain.com"}的字符串。这不是有效的电子邮件语法,因此您会看到错误。您只需要单独传递电子邮件地址即可:

  "email": "myemail@mydomain.com"

确切地像documented

  

通过电子邮件发送

     

客户的电子邮件地址。显示在客户旁边   您的信息中心,对于搜索和跟踪很有用。这可能   最多512个字符。可以通过将值更新为来取消设置   null,然后保存。

答案 1 :(得分:0)

这是有效的方法:

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

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