как получить информацию о пользователе в гугл кошельке

Мы хотим иметь возможность связать пользователей приложения с реальными транзакциями. Проблема в том, что у нас есть адрес электронной почты пользователя на стороне приложения, и мы отслеживаем суммы покупок пользователя, но когда мы переходим к транзакциям Google Кошелька, у нас нет возможности зная, какие транзакции принадлежат этому пользователю. Нам нужно решение для этого, потому что даже если у нас есть электронная почта пользователя, мы не можем искать транзакции по адресу электронной почты.

Можно ли обновить номера квитанций, которые мы отправляем в API, чтобы включить номер квитанции Google Wallet вместо отметки времени?

Пожалуйста, предоставьте нам свои предложения.


person I.S.S    schedule 09.08.2013    source источник


Ответы (2)


Я думал, что ответ будет лежать в средстве обратной передачи. Это дает идентификатор пользователя Google и номер заказа. Однако я не видел, как преобразовать любой из них в адрес электронной почты для отправки только что купленного цифрового товара.

КСТАТИ. Я отказался выполнять клиентскую часть выполнения, поскольку это казалось небезопасным. Если я ошибаюсь, то почему они предлагают возможность обратной передачи?

... затем я понял, что мы могли бы сделать часть этого на стороне клиента и часть на стороне сервера.

Я догадался, что что-то возвращается из обратного вызова успеха на стороне клиента.

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

Итак, теперь у меня есть google orderId на стороне клиента, и я знаю идентификатор пользователя. Таким образом, моя функция complete() может отправить orderId и наш userId на сервер, который затем может сопоставить это с успешным платежным orderId из обратной передачи (что происходит первым) и выполнить заказ.

Да, это неэлегантно, но я считаю, что это безопасное решение.

Может быть, более элегантно использовать свойство [sellerData] в полезной нагрузке отправки, чтобы содержать наш идентификатор пользователя и номер заказа. Затем у нас есть больше элементов для сопоставления после успешного обратного вызова. Думаю, я воздержусь от доставки цифрового товара, пока все эти проверки не будут завершены.

Чего я не понимаю, так это почему такого предложения (или лучшего) нельзя найти в руководстве по кошельку?

Павел

person user1712240    schedule 31.08.2013
comment
Я каким-то образом нашел решение, мы могли бы получить orderId, так как orderId - это поле INAPP_PURCHASE_DATA json (orderId - уникальный идентификатор заказа для транзакции. Это соответствует идентификатору заказа Google Wallet.) developer.android.com/google/play/billing/ получение идентификатора заказа, который мы можем связать с соответствующей электронной почтой пользователя на клиенте сторону и отправить такие данные на сервер, получив orderId, который мы можем искать в Google Wallet - person I.S.S; 16.09.2013

Мой ответ здесь относится к предыдущему ответу:

  1. Полностью согласен с тем, «почему такого рода предложения (или лучшего) нельзя найти в руководстве по кошельку?».

  2. Предлагаемое вами решение не кажется очень безопасным (мягко говоря). Вы хотите, чтобы клиент отправил вам свое имя пользователя/адрес электронной почты/идентификатор клиента в обратном вызове Success... Это означает, что любой сможет отправить вам свой идентификатор, даже если он не совершал покупку. Они могут добавить случайный идентификатор заказа и надеяться получить совпадение (а затем повторять процесс много раз, чтобы увеличить шансы).

  3. Я предполагаю, что имя пользователя/адрес электронной почты/идентификатор клиента находится где-то в объекте запроса, отправленном из Google на URL обратной передачи (подпрограмма doPost вашего сервера). Но у меня есть ощущение, что вам нужно добавить что-то в JWT, сгенерированный в вашей функции Purchase, прежде чем он будет передан в процедуру google.payments.inapp.buy.

  4. Сам ищу ответ...

  5. Вот возможное решение, хотя я еще не проверял его сам:

Загрузите ZIP-файл со страницы: https://code.google.com/p/wallet-online-quickstart-java/downloads/list

Возьмите всю папку 'com' и добавьте ее в исходную папку проекта (извините, мне не удалось найти JAR для этого пакета). Затем добавьте в свой сервлет следующий код:

...

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.

person barak manos    schedule 03.09.2013