主代码:
function AndroidPlayVerify(inappPurchaseData, inappDataSignature) { let verify = crypto.createVerify('RSA-SHA1');//请注意,这里要用RSA-SHA1 if(typeof inappPurchaseData === "object"){ inappPurchaseData = JSON.stringify(inappPurchaseData); } let PHP_EOL = ' ';//实际上就是换行符 //这里要将公钥转换成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 = ' ') { 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"