18

Ruby on Rails サーバーで Android アプリ内課金の購入を確認する方法がわかりません。

http://developer.android.com/guide/market/billing/billing_integrate.html

Android は、物理デバイスで検証するための何らかの方法を持つ Security.java を提供すると思います。私の調査によると、(1) この Security.java クラスを Ruby on Rails サーバーで使用する方法を理解する必要があるか、(2) Security.java を Ruby に移植する必要があるようです。

これは正しいです?領収書を確認する別の方法を知っている人はいますか?

4

2 に答える 2

25

私はちょうどこれを理解しました。

基本的には、購入が成功すると、Android マーケットが注文の詳細と暗号化された署名を含むメッセージ (JSON 形式) を送り返します。Security.java クラスの検証機能は、公開鍵を使用して署名を検証することにより、メッセージが本当に Android マーケット アプリケーションからのものであることを確認しています。

独自のサーバーを組み合わせて使用​​する場合は、署名と json ペイロードをサーバーに渡し、サーバーで json ペイロードを確認するだけです。json データが市場アプリケーションからのものであることを確認できれば、それを使用してサーバー側の注文オブジェクトを作成できます。次に、注文が処理されたことをクライアント アプリケーションに応答し、UI を更新します。

私がアプリで行ったことは、既存の検証機能の代わりに、Security クラスの検証機能にサーバー通信を追加することです。

本当の秘訣は、ルビで署名検証コードを書くことです。機能するものは次のとおりです。

base64_encoded_public_key は、ユーザー プロファイルのキーです。 sig は、Dungeons セキュリティ サンプルに渡される署名プロパティです。 data は、市場から返された json 文字列です。

require 'rubygems'
require 'openssl'
require 'base64'

base64_encoded_public_key = "YOUR KEY HERE"
data = "JSON_DATA_HERE"
sig = "SIGNATURE HERE"

key = OpenSSL::PKey::RSA.new(Base64.decode64(base64_encoded_public_key))

verified = key.verify( OpenSSL::Digest::SHA1.new, Base64.decode64(sig), data )
于 2011-05-15T20:50:23.510 に答える
5

これは、署名のBase64デコードを2回行った後でのみ機能しました。

  public_key = Base64.decode64(public_key_b64)
  signature = Base64.decode64(Base64.decode64(signature_b64))
  signed_data = Base64.decode64(signed_data_b64)

  key = OpenSSL::PKey::RSA.new(public_key)
  verified = key.verify(OpenSSL::Digest::SHA1.new, signature, signed_data)
于 2011-09-29T09:39:08.657 に答える