首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在安装了Ruby的服务器上验证Android应用内计费?

如何在安装了Ruby的服务器上验证Android应用内计费?
EN

Stack Overflow用户
提问于 2011-05-12 05:48:38
回答 2查看 8.8K关注 0票数 18

我很难弄清楚如何用我的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。

这是正确的吗?有没有人知道另一种验证收据的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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 )
票数 25
EN

Stack Overflow用户

发布于 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)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5971031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档