scottybo/laravel-google-my-business

A package for Laravel which implements the Google My Business API
61,093 35
Install
composer require scottybo/laravel-google-my-business
Latest Version:2.2.0
PHP:>=7.2
License:Apache-2.0
Last Updated:Aug 1, 2022
Links: GitHub  ·  Packagist
Maintainer: scottybo

Laravel Google My Business

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 scottybo/laravel-google-my-business

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

"require": { "scottbo/laravel-google-my-business": "1.*" }

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

Scottybo\LaravelGoogleMyBusiness\GoogleMyBusinessServiceProvider::class,

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

'GoogleMyBusiness' => Scottybo\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();
    }

}

Useful links

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

Related Packages

m2quared/laravel-google-analytics

Google Analytics for Laravel 5

35,519 7
nilportugues/laravel5-json-api-dingo

Laravel5 JSONAPI and Dingo together to build APIs fast

1,498 30
lucasromanojf/laravel5-pdf

Provides the HTML2PDF functionality using the wkhtmltopdf library (Laravel 5)

72,577 7
faulker/laravel5-rackspace-cloudqueue

Rackspace CloudQueue driver for Laravel 5 Queue

13,992 0