使用Google购买REST API时遇到500错误

我正在开发一个使用Google Play新订阅function的Android应用。 我的应用程序的一部分包含一个Web服务器,通过API调用定期检查这些订阅的状态。 它也取消了一些订阅。

Google提供了两个REST API来完成这个工作:

https://developers.google.com/android-publisher/v1/purchases/get

https://developers.google.com/android-publisher/v1/purchases/cancel

我可以使用OAuth获得第一个很好的工作。 但是,当我尝试取消某些订阅,我得到一个500错误,没有任何细节。 有没有人经历过这个? 我使用不正确? 我确定OAuth正在工作,因为我可以击中第一个API。 这是我的curl输出,隐藏了我的一些帐户数据:

curl -X POST 'https://www.googleapis.com/androidpublisher/v1/applications/com.ssd.mypkg/subscriptions/mysku/purchases/mypurchasetoken/cancel' -H 'Authorization: OAuth ya29.myoauth' -d '' -v * About to connect() to www.googleapis.com port 443 (#0) * Trying 209.85.148.95... connected * Connected to www.googleapis.com (209.85.148.95) port 443 (#0) * SSLv3, TLS handshake, Client hello (1): * SSLv3, TLS handshake, Server hello (2): * SSLv3, TLS handshake, CERT (11): * SSLv3, TLS handshake, Server finished (14): * SSLv3, TLS handshake, Client key exchange (16): * SSLv3, TLS change cipher, Client hello (1): * SSLv3, TLS handshake, Finished (20): * SSLv3, TLS change cipher, Client hello (1): * SSLv3, TLS handshake, Finished (20): * SSL connection using RC4-SHA * Server certificate: * subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=*.googleapis.com * start date: 2012-06-14 06:42:53 GMT * expire date: 2013-06-07 19:43:27 GMT * subjectAltName: www.googleapis.com matched * issuer: C=US; O=Google Inc; CN=Google Internet Authority * SSL certificate verify ok. > POST /androidpublisher/v1/applications/com.ssd.mypkg/subscriptions/mysku/purchases/mypurchasetoken/cancel HTTP/1.1 > User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5 > Host: www.googleapis.com > Accept: */* > Authorization: OAuth ya29.myoauth > Content-Length: 0 > Content-Type: application/x-www-form-urlencoded > < HTTP/1.1 500 Internal Server Error < Content-Type: application/json; charset=UTF-8 < Date: Fri, 06 Jul 2012 15:23:10 GMT < Expires: Fri, 06 Jul 2012 15:23:10 GMT < Cache-Control: private, max-age=0 < X-Content-Type-Options: nosniff < X-Frame-Options: SAMEORIGIN < X-XSS-Protection: 1; mode=block < Server: GSE < Transfer-Encoding: chunked < { "error": { "code": 500, "message": null } } * Connection #0 to host www.googleapis.com left intact * Closing connection #0 * SSLv3, TLS alert, Client hello (1): 

我可以确认有完全相同的问题。 获取细节工作完美,但取消失败。 我正在使用Google API的Java类,所以我认为这是一个普遍的问题,我们应该作为一个错误发布到谷歌。

这里是我从谷歌服务器收到的回应:

 com.google.api.client.googleapis.json.GoogleJsonResponseException: 500 Internal Server Error { "code" : 500, "message" : null } 

我也遇到这个错误。 我的应用程序只发布在betatesting模式。 难道这就是问题吗,我想知道?

在相关的情况下,我正在使用googlesamples / android-play-publisher-api的修改版本,其中我通过修改service-call定义行来更改basic_list_apks以充当订阅撤销者,如下所示:

 service.purchases().subscriptions().revoke(packageName=package_name, subscriptionId=product_id, token=purchase_token) 

我可以确认相同的问题。 这是我收到的回应:

 { "error": { "code": 500, "message": null } } 

我想这个尴尬的错误消息的原因是订阅不再有效,但我们试图取消它。 相反,我们应该首先检查订阅是否有效:过期date,取消原因,自动更新。

在我的具体情况下,订阅过期和cancelReason1意味着它被系统取消。