我已经看过几个关于这个问题的帖子,但是我无法使用这些建议来克服我的问题。以下是我的代码和结果:
<cffunction name="CreateUser" hint="Create new GSuite user." returntype="struct" access="public">
<cfargument name="token" hint="The Google-provided access token." type="string" required="yes">
<cfargument name="state" hint="The unique anti-forgery string." type="string" required="yes">
<cfargument name="userdata" hint="A json string containing user data" type="string" required="yes">
<cfargument name="api" hint="API Key for the Google Domain" type="string" required="yes">
<cfhttp method="post" charset="utf-8" url="https://www.googleapis.com/admin/directory/v1/users?state=#state#&access_token=#token#" result="uResult">
<cfhttpparam type="header" name="auth" value="Authorization: Bearer #token#">
<cfhttpparam type="header" name="accept" value="Accept: application/json">
<cfhttpparam type="header" name="content" value="Content-type: application/json">
<cfhttpparam type="body" name="body" value=#userdata#>
</cfhttp>
<cfreturn uResult>
</cffunction>
正在使用的JSON字符串是:
{
"password":"Test@me12!",
"primaryEmail":"[email protected]",
"name":
{
"familyName":"Doe",
"givenName":"John"
}
}
我从以下示例中获取HTTP POST结构:Google Users: insert (Directory API)
我从谷歌回来的结果是这样的:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "invalid",
"message": "Invalid Given/Family Name: FamilyName"
}
],
"code": 400,
"message": "Invalid Given/Family Name: FamilyName"
}
}
我无法理解可能出错的地方。在其他帖子中,我已经包含了内容类型。根据Google的示例,我已经包含了accept标头和auth标头。不过,我无法得到不同的结果。
如果我将JSON字符串传递给函数并在上面的Google链接中使用它,我就能够创建用户。但是,如果我通过HTTP POST传递它,我不能。请告诉我那里有一个迷路的逗号或丢失的点。
您的标题“名称”和“值”看起来很像。不要将标题名称放在“value”属性中。这就是“名称”属性的用途:-)
例如,授权和处置标题应为:
<cfhttpparam type="header" name="Content-Type" value="application/json">
<cfhttpparam type="header" name="Authorization" value="Bearer #token#">
此外,“body”参数没有“name”属性,只有“value”:
<cfhttpparam type="body" value="#userdata#">
有关更多详细信息,请参阅cfhttpparam documentation。