ingress-it-solutions/laravel-google-my-business

A package for Laravel which implements the Google My Business API

2.2.1 2023-02-01 10:18 UTC

This package is not auto-updated.

Last update: 2024-11-07 18:03:21 UTC


README

Note: To use the Google My Business API you have to apply for access: https://docs.google.com/forms/d/1XTQc-QEjsE7YrgstyJxbFDnwmhUhBFFvpNJBw3VzuuE/viewform

This is a Laravel ready implementation of the Google My Business PHP Library (v4.4) as provided by Google on https://developers.google.com/my-business/samples/

Please refer to https://developers.google.com/my-business/reference/rest/ for information on how the Google My Business API functions - more useful links are available at the bottom of this document.

Debugging

I'm putting this above everything else as it's extremely important. The Google My Business Client library doesn't support detailed error responses: https://developers.google.com/my-business/content/support#detailed_error_responses

So when something goes wrong, you get an extremely unhelpful 400 error message such as Request contains an invalid argument.

To get more detailed error messages we need to add the HTTP header: X-GOOG-API-FORMAT-VERSION: 2 to the request and the error message that gets returned will be a lot more useful.

There isn't a pretty way to do this, but all you need to do is open:

/vendor/google/apiclient/src/Google/Http/REST.php

And in the doExecute function modify as follows

$httpHandler = HttpHandlerFactory::build($client);

// Add the header to the request
$request = $request->withHeader('X-GOOG-API-FORMAT-VERSION', '2');

Once you've finished debugging, remove this added line.

Installation

Run composer require ingress-it-solutions/laravel-google-my-business

Or to install via composer - edit your composer.json to require the package.

"require": { "ingress-it-solutions/laravel-google-my-business": "2.*" }

Then run composer update in your terminal to pull it in.

Laravel

Important: It's highly recommend you use https://github.com/pulkitjalan/google-apiclient to handle the Google Client setup. The code examples further down this document assume you're using this library.

To use this Google My Business package in a Laravel project add the following to the providers array in your config/app.php

IngressITSolutions\LaravelGoogleMyBusiness\GoogleMyBusinessServiceProvider::class,

Next add the following to the aliases array in your config/app.php

'GoogleMyBusiness' => IngressITSolutions\LaravelGoogleMyBusiness\GoogleMyBusiness::class

Google My Business Discovery document

The Google My Business API discovery document is a JSON document that describes the surface for a particular version of the API. You use the discovery document in conjunction with the Google API Discovery Service.

mybusiness_google_rest_v4p4.json has been included with this project for your reference (downloaded from: https://developers.google.com/my-business/samples/)

Tips

Code example

(Work in progress)

use Google; // See: https://github.com/pulkitjalan/google-apiclient
use GoogleMyBusiness;

class MyExampleClass
{
  function authRedirect()
  {
    // Define the GMB scope
    $scopes = ['https://www.googleapis.com/auth/plus.business.manage'];

    // Define any configs that overrride the /config/google.php defaults from pulkitjalan/google-apiclient
    $googleConfig = array_merge(config('google'), [
      'scopes' => $scopes,
      'redirect_uri' =>
        config('app.callback_url') . '/callback/google/mybusiness',
    ]);

    // Generate an auth request URL
    $googleClient = new Google($googleConfig);
    $loginUrl = $googleClient->createAuthUrl();

    // Send user to Google for Authorisation
    return redirect()->away($loginUrl);
  }

  function getAccountName(Google $googleClient)
  {
    $gmb = new GoogleMyBusiness($googleClient);
    return $gmb->getAccountName();
  }
}

Credit

Thanks to Scotty Bowler for creating this package initially. We are extending it to use for Laravel 9.

Useful links

Mostly for my reference as I develop this package, but you might find them useful too!