Подтвердить что ты не робот

Как проверить 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.

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

4b9b3361

Ответ 1

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

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

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

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

Настоящий трюк - это код проверки подписи подписи в рубине. Вот что работает:

base64_encoded_public_key - ваш ключ в вашем профиле пользователя sig - свойство сигнатуры, передаваемое в пример безопасности подземелий 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 )

Ответ 2

Это сработало для меня только после двойного декодирования подписи 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)