PHPackages                             highliuk/reserve-with-google - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. highliuk/reserve-with-google

ActiveLibrary[API Development](/categories/api)

highliuk/reserve-with-google
============================

Reserve with Google PHP SDK, to simplify the Appointments Redirect integration

1.0.0(1y ago)0261MITPHP

Since Sep 2Pushed 1y ago1 watchersCompare

[ Source](https://github.com/HighLiuk/php-reserve-with-google)[ Packagist](https://packagist.org/packages/highliuk/reserve-with-google)[ RSS](/packages/highliuk-reserve-with-google/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (3)Versions (2)Used By (0)

PHP Reserve With Google
=======================

[](#php-reserve-with-google)

Reserve with Google PHP SDK, to simplify the Appointments Redirect integration.

Installation
------------

[](#installation)

Use composer to install the package:

```
composer require highliuk/reserve-with-google
```

Usage
-----

[](#usage)

```
use HighLiuk\Rwg\Feeds\Merchants;
use HighLiuk\Rwg\Models\Merchant;

// create the merchants feed
$merchants = new Merchants;

// add a merchant to the feed
$merchant = new Merchant(
    id: 'appointments-merchant-1',
    name: 'Lorem ipsum Barbershop',
    telephone: '+11111222233',
    url: 'https://barbershop.com',
    latitude: 37.422113,
    longitude: -122.084041,
    country: 'US',
    locality: 'Mountain View',
    region: 'California',
    postal_code: '94043',
    street_address: '1600 Amphitheater Drive'
);
$merchants->add($merchant);

// export the feed
$merchants->export(__DIR__);
```

This will generate two files in the specified directory, ready to be uploaded to the Reserve With Google dropbox:

- `merchant_{timestamp}.json.gz` - the actual feed data
- `merchant_{timestamp}.filesetdesc.json.gz` - the fileset descriptor file

Supported feeds
---------------

[](#supported-feeds)

### Merchants

[](#merchants)

```
use HighLiuk\Rwg\Models\Merchant;

$merchant = new Merchant(
    id: 'appointments-merchant-1',
    name: 'Lorem ipsum Barbershop',
    telephone: '+11111222233',
    url: 'https://barbershop.com',
    latitude: 37.422113,
    longitude: -122.084041,
    country: 'US',
    locality: 'Mountain View',
    region: 'California',
    postal_code: '94043',
    street_address: '1600 Amphitheater Drive'
);
```

Generated files:

  `merchant_{timestamp}.json.gz` ```
{
    "data": [
        {
            "entityId": "appointments-merchant-1",
            "name": "Lorem ipsum Barbershop",
            "telephone": "+11111222233",
            "url": "https://barbershop.com",
            "location": {
                "latitude": 37.422113000000003,
                "longitude": -122.084041,
                "address": {
                    "country": "US",
                    "locality": "Mountain View",
                    "region": "California",
                    "postalCode": "94043",
                    "streetAddress": "1600 Amphitheater Drive"
                }
            }
        }
    ]
}
```

  `merchant_{timestamp}.filesetdesc.json.gz` ```
{
    "generationTimestamp": "1725266494",
    "name": "reservewithgoogle.entity",
    "dataFile": ["merchant_1725266494.json.gz"]
}
```

### Actions

[](#actions)

```
use HighLiuk\Rwg\Models\Action;

$action = new Action(
    merchant_id: 'appointments-merchant-1',
    link_id: 'appointment-link-1',
    url: 'https://www.epapartnerwebsite.com/appointment/appointment-partner-1',
);
```

Generated files:

  `action_{timestamp}.json.gz` ```
{
    "data": [
        {
            "entityId": "appointments-merchant-1",
            "linkId": "appointment-link-1",
            "url": "https://www.epapartnerwebsite.com/appointment/appointment-partner-1",
            "actions": [{ "appointmentInfo": {} }]
        }
    ]
}
```

  `action_{timestamp}.filesetdesc.json.gz` ```
{
    "generationTimestamp": "1725266606",
    "name": "reservewithgoogle.action.v2",
    "dataFile": ["action_1725266606.json.gz"]
}
```

### Services

[](#services)

```
use HighLiuk\Rwg\Feeds\Services;
use HighLiuk\Rwg\Models\Duration;
use HighLiuk\Rwg\Models\Price;
use HighLiuk\Rwg\Models\Range;
use HighLiuk\Rwg\Models\Service;
use HighLiuk\Rwg\Models\ServiceInfo;

require_once __DIR__ . '/vendor/autoload.php';

$services = new Services;

$service = new Service(
    id: 'service-1',
    merchant_id: 'appointments-merchant-1',
    localized_service_info: [
        'en' => new ServiceInfo(
            name: 'Service Type 1',
            category: 'Haircut',
            description: 'Lorem ipsum dolor sit amet'
        ),
        'es' => new ServiceInfo(
            name: 'Servicio Tipo 1',
            category: 'Cortes de pelo',
            description: 'el cliente esta muy contento'
        ),
    ],
    service_price: new Price(
        range: Range::exact(40000000),
        currency_code: 'USD',
    ),
    action_link: 'https://www.rwgpartnerwebsite.com/appointment/service-1/in-person-1',
    service_duration: new Duration(
        range: Range::exact(360),
    ),
);
```

Generated files:

  `service_{timestamp}.json.gz` ```
{
    "data": [
        {
            "merchantId": "appointments-merchant-1",
            "serviceId": "service-1",
            "localizedServiceName": {
                "value": "Service Type 1",
                "localizedValue": [
                    { "locale": "en", "value": "Service Type 1" },
                    { "locale": "es", "value": "Servicio Tipo 1" }
                ]
            },
            "localizedServiceCategory": {
                "value": "Haircut",
                "localizedValue": [
                    { "locale": "en", "value": "Haircut" },
                    { "locale": "es", "value": "Cortes de pelo" }
                ]
            },
            "localizedServiceDescription": {
                "value": "Lorem ipsum dolor sit amet",
                "localizedValue": [
                    { "locale": "en", "value": "Lorem ipsum dolor sit amet" },
                    { "locale": "es", "value": "el cliente esta muy contento" }
                ]
            },
            "servicePrice": {
                "priceInterpretation": "INTERPRETATION_EXACT",
                "minPrice": { "priceMicros": "40000000", "currencyCode": "USD" }
            },
            "actionLink": [
                {
                    "url": "https://www.rwgpartnerwebsite.com/appointment/service-1/in-person-1"
                }
            ],
            "serviceDuration": {
                "durationInterpretation": "INTERPRETATION_EXACT",
                "minDurationSec": "360"
            }
        }
    ]
}
```

  `service_{timestamp}.filesetdesc.json.gz` ```
{
    "generationTimestamp": "1725265955",
    "name": "glam.service.v0",
    "dataFile": ["service_1725265955.json.gz"]
}
```

License
-------

[](#license)

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

###  Health Score

24

—

LowBetter than 32% of packages

Maintenance35

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity39

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

616d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/7ab73500015458452d2ee5531aa38b2571e8a65fed47b185698feb7b06d0d6bb?d=identicon)[highliuk](/maintainers/highliuk)

---

Top Contributors

[![HighLiuk](https://avatars.githubusercontent.com/u/65017775?v=4)](https://github.com/HighLiuk "HighLiuk (1 commits)")

---

Tags

phpgooglemerchantredirectappointmentsreserverwg

###  Code Quality

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/highliuk-reserve-with-google/health.svg)

```
[![Health](https://phpackages.com/badges/highliuk-reserve-with-google/health.svg)](https://phpackages.com/packages/highliuk-reserve-with-google)
```

###  Alternatives

[google/gax

Google API Core for PHP

263103.1M454](/packages/google-gax)[jeroendesloovere/geolocation-php-api

This Geolocation PHP class connects to Google Maps API to find latitude/longitude or address.

75316.8k4](/packages/jeroendesloovere-geolocation-php-api)[x-fran/g-trends

Google Trends API for PHP

11955.6k](/packages/x-fran-g-trends)[coinpaymentsnet/coinpayments-php

A PHP wrapper for the CoinPayments.net v1 API.

55126.2k](/packages/coinpaymentsnet-coinpayments-php)[aurawindsurfing/google-translate

Free Laravel package for Paid Google Translate REST API with your own API key

1119.5k1](/packages/aurawindsurfing-google-translate)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
