【发布时间】:2019-04-09 04:47:18
【问题描述】:
我正在尝试使用 Node Adwords NPM 包将 Adwords 帐户链接到 MCC 帐户
- 我对两个帐户都有经理/管理员访问权限(不是同一个电子邮件)
- 我在 google 控制台开发人员上创建了一个项目/应用程序,以使用 MCC 电子邮件用户获取
Client_ID 和 Client_Secret。 - 我使用上述凭据恢复了访问令牌/刷新令牌
- 现在使用具有标准访问、Client_ID、Client_Secret、Refresh_Token、Access_Token 和 Access_Token 的生产开发者令牌strong>客户客户ID
我使用 Passport OAuth2 SSO 流程获取刷新令牌。
客户应该通过我们的网络应用程序登录,一旦成功登录我们会收到他的access_token和refresh_token,然后我们邀请他由我们的MCC帐户管理,但请求失败并显示未经授权。
我做错了什么?
1-SOAP 响应
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<ns2:ResponseHeader xmlns:ns2="https://adwords.google.com/api/adwords/mcm/v201802" xmlns="https://adwords.google.com/api/adwords/cm/v201802">
<requestId>000579c3b56e65c00a85859ae60c1a37</requestId>
<serviceName>ManagedCustomerService</serviceName>
<methodName>mutateLink</methodName>
<operations>1</operations>
<responseTime>173</responseTime>
</ns2:ResponseHeader>
</soap:Header>
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>[ManagedCustomerServiceError.NOT_AUTHORIZED @ operations[0]]</faultstring>
<detail>
<ns2:ApiExceptionFault xmlns:ns2="https://adwords.google.com/api/adwords/mcm/v201802" xmlns="https://adwords.google.com/api/adwords/cm/v201802">
<message>[ManagedCustomerServiceError.NOT_AUTHORIZED @ operations[0]]</message>
<ApplicationException.Type>ApiException</ApplicationException.Type>
<errors xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:ManagedCustomerServiceError">
<fieldPath>operations[0]</fieldPath>
<fieldPathElements>
<field>operations</field>
<index>0</index>
</fieldPathElements>
<trigger />
<errorString>ManagedCustomerServiceError.NOT_AUTHORIZED</errorString>
<ApiError.Type>ManagedCustomerServiceError</ApiError.Type>
<ns2:reason>NOT_AUTHORIZED</ns2:reason>
</errors>
</ns2:ApiExceptionFault>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
2-节点示例代码
const adwordsUser = new AdwordsUser({
developerToken: 'DEVToken',
userAgent: 'App Name',
client_id: 'CLIENT_ID',
client_secret: 'CLIENT_SECRET',
refresh_token: 'REFRESH_TOKEN',
clientCustomerId: 'AdwordsAccountID'
});
customerService = adwordsUser.getService('ManagedCustomerService', null);
customerService.mutateLink({
operations: [
{
operator: 'ADD',
operand: {
managerCustomerId: 'MCCAccountCustomerID',
clientCustomerId: 'AdwordsAccountID',
linkStatus: 'PENDING'
}
}
]
}, function (err, result) {
if (err) console.log(err)
console.log(result)
})
【问题讨论】: