java - 如何使用带有 Ruby 的服务器验证 Android 应用内计费?

标签 java android ruby-on-rails ruby 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。

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

最佳答案

我刚刚想通了。

它的基本工作方式是,当购买成功时,android 市场会发回一条消息(格式为 JSON),其中包含订单详细信息和加密签名。在 Security.java 类中,验证函数通过使用您的公钥验证签名来确保消息确实来自 Android 市场应用程序。

如果您想在混合中使用自己的服务器,您只需将签名和 json 有效负载传递给您的服务器,并在您的服务器上验证 json 有效负载。如果您可以验证 json 数据是否来自市场应用程序,则可以使用它来创建服务器端订单对象。然后,您可以响应您的客户端应用程序该订单已处理并更新您的 UI。

我在我的应用程序中所做的只是在 Security 类的验证函数中添加服务器通信内容来代替现有的验证函数。

真正的诀窍是用 ruby​​ 编写签名验证码。以下是有效的:

base64_encoded_public_key 是您在用户个人资料中的 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 )

关于java - 如何使用带有 Ruby 的服务器验证 Android 应用内计费?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5971031/

相关文章:

ruby-on-rails - Rails 5 从两个不同的表中选择并得到一个结果

ruby-on-rails - Heroku Puma Rails 4 : Getting R14 errors, 如何扩展我的服务器?

java - 更改已创建文件的权限,以便只有当前用户可以读取它

ruby-on-rails - Rails Paperclip S3 重命名数千个文件?

java - Gradle 从同一个项目创建 war 和 jar

android - iOS 相当于 View.GONE

Android NavigationDrawer 在打开和关闭时滞后

java - 使用 php 和 android 从 sql 数据库中选择所有内容

java - 将 char 转换为 string 时会发生什么? ( java )

java - Java 中复制/合并数组的性能