Google play支付如何用nodejs验证订单完成的合法性

这篇博客探讨了如何利用Node.js确保Google Play支付订单的合法性,详细介绍了验证过程和可能涉及的加密算法。

Google play支付如何用nodejs验证订单完成的合法性

const crypto = require('crypto');

// 把字符串分割为一连串更小的部分
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);
}

// google 公钥
let googlePublicKey = '在 google console 中的开发工具-》服务和API中可以找到';

/**
 * 验证google支付签名是否正确
 * @param {*} params  支付成功收到的参数
 * @param {*} inappDataSignature google 传入的签名 字段名和顺序与用例保持一致  {
    "orderId": "GPA.3341-6034-7995-16517",
    "packageName": "com.exchange.demo",
    "productId": "1006",
    "purchaseTime": 1551281602450,
    "purchaseState": 0,
    "developerPayload": "Coins Package Pack 1",
    "purchaseToken": "jjfbbecohm",
}
 */
function GooglePlayCheck(params, inappDataSignature) {
    let verify = crypto.createVerify('RSA-SHA1');//请注意,这里要用RSA-SHA1

    let PHP_EOL = '\n';//实际上就是换行符
    let inappPurchaseData = JSON.stringify(params);
    //这里要将公钥转换成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')); //验证数据
    console.log("result:", isSuccess);
}

测试用例

/**
 * 测试用例
 */
GooglePlayCheck({
    "orderId": "GPA.3341-6034-7995-16517",
    "packageName": "com.exchange.demo",
    "productId": "1006",
    "purchaseTime": 1551281602450,
    "purchaseState": 0,
    "developerPayload": "Coins Package Pack 1",
    "purchaseToken": "jjfbbecohm",
}, "Ig1zAZJPZ8dH4id\/0zDDY62OlbACgWrb+ApRNXu08W35A+XLTp5N5krGugSUBG5LN1CRdLECGY+F8kczh10KLubCmgSPbBhB1kxJ\/bpMSfeklvCa0L3qJ00h0J8km7xJw6nTlwWtlHZzCQWu0TjeniVT0+hipTV67jkCjpHV+e8iGMxxKy0X+8qVEwQ5XNA==");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值