我很难获得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'],
]
);
答案 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,
]
);