【问题标题】:how to get user information in google wallet如何在谷歌钱包中获取用户信息
【发布时间】:2013-08-11 13:46:00
【问题描述】:

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

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

请向我们提供您的建议。

【问题讨论】:

    标签: android android-pay


    【解决方案1】:

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

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

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

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

    4. 自己寻找答案...

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

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

    获取整个 '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 例程时添加此参数。

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

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

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

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

      保罗

      【讨论】:

      • 我以某种方式找到了解决方案,我们可以得到 orderId,因为 orderId 是 INAPP_PURCHASE_DATA json 的一个字段(orderId - 交易的唯一订单标识符。这对应于 Google 电子钱包订单 ID。)@ 987654321@ 获取 orderId 我们可以在客户端与适当的用户电子邮件相关联并将此类数据发送到服务器,获取我们可以在 Google Wallet 中搜索的 orderId
      猜你喜欢
      • 2014-11-26
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多