经过一天的努力,为什么会失败:
client->refresh($refresh_token);
(500错误),我发现刷新令牌有一个转义正斜杠:
"refresh_token":"1\/QnN3mTn_HPCaRwfpiCl11L0cT9u6z9ELb5URT4D_d6M",
删除反斜杠修复了问题。这是php或Google Apps API的问题吗?
上面的刷新令牌是从我的php脚本返回的:
echo $client->getAccessToken();
答案 0 :(得分:1)
似乎您的代码或库代码决定在脚本执行期间的某个时刻转义令牌(可能通过addslashes()
)。这本身并不是php的问题,而是一个实现问题。
<强>更新强>
它看起来像是在结果上调用json_encode()
,默认情况下它会转义斜杠。根据另一个SO答案(Why is json_encode adding backslashes?),这样做是为了避免在HTML中嵌入JSON时出现问题。
现在,前面提到的答案还提到“/ /”和“/”应该被JSON解析器视为等效,所以我很遗憾不确定为什么Google Apps会在这种情况下决定用500打你。
总之,你可以这么说
a)“PHP的json_decode()
设计工作方式存在问题。默认情况下不应返回转义斜杠。”
b)“这是Google Apps API服务的一个问题。它应该将”\ /“和”/“视为JSON数据中的等效项。”
c)“这是针对PHP的Google Apps API库的问题。鉴于我发送refresh()
getRefreshToken()
返回的相同,未更改的数据,它应该执行必要的突变使数据对API调用有效的数据。“
不幸的是,这进入了意见领域,所以我将把它留在那里。