2

アプリのユーザーと実際のトランザクションを関連付けられるようにしたいと考えています。問題は、アプリケーションのバックエンド側にユーザ​​ーのメール アドレスがあり、ユーザーの購入金額を追跡していることですが、Google ウォレットのトランザクションに入ると方法がありません。どのトランザクションがそのユーザーに属しているかを知ること。ユーザーの電子メール アドレスを持っていても、電子メール アドレスでトランザクションを検索することはできないため、これに対する解決策が必要です。

API で送信する領収書番号を更新して、タイム スタンプの代わりに Google ウォレットの領収書番号を含めることはできますか?

ご提案をお寄せください。

4

2 に答える 2

0

答えはポストバック機能にあると思いました。これにより、Google のユーザー ID と注文番号が得られます。ただし、購入したばかりのデジタル商品を送信するために、これらのいずれかを電子メールアドレスに変換する方法がわかりませんでした.

ところで。クライアント側でフルフィルメントを行うことは安全ではないように思われたため、拒否しました。私がそれについて間違っているとしたら、なぜ彼らはポストバック機能を提供するのでしょうか?

...そして、クライアント側とサーバー側の一部を実行できることに気付きました。

クライアント側の成功コールバックから何かが返ってくると思います。

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

そのため、クライアント側に Google の orderId があり、そこでユーザーの ID がわかります。したがって、私の complete() 関数は orderId と userId をサーバーに送信し、これをポストバック (最初に発生) からの成功した支払い orderId と照合し、注文を処理できます。

はい、これはエレガントではありませんが、安全なソリューションであると信じています。

送信ペイロードで [sellerData] プロパティを使用して、ユーザー ID と注文参照を含める方が、もう少し洗練されているかもしれません。成功のコールバックが発生した後、一致するアイテムがさらにあります。これらのチェックがすべて完了するまで、デジタル商品の配信を延期すると思います。

私が理解できないのは、この種の提案 (またはより良い提案) がウォレットのチュートリアルで見つからないのはなぜですか?

ポール

于 2013-08-31T08:55:10.587 に答える
0

ここでの私の回答は、以前に提供された回答を参照しています。

  1. 「この種の提案 (またはより良い提案) がウォレットのチュートリアルで見つからないのはなぜですか?」に完全に同意します。

  2. 提案されたソリューションは、あまり安全ではないようです (控えめに言っても)。クライアントがユーザー名/電子メール/クライアント ID を Success コールバックで送信するようにしたい... これは、購入していなくても、誰でも ID を送信できることを意味します。ランダムなオーダー ID を追加して、一致することを期待できます (そして、チャンスを増やすためにプロセスを何度も繰り返します)。

  3. 私の推測では、username/email/client-id は、Google からポストバック URL (サーバーの doPost ルーチン) に送信されたリクエスト オブジェクトのどこかにあると思います。しかし、google.payments.inapp.buy ルーチンに渡される前に、 Purchase 関数で生成された JWT に何かを追加する必要があると感じています。

  4. 自分で答えを探して...

  5. 私はまだ自分でテストしていませんが、可能な解決策は次のとおりです。

https://code.google.com/p/wallet-online-quickstart-java/downloads/listから「zip」ファイルをダウンロードします。

「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();

        ...

    }

}

よくわからないことの 1 つは、request.getParameter("maskedWalletJwt") です。

google.payments.inapp.buy ルーチンを呼び出すときに、このパラメータを追加する必要がある場合があります。

于 2013-09-03T12:38:46.710 に答える