2

我们希望能够将应用程序用户与已完成的真实交易相关联。问题是我们在应用程序后端拥有用户的电子邮件地址,并且我们跟踪用户购买金额,但是当我们进入谷歌钱包交易时,我们没有办法知道哪些交易属于该用户。我们需要一个解决方案,因为即使我们有用户的电子邮件,我们也无法通过电子邮件地址搜索交易。

是否可以更新我们在 API 中发送的收据号码以包含 Google 电子钱包收据号码而不是时间戳?

请向我们提供您的建议。

4

2 回答 2

0

我认为答案将在于回发设施。这给出了谷歌的用户 ID 和订单号。但是,我没有看到如何将其中任何一个转换为电子邮件地址以发送刚购买的数字商品。

顺便提一句。我拒绝执行客户端,因为这似乎不安全。如果我错了,那么他们为什么要提供回发功能?

...然后我意识到,我们可以做部分客户端和部分服务器端。

我猜想客户端成功回调会返回一些东西。

   success: function(result) {
      console.log('success',result.response.orderId);
      complete(result.response.orderId);
    },

所以,我现在在客户端有谷歌的 orderId,我知道用户的 ID。所以我的 complete() 函数可以将 orderId 和我们的 userId 发送到服务器,然后服务器可以将其与回发中的成功付款 orderId 匹配(首先发生)并完成订单。

是的,这很不雅,但我相信这是一个安全的解决方案。

也许更优雅的是在提交有效负载中使用 [sellerData] 属性来包含我们的用户 ID 和订单参考。在成功回调发生后,我们有更多的项目要匹配。我想在所有这些检查完成之前,我会推迟交付数字商品。

我不明白的是为什么在钱包教程中找不到这种建议(或更好的建议)?

保罗

于 2013-08-31T08:55:10.587 回答
0

我在这里的回答是指之前提供的答案:

  1. 完全同意“为什么在钱包教程中找不到这种建议(或更好的建议)?”。

  2. 您建议的解决方案似乎不是很安全(至少可以说)。您希望客户在 Success 回调中向您发送他们的用户名/电子邮件/客户 ID……这意味着任何人都可以向您发送他们的 ID,即使他们没有购买。他们可以添加一个随机的 order-ID 并希望得到匹配(然后重复该过程多次以增加机会)。

  3. 我的猜测是用户名/电子邮件/客户端 ID 位于从 Google 发送到回发 URL(您的服务器的 doPost 例程)的请求对象中的某个位置。但我觉得您需要在购买函数中生成的 JWT 中添加一些内容,然后再将其传递给 google.payments.inapp.buy 例程。

  4. 自己找答案...

  5. 这是一个可能的解决方案,虽然我自己还没有测试过:

从以下网址下载“zip”文件:https ://code.google.com/p/wallet-online-quickstart-java/downloads/list

获取整个 'com' 文件夹并将其添加到您的项目源文件夹中(抱歉,我无法找到此包的 JAR)。然后,将以下代码添加到您的 servlet:

...

import com.google.wallet.online.jwt.JwtResponseContainer;

import com.google.wallet.online.jwt.util.JwtGenerator;

import com.google.wallet.online.jwt.JwtResponse;

...

public void doPost(HttpServletRequest request, HttpServletResponse response) ...

{

    try

    {

        String maskedWalletJwt = request.getParameter("maskedWalletJwt");

        JwtResponseContainer jwtResponseContainer = JwtGenerator.jwtToJava(JwtResponseContainer.class, maskedWalletJwt, SellerSecret);

        JwtResponse jwtResponse = jwtResponseContainer.getResponse();

        String email = jwtResponse.getEmail();

        ...

    }

}

我不太确定的一件事是 request.getParameter("maskedWalletJwt")。

在调用 google.payments.inapp.buy 例程时,您可能必须添加此参数。

于 2013-09-03T12:38:46.710 回答