我很难弄清楚如何用我的Ruby on Rails服务器来验证Androind的应用内付费购买。
http://developer.android.com/guide/market/billing/billing_integrate.html
我认为Android提供了一个可以在物理设备上进行验证的Security.java。根据我的研究,似乎要么(1)我需要弄清楚如何在我的Ruby on Rails服务器上使用这个Security.java类,要么(2)我需要将Security.java移植到Ruby。
这是正确的吗?有没有人知道另一种验证收据的方法?
发布于 2011-05-16 04:50:24
我刚想通了。
基本上,它的工作方式是,当购买成功时,android市场会返回一条消息(格式为JSON),其中包含订单详细信息和加密签名。在Security.java类中,verify函数通过使用您的公钥验证签名来确保消息确实来自Android market应用程序。
如果您想在组合中使用您自己的服务器,您只需将签名和json有效负载传递到您的服务器,并验证服务器上的json有效负载。如果可以验证json数据来自市场应用程序,就可以使用它来创建服务器端order对象。然后,您可以响应客户端应用程序,告知订单已处理并更新您的UI。
我在我的应用程序中所做的只是在Security类的verify函数中添加服务器通信内容,而不是现有的verify函数。
真正的诀窍是用ruby编写签名验证代码。以下是有效的方法:
base64_encoded_public_key是您用户配置文件中的密钥,sig是传递给地下城安全示例的signature属性,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-09-29 17:39:09
只有在对签名进行双重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)
https://stackoverflow.com/questions/5971031
复制相似问题