Как проверить ведение Android In-app Billing на сервере с Ruby?

У меня возникли проблемы с выяснением того, как проверить покупки Androind In-app Billing с моим сервером Ruby on Rails.

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

Я думаю, что Android дает Security.java, который имеет какой-то метод проверки на физическом устройстве. Из моих исследований кажется, что (1) мне нужно выяснить, как использовать этот класс Security.java с моим сервером Ruby on Rails или (2) мне нужно перенести Security.java на Ruby.

Это верно? Кто-нибудь знает другой способ проверить квитанцию?

Solutions Collecting From Web of "Как проверить ведение Android In-app Billing на сервере с Ruby?"

Я просто понял это.

В основном способ, которым он работает, заключается в том, что когда покупка удалась, рынок Android отправляет обратно сообщение (отформатированное в JSON) с информацией о заказе и криптографической подписью. В классе Security.java функция проверки гарантирует, что сообщение действительно поступило из приложения Android Market, проверяя подпись, используя ваш открытый ключ.

Если вы хотите использовать свой собственный сервер в миксе, вам просто нужно передать подпись и json-полезную нагрузку на ваш сервер и проверить полезную нагрузку json на своем сервере. Если вы можете проверить, что данные json пришли из рыночного приложения, вы можете использовать его для создания объектов заказа на стороне сервера. Затем вы можете ответить на свое клиентское приложение, чтобы заказ был обработан, и обновите свой пользовательский интерфейс.

То, что я сделал в своем приложении, просто добавляет в средства связи с сервером функцию проверки безопасности класса безопасности вместо существующей функции проверки.

Реальный трюк заключается в написании кода проверки подписи в рубине. Вот что работает:

Base64_encoded_public_key – ваш ключ в вашем профиле пользователя. Sig – это свойство подписи, которое передается в данные примера безопасности подземелий – это строка 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 ) 

Это сработало для меня только после двойного декодирования подписи Base64.

  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)