2013-03-17

NodeJS 驗證 Google Play In-app Billing Signature

使用 IabHelper 可以方便介接 Google Play 的金流系統 (In-App billing, IAB) ,IabHelper 提供一個用來驗證下單結果 (使用者下單之後,由 GooglePlay IAB 回傳的結果 ) 的函數(Security.verifyPurchase),它主要用來確定資料是否有被竄改或是不完整。
若 App 的架構具有後端伺服器,則 IAB 回傳的結果應該由伺服器端來做驗證,底下是以 NodeJS 為例子的驗證程序 :
var crypto =require('crypto');
var verifySignature =function(publicKey, purchaseData, signature)
{
    var genPublicKey =function(key)
    {
        var chunkSize, chunks, str;
        str = key;
        chunks = [];
        chunkSize = 64;
        while (str) {
            if (str.length < chunkSize) {
                chunks.push(str);
                break;
            } else {
                chunks.push(str.substr(0, chunkSize));
                str = str.substr(chunkSize);
            }
        }
        str = chunks.join("\n");
        str = '-----BEGIN PUBLIC KEY-----\n' + str + '\n-----END PUBLIC KEY-----';
        return str;
    }
    
    return crypto.createVerify('RSA-SHA1').update(purchaseData).verify(genPublicKey(publicKey), signature, 'base64');
}


回傳若為 true 則資料正確。

參考來源 : https://github.com/nothing2lose/node-InAppBilling

0 意見 :

張貼留言