cloudprint匿名注册:“无法获取授权码”

时间:2013-09-28 08:26:59

标签: google-cloud-print

完全卡住&丢失在Google CloudPrint文档中python代码。我正在为打印机和Google CloudPrint服务之间的接口编写“代理”服务连接器。看来我能够成功地首先注册打印机(来自代理),用户可以通过提供的链接声明它。但是打印机不会出现在用户的GCP管理打印机列表中。并且,在代理端,我无法获取授权代码,响应返回该错误。但是,在用户声明打印机之前,轮询请求确实返回“令牌尚未注册”。令牌过期或使用后,它会返回:“未知,已使用或已过期的令牌”。那么为什么它不会返回授权码,为什么打印机不会出现在托管打印机列表中呢?请求中缺少什么?

这是请求&登记阶段的答复:

post https://www.google.com/cloudprint/register
X-CloudPrint-Proxy: "my proxy"
Content-Type: "multipart/form-data; boundary=-----------RubyMultipartPost"
Content-Length: "25074"
Status: 200
response: Content-Type: "text/plain"
Set-Cookie: "NID=67=Vr4laL1-skwakQVraGiu-l7i_dONBY5Szu7RAsCiHV5hSRmI8XDUbRQf4l1K7ct5ZCJzPjuZB97wJdvEYUXSGUpsrCnhVZRWuyq-CyQ0KSCvDegdUNz0VgDnH1LPwJBI;Domain=.google.com;Path=/;Expires=Sun, 30-Mar-2014 07:42:54 GMT;HttpOnly"
{"success"=>true, "polling_url"=>"https://www.google.com/cloudprint/getauthcode?printerid=a274981a-e4e7-ea3c-3ea1-e77adb84b5b4&oauth_client_id=", "invite_page_url"=>"https://www.google.com/cloudprint/regtokenpage?t=q2c5n&dpi=300&pagesize=215900,279400", "complete_invite_url"=>"http://goo.gl/printer/0jg9", "automated_invite_url"=>"https://www.google.com/cloudprint/confirm?token=q2c5n", "oauth_scope"=>"https://www.googleapis.com/auth/cloudprint", "token_duration"=>"899", "request"=>{"time"=>"0", "params"=>{"default_display_name"=>["HP-LaserJet-1020test"], "proxy"=>["my proxy"], "auth_client_id"=>["AIzaSyDnm....PeW0lu9Y"], "printer"=>["HP-LaserJet-1020test"]}}, "registration_token"=>"q2c5n" ... 

这是民意调查请求&授权代码的响应:

post https://www.google.com/cloudprint/getauthcode?printerid=a274981a-e4e7-ea3c-3ea1-e77adb84b5b4&oauth_client_id=AIzaSyD.....Mpe2PByWPeW0lu9Y
X-CloudPrint-Proxy: "my proxy"
Cookie: "NID=67=Vr4laL1-skwakQVraGiu-l7i_dONBY5Szu7RAsCiHV5hSRmI8XDUbRQf4l1K7ct5ZCJzPjuZB97wJdvEYUXSGUpsrCnhVZRWuyq-CyQ0KSCvDegdUNz0VgDnH1LPwJBI"
Status: 200
response: Content-Type: "text/plain"

{"success"=>false, "message"=>"Unable to get the authorization code.", "request"=>{"time"=>"0", "params"=>{"oauth_client_id"=>["AIzaSyDnmcwkVP....WPeW0lu9Y"], "printerid"=>["a274981a-e4e7-ea3c-3ea1-e77adb84b5b4"]}}, "errorCode"=>505}

1 个答案:

答案 0 :(得分:1)

好的,想出办法。文档和代码示例中对“API密钥”的重复引用使我感到困惑。 “client_id”参数需要与Google API控制台中的“客户端ID”字段相同,并且字符串应如下所示:“ 40nnnnnnnn96.apps.googleusercontent.com“其中nnnnn是各种数字.Google API控制台位于:API Console。不要将API密钥用于浏览器应用程序(这就是我做错了)。

一旦您声明了authorization_code,打印机就会显示在用户管理的打印机列表中。

完整且正确的轮询查询将类似于以下内容(机密信息已被xxxxxx和nnnnnnn模糊)

发布https://www.google.com/cloudprint/getauthcode?printerid=c9xxxxcc-bxxx2-0xx5-9xxx-9cxxxxxxxxxde&oauth_client_id=40nnnnnnnn96.apps.googleusercontent.com