0

我正在构建一个使用 Google Wallet In App Payments 的应用程序。它托管在 python 环境中的谷歌应用引擎上。

作为钱包交易的一部分,需要生成 jwt,我通过获取客户端数据,通过 ajax GET 请求将其发送到服务器端以生成 jwt,然后在服务器响应中捕获它来做到这一点。我的代码在我的本地开发环境中按预期工作(在 chrome 隐身模式下运行以避免缓存问题)。但是,当我实时推送应用程序并发出请求时,什么都没有返回,python 方法也没有运行。

Appengine 日志确实显示该请求正在被看到 - 它只是没有被采取行动。

2013-06-18 21:35:01.919 /payments/generate_jwt_token?topup_amount=1&user_token=108700000000000000889 302 51ms 0kb Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36
86.1.75.123 - someuser [18/Jun/2013:14:35:01 -0700] "GET /payments/generate_jwt_token?topup_amount=1&user_token=108700000000000000889 HTTP/1.1" 302 0 "http://myapp.appspot.com/me/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" "myapp.appspot.com" ms=52 cpu_ms=0 app_engine_release=1.8.1 

如果我使用邮递员发出相同的请求(从我的 chrome 浏览器),即我发送一个 GET 请求到

http://myapp.appspot.com/payments/generate_jwt_token?topup_amount=1&user_token=108700000000000000889

我确实得到了预期的响应(就像我在本地开发环境中所做的那样)。我在应用引擎上只有 1 个版本的应用。

我尝试将请求更改为 POST 请求,但遇到了同样的问题 - 它应该会引发错误。

ajax请求如下:

function get_jwt_token_for_user(topup_amount, callback)
{
    console.log("get_jwt_token is running"); // this is printed to console
    $.ajax({ 
        type: "GET",
        url: "/payments/generate_jwt_token",
        data: {"topup_amount" : topup_amount, "user_token" : "108700000000000000889"},
        success: function(result) {
            var myObject = JSON.parse(result);
            console.log("myObject"); // none of this is printed when on appengine, but it is when running locally
            console.log(myObject); // none of this is printed when on appengine, but it is when running locally
            if (myObject.jwt_token !== 'None')
            {
                callback(myObject.jwt_token);
            }
            else
            {
                console.log(myObject.error);
            }
        },
        failure: function(fail){ 
            console.log("fail");
            console.log(fail);
        }
     });
}

尽管所有的 console.log(s) 都没有在 ajax 请求中写入控制台。但是,该功能确实运行,因为我可以看到第一个 console.log 打印到屏幕上。

我的问题是:

  1. 这是一个 appengine 错误/功能,如果是,我该如何解决?
  2. 我是否滥用了 JQuery ajax,如果是这样,该怎么办?
  3. 为什么这些代码都可以在本地工作,但在实时推送时却不行。
4

0 回答 0