What is the best way to access Google Play Developers API with Node.js?

Viewed 2733

There are only Python and Java client wrappers for android-publisher API (used to verify IAP). With Node.js it seems like the only way is via http however, I was wondering if there is a way to use the Google API Node.js client to generate the authorization token for OAuth service-to-service authentication and pass it to the http call. Generating the JWT token by hand is an arduous and lengthy process. Is there a best practice / recommended way for doing this the easy way?

2 Answers

Eldermao, just use google.auth.GoogleAuth to get the JWT client for authenticated with Google API. Here is the example from the google code :

// Before running the sample:
 * // - Enable the API at:
 * //   https://console.developers.google.com/apis/api/androidpublisher.googleapis.com
 * // - Login into gcloud by running:
 * //   `$ gcloud auth application-default login`
 * // - Install the npm module by running:
 * //   `$ npm install googleapis`
 *
 * const {google} = require('googleapis');
 * const androidpublisher = google.androidpublisher('v3');
 *
 * async function main() {
 *   const auth = new google.auth.GoogleAuth({
 *     // Scopes can be specified either as an array or as a single, space-delimited string.
 *     scopes: ['https://www.googleapis.com/auth/androidpublisher'],
 *   });
 *
 *   // Acquire an auth client, and bind it to all future calls
 *   const authClient = await auth.getClient();
 *   google.options({auth: authClient});
 *
 *   // Do the magic
 *   const res = await androidpublisher.purchases.subscriptions.get({
 *     // The package name of the application for which this subscription was purchased (for example, 'com.some.thing').
 *     packageName: 'placeholder-value',
 *     // The purchased subscription ID (for example, 'monthly001').
 *     subscriptionId: 'placeholder-value',
 *     // The token provided to the user's device when the subscription was purchased.
 *     token: 'placeholder-value',
 *   });
 *   console.log(res.data);
 *
 *   // Example response
 *   // {
 *   //   "acknowledgementState": 0,
 *   //   "autoRenewing": false,
 *   //   "autoResumeTimeMillis": "my_autoResumeTimeMillis",
 *   //   "cancelReason": 0,
 *   //   "cancelSurveyResult": {},
 *   //   "countryCode": "my_countryCode",
 *   //   "developerPayload": "my_developerPayload",
 *   //   "emailAddress": "my_emailAddress",
 *   //   "expiryTimeMillis": "my_expiryTimeMillis",
 *   //   "externalAccountId": "my_externalAccountId",
 *   //   "familyName": "my_familyName",
 *   //   "givenName": "my_givenName",
 *   //   "introductoryPriceInfo": {},
 *   //   "kind": "my_kind",
 *   //   "linkedPurchaseToken": "my_linkedPurchaseToken",
 *   //   "obfuscatedExternalAccountId": "my_obfuscatedExternalAccountId",
 *   //   "obfuscatedExternalProfileId": "my_obfuscatedExternalProfileId",
 *   //   "orderId": "my_orderId",
 *   //   "paymentState": 0,
 *   //   "priceAmountMicros": "my_priceAmountMicros",
 *   //   "priceChange": {},
 *   //   "priceCurrencyCode": "my_priceCurrencyCode",
 *   //   "profileId": "my_profileId",
 *   //   "profileName": "my_profileName",
 *   //   "promotionCode": "my_promotionCode",
 *   //   "promotionType": 0,
 *   //   "purchaseType": 0,
 *   //   "startTimeMillis": "my_startTimeMillis",
 *   //   "userCancellationTimeMillis": "my_userCancellationTimeMillis"
 *   // }
 * }
Related