Android内购订单验证 --- nodejs实现
主代码:
function AndroidPlayVerify(inappPurchaseData, inappDataSignature) {
let verify = crypto.createVerify('RSA-SHA1');//请注意,这里要用RSA-SHA1
if(typeof inappPurchaseData === "object"){
inappPurchaseData = JSON.stringify(inappPurchaseData);
}
let PHP_EOL = '\n';//实际上就是换行符
//这里要将公钥转换成64个字符一行的文本块。
let publicKey = "-----BEGIN PUBLIC KEY-----" + PHP_EOL + chunk_split(googlePublicKey, 64, PHP_EOL) + "-----END PUBLIC KEY-----";
verify.update(inappPurchaseData);
let isSuccess = verify.verify(publicKey, Buffer.from(inappDataSignature, 'base64')); //验证数据
var purcaseTime = 0;
var status = 0;
if(isSuccess){
let ptimeObj = JSON.parse(inappPurchaseData);
if(ptimeObj.purchaseTime != undefined)
purcaseTime = ptimeObj.purchaseTime;
status = 1;
}
return {status:status,ptime:purcaseTime};
}
辅助函数:
// 把字符串分割为一连串更小的部分
function chunk_split(paramString, paramLength, paramEnd = '\n') {
let p = [];
let s = paramString;
while (s.length > paramLength) {
let s1 = s.substr(0, paramLength);
let s2 = s.substr(paramLength);
s = s2;
p.push(s1);
}
if (s.length > 0) {
p.push(s);
}
p.push('');
return p.join(paramEnd);
}
参数说明:
//receop:字符串或者json对象都可
//receop和sing都是客户端购买时google返回的订单信息
var receop = '{"orderId":"GPA.33","packageName":"com.fill","productId":"com.word.oin1","purchaseTime":1540265097944,"purchaseState":0,"purchaseToken":"ogiG0n"}';
var sing = "fFbfYThbWc270zrby/ADKiLWHNEdp/mLFvLO+OiryTgAJOgPMuUygCnXYTGBTC+MWazk"
Android内购订单验证 --- nodejs实现的更多相关文章
- ios 苹果内购订单验证 --- nodejs实现
实现代码 function IosPlayVerify(data,orderid,cb) { itunesPost(data,function (error,responseData) { if (e ...
- Android内购订单验证 --- php实现
直接上代码: function googleVerify($sdata,$google_public_key) { $sdata = json_decode($sdata,true); $in_app ...
- ios 苹果内购订单验证 --- php实现
验证函数: function appleVerify($receipt_data,$orderId = 0) { /* * 21000 App Store不能读取你提供的JSON对象 * 21002 ...
- php苹果内购订单验证
/** * 21000 App Store不能读取你提供的JSON对象 * 21002 receipt-data域的数据有问题 * 21003 receipt无法通过验证 * 21004 提供的sha ...
- iOS开发 使用RMStore简化内购代码 + 内购买订单验证
现在很多的app里面都添加了应用内购买,网上关于苹果证书的生成和设置的教程比较多,这里就不多赘述了,推荐几个个人觉得说的比较详细的网址: http://www.jianshu.com/p/86ac7d ...
- 苹果开发——App内购以及验证store的收据(二)
原地址:http://zengwu3915.blog.163.com/blog/static/2783489720137605156966?suggestedreading 三. 客户端使用Store ...
- 苹果内购服务器验证之receipt返回多组in_app思考
最近有部分用户反映,苹果内购充值失败,经过测试总结有几个关键点出现问题 1.app购买成功苹果没有返回票据,属于票据遗漏(取决于苹果服务器的响应状况),只能客户端进行监听刷新等处理 2.app连续购买 ...
- 苹果开发——App内购以及验证store的收据(一)
原地址:http://zengwu3915.blog.163.com/blog/static/27834897201375105236580?suggestedreading 发了几天时间在网上折腾了 ...
- c++ boost 苹果内购 IAP验证
// 1111.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" #include <cstdlib> #include <i ...
随机推荐
- Spring InitializingBean init-method @PostConstruct 执行顺序
Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,常用的设定方式有以下三种: 通过实现 Initializing ...
- elasticsearch映射及分析-----3
首先我们看下不同的索引方式相同的字段指定字段类型与不指定字段类型es会怎么处理 1.不指定类型,直接创建索引及类型文档 我们看下他默认的索引映射 2.创建索引和类型时指定字段类型 这里创建了一个索引为 ...
- XHML教会我的一些东西-3
在寒假期间,隔几天就同学聚会,每天都是起床困难户.每天都想着要完成任务,要学习新的东西.但是总是被自己惰性占为上风.感觉自己很没用,但是又继续堕落.真的不能理解自己.呵呵.... 在放假一段时间之后, ...
- ueditor 插件问题
- 我的第一台 Mac
我的第一台 Mac 心里的这棵草长了一年多之后终于狠心剁手了. 2018年11月6号下单 2018 款 MBP 2.6/32/512 定制款,7号早上到手 --- 感受(个人主观感觉-)
- 切图让我进步!关于white-space属性的组合拳
菜鸟一枚,没有大神的风骚,只有一点在练习中的心得,今天获得的知识是关于white-space属性.overflow属性还有text-overflow属性的组合使用,废话不多说浪费时间,进入今天的正题! ...
- http-equiv和name的区别
meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用于网页的<head>与</head>中,meta 标签的用处很多.meta 的属性有两种:name和 ...
- HTML文本格式化用法
1.HTML 文本格式化标签 标签 描述 <b> 定义粗体文本 <em> 定义着重文字,显示为斜体 <i> 定义斜体字 <small> 定义小号字 &l ...
- [原创]Debian9 从零编译配置Redis4.0
序言 Redis 一.准备工作 1.1 更新系统安装包列表 没啥,就他喵想用个最新的. # apt update 1.2 创建需要使用的目录 创建目录source和web,分别用来放源码和编译后的文件 ...
- python if else while for
1 getpass模块 设置密码不显示明文 用户名和密码输入程序: import getpass username = input("username:") password = ...