google 订单验证 --- 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"
 

猜你喜欢

转载自www.cnblogs.com/cj8988/p/10648749.html