我使用
PUT https://api.linkedin.com/v2/eventSubscriptions/(developerApplication:urn:li:developerApplication:{developer application ID},user:urn:li:user:{member ID},entity:urn:li:organization:{organization ID},eventType:ORGANIZATION_SOCIAL_ACTION_NOTIFICATIONS)
Linkedin API与所有参数完好无损。每个URN被编码为URN:li:organization:12345,编码为URN %3Ali%3Aorganization%3A12345,但仍然得到403响应。
我想你忘了在header中添加这个:X-Restli-Protocol-Version: 2.0.0
应用程序id实际上是url中的数字字段,当您访问应用程序设置时,请使用该值而不是客户端id。
所以原来文档中有很多缺失/不正确的信息。由于我在go中工作,以下是我如何最终获得正确格式的url:
fmt.Sprintf(
"https://api.linkedin.com/v2/eventSubscriptions/(developerApplication:%s,user:%s,entity:%s,eventType:ORGANIZATION_SOCIAL_ACTION_NOTIFICATIONS)",
url.QueryEscape(fmt.Sprintf("urn:li:developerApplication:%s", appId)),
url.QueryEscape(fmt.Sprintf("urn:li:person:%s", userId)),
url.QueryEscape(fmt.Sprintf("urn:li:organization:%s", organizationID)),
)
分解:
- 需要对urn进行unlencoded,仅对urn进行unlencoded。
- 不是周围的括号
- 不是逗号
- 不是urn (
developerApplication:
,user:
,entity:
)前面的冒号
- 您的PUT请求需要包括
X-Restli-Protocol-Version
头和Authorization
头 - 如果,出于某种原因,您使用
/rest/eventSubscriptions/
url而不是/v2/eventSubscriptions/
,您还需要包含LinkedIn-Version
头 appId
是不是你的应用程序的客户端id,而是你在linkedin开发者门户的应用设置url中看到的数字id(即https://www.linkedin.com/developers/apps/<appId>/auth
)- 文档中的URN结构是错误的:你需要使用
urn:li:person:<userId>
,而不是urn:li:user:<userId>