0

问题是:有没有一种新的方法可以调用 API,以便可以将活动插入到用户的配置文件中?

大约一个月前,我在这里发布了一个相关问题。它工作正常,直到本周早些时候它突然停止工作并抱怨这个错误:

[错误信息]

发送直接消息或获取响应时出错

[内部异常]

远程服务器返回错误:(400) 错误请求。

[堆栈跟踪]

在 DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest 请求,DirectWebRequestOptions 选项)

在 DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest 请求)

在 DotNetOpenAuth.Messaging.Channel.GetDirectResponse(HttpWebRequest webRequest)

在 DotNetOpenAuth.Messaging.Channel.RequestCore(IDirectedProtocolMessage 请求)

在 DotNetOpenAuth.Messaging.Channel.Request(IDirectedProtocolMessage requestMessage)

在 DotNetOpenAuth.OAuth2.ClientBase.UpdateAuthorizationWithResponse(IAuthorizationState 授权状态,EndUserAuthorizationSuccessAuthCodeResponse 授权成功)

在 DotNetOpenAuth.OAuth2.WebServerClient.ProcessUserAuthorization(HttpRequestInfo 请求)

在 GPlusWrapper.PlusWrapper.GetAuthorization(WebServerClient 客户端) 在 \gplus_csharp_ssflow\PlusWrapper.cs:line 122

在 Google.Apis.Authentication.OAuth2.OAuth2Authenticator`1.LoadAccessToken()

在 Google.Apis.Authentication.OAuth2.OAuth2Authenticator 1 onRequestReady) 在 Google.Apis.Requests.Request.ExecuteRequestAsync(Action 1.GetAsyncResponse(Action 1.GetResponse() 在 Google.Apis.Requests.ServiceRequest`1.Fetch()1.ApplyAuthenticationToRequest(HttpWebRequest request)
at Google.Apis.Requests.Request.CreateWebRequest(Action
1 responseHandler) at Google.Apis.Requests.ServiceRequest1 responseHandler) at Google.Apis.Requests.ServiceRequest

乍一看,熟悉 Google API 和 DNOA 的人会说这是 DNOA 问题。我已经搜索了三天,发现具有相同错误消息的问题不适合该问题 - 或者提出的解决方案不适合我遇到的问题。

所以接下来要做的是升级,是的,这是有道理的,因为谷歌团队可能已经改变了 API 的工作方式。所以我从 升级v1.2.4737.25316v1.3.0.15233,这是repo中最新的稳定版本

为确保不是我的代码或我的代码中的某些内容导致了问题,我重新访问了Gus 的示例代码。该示例代码曾经v1.2v1.2v1.3.

现在由于有一个新版本的库,重新访问文档并查看配置是否发生更改或如何调用 API 才有意义。调用 API 的方式似乎没有什么不同。

所以我做了上次调试应用程序时所做的事情。我都试过了

  • request_visible_actions;和
  • 请求可见动作

我仍然有access_type参数,但没有任何效果。

同样,我的问题是:有没有一种新的方法可以调用 API,以便可以将活动插入到用户的个人资料中?

请注意,我使用的是服务器端流程

4

1 回答 1

0

如果您有快速入门工作,您可以调用 API 来编写应用程序活动。要对此进行测试,请在快速入门中找到以下代码行:

ps = new PlusService(authenticator);

此时,如果你已经授权成功,你可以创建一个 moment 对象并将其写入 Google:

Moment body = new Moment();
body.Target = new ItemScope();
body.Target.Url = “https://developers.google.com/+/web/snippet/examples/widget”;
body.Type = “http://schemas.google.com/AddActivity”;
ps.Moments.Insert(body, “me”, MomentsResource.Collection.Vault).Fetch();

我刚刚测试了代码,它仍然有效,这意味着该库仍然能够进行 API 调用。乍一看,我记得你之前问过这个问题,这让我想知道这是否是 SS 流程特有的。经过一些调试,我遇到了与您运行 SS 相同的问题,但是,客户端正在接收授权码 - 一个好兆头。即使我删除了注入 request_visible_actions 的技巧,客户端库也失败了——这是一个不好的迹象。

使用 request_visible_actions 仍然是正确的,并且在后台,客户端库正在使用 OAuth V2 流,它不应该改变。

最终更新:

更改了我的示例服务器端演示以手动交换访问令牌/刷新令牌的授权代码。请从 GitHub 再次获取它,看看是否有帮助,但这是一个快速而肮脏的临时修复。我将研究为什么客户端库在代码交换部分中断。

PS 我知道 v1.3 的更改,希望我能尽快花时间执行代码更新!我以为没人会注意到...

于 2013-05-09T00:50:14.920 回答