Documentation Index

Fetch the complete documentation index at: https://help.frisbii.com/llms.txt

Use this file to discover all available pages before exploring further.

Google Play Store Integration

Prev Next

Your backend receives the Google Play purchase token from the app and forwards it to Frisbii Media for validation. Frisbii Media validates it server-to-server with Google and returns an inAppToken.


Add a Google Play purchase

/**
 * @Route("/google/purchases/add", name="GooglePurchase", methods={"POST"})
 */
public function addGooglePurchase(Request $request): Response
{
    $content       = json_decode($request->getContent(), true);
    // The app package name sent by the app as a request header
    $appIdentifier = $request->headers->get('x-app-bundle');
    // @see https://api.frisbii-media.com/#tag/App-Stores/operation/addGooglePlaystorePurchase
    $response = json_decode($client->request('POST', '/appstores/google/purchases', [
        'headers' => ['X-plenigo-token' => eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9],
        'json'    => [
            'appIdentifier' => $appIdentifier,
            'purchaseToken' => $content['purchaseToken'], // purchase token from Google Play Billing
            'productId'     => $content['productId'],     // Google Play product/SKU ID
        ],
    ])->getBody()->getContents(), true);
    // inAppToken identifies this purchase until it is associated with a customer
    $inAppToken = $response['inAppToken'];
    return new JsonResponse(['inAppToken' => $inAppToken]);
}

Verify an existing Google Play purchase

Google sends Real-time Developer Notifications (RTDN) via Pub/Sub to your backend for subscription events — renewals, cancellations, refunds, and so on. Forward each notification to Frisbii Media using the verify endpoint to keep the subscription state in sync.

/**
 * @Route("/google/purchases/verify", name="GooglePurchaseVerify", methods={"POST"})
 */
public function verifyGooglePurchase(Request $request): Response
{
    $content       = json_decode($request->getContent(), true);
    $appIdentifier = $request->headers->get('x-app-bundle');
    // @see https://api.frisbii-media.com/#tag/App-Stores/operation/verifyGooglePlaystorePurchase
    $response = json_decode($client->request('PUT', '/appstores/google/purchases/verify', [
        'headers' => ['X-plenigo-token' => eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9],
        'json'    => [
            'appIdentifier' => $appIdentifier,
            'purchaseToken' => $content['purchaseToken'],
            'productId'     => $content['productId'],
        ],
    ])->getBody()->getContents(), true);
    return new JsonResponse($response);
}

Tip: The verify endpoint is idempotent — passing the same purchase token more than once does not create a duplicate order.


Request payload reference

Field

Description

appIdentifier

Your Google Play application package name (e.g. com.example.myapp)

purchaseToken

The purchase token returned by Google Play Billing after a successful purchase

productId

The product or SKU identifier as configured in Google Play Console


Configuring Google Real-time Developer Notifications

To receive ongoing subscription lifecycle events from Google, you must configure RTDN in the Google Play Console:

  1. Go to Google Play Console → Your app → Monetisation setup → Real-time developer notifications

  2. Set the Pub/Sub topic to your backend's verify endpoint URL

  3. Google will send a Pub/Sub message for every subscription event; decode the data field (base64) to get the notification payload

Pass the purchaseToken and productId from the decoded notification to the verify endpoint.


API reference