diff --git a/lib/google.js b/lib/google.js index 42b5bf2e..bbe459cf 100644 --- a/lib/google.js +++ b/lib/google.js @@ -160,7 +160,13 @@ module.exports.validatePurchase = function (dPubkey, receipt, cb) { receipt.data = receipt.receipt; } - if (!receipt.data || !receipt.signature) { + var tokenMap = { + clientId: googleTokenMap.clientID, + clientSecret: googleTokenMap.clientSecret, + refreshToken: googleTokenMap.refreshToken + }; + + if (!receipt.data || !(receipt.signature || (tokenMap.clientId && tokenMap.clientSecret && tokenMap.refreshToken))) { verbose.log(NAME, 'Failed: missing receipt content'); return cb(new Error('missing receipt data:\n' + JSON.stringify(receipt)), { status: constants.VALIDATION.FAILURE, @@ -174,11 +180,6 @@ module.exports.validatePurchase = function (dPubkey, receipt, cb) { } var pubkey = publicKeyMap.live; - var tokenMap = { - clientId: googleTokenMap.clientID, - clientSecret: googleTokenMap.clientSecret, - refreshToken: googleTokenMap.refreshToken - }; // override pubkey to allow dynamically fed public key to validate if (typeof dPubkey === 'string') { @@ -283,7 +284,7 @@ function isSubscription(receipt) { if (typeof receipt === 'string') { try { receipt = JSON.parse(receipt); - return receipt.data && receipt.data.autoRenewing !== undefined; + return receipt.isSubscription || (receipt.data && receipt.data.autoRenewing !== undefined); } catch (error) { return false; } @@ -291,12 +292,12 @@ function isSubscription(receipt) { if (typeof receipt.data === 'string') { try { receipt.data = JSON.parse(receipt.data); - return receipt.data && receipt.data.autoRenewing !== undefined; + return receipt.isSubscription || (receipt.data && receipt.data.autoRenewing !== undefined); } catch (error) { return false; } } - return receipt.data && receipt.data.autoRenewing !== undefined; + return receipt.isSubscription || (receipt.data && receipt.data.autoRenewing !== undefined); } function validateProduct(receipt, tokenMap, cb) {