0

我正在努力将谷歌云打印集成到 Web 应用程序中,以允许客户在生成 pdf 文件后将其发送到打印机。

我查看了谷歌开发者网站上的所有可用文档,但到目前为止,我还没有让我的测试应用程序连接到谷歌打印网络服务。

这是当前的过程:

  • 应用程序从用户和谷歌获得使用/管理用户打印机的许可(使用谷歌 API)。
  • 这会导致从 google 返回 0Auth 身份验证令牌。
  • 该令牌用于创建一个新的 http 请求,以便尝试在服务器上创建一个新的打印作业(不使用 api,因为我看不到任何可用的该服务)。
  • 发布请求后,应用程序每次都尝试读取响应流和.... 403 错误。即使我确定我已经遵循了谷歌的标题格式。

所以我要简单地问的是:

  • 在与我可能正在做的这样的谷歌网络服务交互时,是否有任何常见的绊脚石?
  • 是否有任何可用的 API 可以简化与谷歌打印网络服务的通信过程。
  • 有没有我可能想考虑的谷歌打印的好替代品。

谢谢。

private void SendPrintJob()
        {
            string googlePrintURL = @"https://www.google.com/cloudprint/submit";

            Classes.pos_CloudPrintObject print = new Classes.pos_CloudPrintObject();

            print.printerid = "28a52678-43ef-6592-e32c-255e7220cb8a";
            print.title = "Test Print";
            print.populateTicket();
            print.content = "Hello World";

            //googlePrintURL += "?printerid=" + print.printerid;
            //googlePrintURL += "&title=" + print.title;
            //googlePrintURL += "&ticket={}&content=" + print.content;

            string queryString =
                "printerid=" + print.printerid +
                "&capabilities="  +
                "&contentType=" + "txt" +
                "&title=" + print.title +
                "&content=" + print.content;

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.google.com/cloudprint/submit");
            request.Method = "POST";

            string code = Request["code"];

            request.Headers.Add("Authorization", "OAuth " + code);

            request.Headers.Add("Accept-Encoding", "ASCII");

            //request.Headers.Add("Accept-Charset", "ISO-8859-1");

            request.Headers.Add("X-CloudPrint-Proxy", "TestProj");            

            request.ContentType = ("application/x-www-form-urlencoded");

            ASCIIEncoding encoder = new ASCIIEncoding();
            byte[] bytePost = encoder.GetBytes(JsonConvert.SerializeObject(print));
            request.ContentLength = bytePost.Length;

            using (Stream writeStream = request.GetRequestStream())
            {
                writeStream.Write(bytePost, 0, bytePost.Length);
            }

            HttpWebResponse response; 
            try
            {
                response = (HttpWebResponse)request.GetResponse();

                //Prints out status of upload into debugger (But can be altered to return string instead)
                using (response)
                {
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
                        {
                            String result = reader.ReadToEnd();

                            System.Diagnostics.Debug.WriteLine(result);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }
4

1 回答 1

0

你需要改变这个

request.Headers.Add("Authorization", "OAuth " + code);

request.Headers.Add("Authorization", "Bearer " + code);

我希望,脚本中的“代码”表示有效的令牌。

谢谢

于 2016-03-09T09:18:56.077 回答