@haivinh/in-app
TypeScript icon, indicating that this package has built-in type declarations

1.0.9 • Public • Published

NestJS npm package In-app purchase subscription Apple and Android

Description

  • The library utilizes Apple Store v2 and Google API + Android Publisher v3 for authenticating orders through a NestJS server.

Required

Package dependencies

  • googleapis : Because Google has to use a package for authentication, I'm compelled to use Google API's authentication.
  • jsonwebtoken : JWT

Apple Config

  • BUNDER_ID : string
  • DOMANI_APPLESTORE : enum string
  • ISSUER_ID : string
  • KEY_IDENTIFIER :string
  • PATH_PRIVATE_KEY_APPLE : string (*note : path file key example './src/private_key.p8')

Google Config

  • PACKAGE_NAME : string
  • PATH_PRIVATE_KEY_GOOGLE : string

Installation

  • Install package :
  npm i @haivinh/in-app

Using

Import module

  • Import module :
  import { InAppModule } from '@haivinh/in-app';
  // .....
  imports: [
      // ....
      InAppModule.CustomerOptionModule({
        appleConfig: {
          BUNDER_ID: process.env.BUNDER_ID,
          DOMANI_APPLESTORE: 'https://api.storekit-sandbox.itunes.apple.com',
          ISSUER_ID: process.env.ISSUER_ID,
          KEY_IDENTIFIER: process.env.KEY_IDENTIFIER,
          PATH_PRIVATE_KEY_APPLE:  process.env.PATH_PRIVATE_KEY_APPLE ?? './src/private_key.p8',
        },
        gooleConfig: {
          PACKAGE_NAME: process.env.PACKAGE_NAME,
          PATH_PRIVATE_KEY_GOOGLE: process.env.PATH_PRIVATE_KEY_GOOGLE ?? './src/google_services.json',
        },
      }),
    ],
  • Using services :
  import {InAppService} from '@haivinh/in-app'
  //.....
  constructor(
    private inAppService: InAppService,
  ) {}
  ....
  const verifySubscriptionApple = await this.inAppService.verifyOrderAppleStore(transactionId); // transactionId in order user buy order applestore
  const verifySubscriptionGoogle =await this.inAppService.verifyOrderGooglePlay(productId,purchaseToken)  // productId,purchaseToken in order user buy order googleplay

Webhook

Apple

Required

Using

  • example
  import {InAppService} from '@haivinh/in-app'
 
  //.....
  constructor(
    private inAppService: InAppService,
  ) {}
 
  //....
  testinfunc(
    data: WebHookDataIOS,
    dataTransactionInfo: JWSTransactionDecodedPayload,
    dataRenewalInfo: JWSRenewalInfo,
  ) {}
  
  public async webhookApple(payload){
  //...
  await this.webhookkServerApple(
      payload,
      {
        // event switch
        CONSUMPTION_REQUEST: this.testinfunc,       //Promise<void> | void || undefined;
        DID_CHANGE_RENEWAL_PREF: this.testinfunc,   //Promise<void> | void || undefined;
        SUBSCRIBED: this.testinfunc,
        ....
      },
      './src/LOG', // optional create folder src/LOG/IN_APP/IOS/
    );
  }

Google

Required

Using

  • example
  import {InAppService} from '@haivinh/in-app'
 
  //.....
  constructor(
    private inAppService: InAppService,
  ) {}
 
  //....
  testinfunc(
    data: WebHookDataGoogle,
    dataOrder: SubscriptionAndroid,
  ) {}
  
  public async webhookGoogle(payload){
  //...
  await this.webhookkServerGoogle(
      payload,
      {
        // event switch
        SUBSCRIPTION_CANCELED: this.testinfunc,       //Promise<void> | void || undefined;
        SUBSCRIPTION_PURCHASED: this.testinfunc,   //Promise<void> | void || undefined;
        SUBSCRIPTION_EXPIRED: this.testinfunc,
        ....
      },
      './src/LOG', // optional create folder src/LOG/IN_APP/GOOGLE/
    );
  }

Change Log

See Changelog for more information.

Author

Hai Vinh haivinhinspirit@gmail.com

License

Licensed under the MIT License - see the LICENSE file for details.

Package Sidebar

Install

npm i @haivinh/in-app

Weekly Downloads

10

Version

1.0.9

License

MIT

Unpacked Size

40.6 kB

Total Files

14

Last publish

Collaborators

  • haivinh