java - test - ¿Cómo verifico la facturación en la aplicación de Android con un servidor con Ruby?
in app purchase google play (2)
Estoy teniendo problemas para averiguar cómo verificar las compras de facturación en la aplicación de Androind con mi servidor Ruby on Rails.
http://developer.android.com/guide/market/billing/billing_integrate.html
Creo que Android proporciona un Security.java que tiene algún tipo de método para verificar en un dispositivo físico. Según mi investigación, parece que (1) necesito averiguar cómo usar esta clase Security.java con mi servidor de Ruby on Rails o (2) necesito portar Security.java a Ruby.
¿Es esto correcto? ¿Alguien sabe otra forma de verificar el recibo?
Esto me funcionó solo después de la doble decodificación Base64 de la firma.
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)
Simplemente me di cuenta de esto.
Básicamente, la forma en que funciona es que cuando una compra es exitosa, Android Market envía un mensaje (formateado en JSON) con los detalles del pedido y una firma criptográfica. En la clase Security.java, la función de verificación se asegura de que el mensaje realmente provenga de la aplicación Android market al verificar la firma usando su clave pública.
Si desea utilizar su propio servidor en la mezcla, simplemente debe pasar la firma y la carga de json a su servidor y verificar la carga de json en su servidor. Si puede verificar que los datos json provienen de la aplicación Market, puede usarlos para crear sus objetos de pedido del lado del servidor. Luego, puede responder a su aplicación de cliente que se procesó el pedido y actualizar su interfaz de usuario.
Lo que hice en mi aplicación es simplemente agregar las cosas de comunicación del servidor en la función de verificación de la clase de Seguridad en lugar de la función de verificación existente.
El verdadero truco es escribir el código de verificación de firma en ruby. Esto es lo que funciona:
base64_encoded_public_key es su clave en su perfil de usuario sig es la propiedad de la firma que se pasa a los datos de ejemplo de seguridad de Dungeons es la cadena json enviada por el mercado.
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 )