sli*_*k28 18 ruby java android ruby-on-rails in-app-billing
我无法弄清楚如何使用我的Ruby on Rails服务器验证Androind In-app Billing购买.
http://developer.android.com/guide/market/billing/billing_integrate.html
我认为Android提供了一种Security.java,它具有某种在物理设备上验证的方法.从我的研究看起来似乎要么(1)我需要弄清楚如何在我的Ruby on Rails服务器上使用这个Security.java类,或者(2)我需要将Security.java移植到Ruby.
它是否正确?有谁知道验证收据的另一种方式?
wal*_*lta 25
我刚想通了.
基本上它的工作方式是当购买成功时,Android市场会发回一条消息(格式为JSON),其中包含订单详细信息和加密签名.在Security.java类中,验证功能通过使用您的公钥验证签名来确保消息确实来自Android市场应用程序.
如果要在混合中使用自己的服务器,只需将签名和json有效负载传递给服务器并验证服务器上的json有效负载.如果您可以验证json数据是否来自市场应用程序,则可以使用它来创建服务器端订单对象.然后,您可以响应客户端应用程序处理订单并更新UI.
我在我的应用程序中所做的只是在Security类的verify函数中添加服务器通信内容来代替现有的验证函数.
真正的诀窍是在ruby中编写签名验证码.这是有效的:
base64_encoded_public_key是您的用户配置文件中的密钥sig是传递到Dungeons安全示例的签名属性数据是市场发回的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 )
Run Code Online (Sandbox Code Playgroud)
只有在双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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8541 次 |
| 最近记录: |