calcinai / xero-php

A php library for the Xero API, with a cleaner OAuth interface and ORM-like abstraction.
MIT License
359 stars 262 forks source link

Webhook for multiple organisations #824

Open gitstashgithub opened 3 years ago

gitstashgithub commented 3 years ago

Hi guys,

I have a question about webhook. If our app is authorised for multiple Xero organisations, how do we make webhook work? Below is the Webhook example from the document, you can see the first parameter for Webhook is XeroPHP\Application.

// Configure the webhook signing key on the application
$application->setConfig(['webhook' => ['signing_key' => 'xyz123']]);
$webhook = new Webhook($application, $request->getContent());

/**
 * @return int
 */
$webhook->getFirstEventSequence();

/**
 * @return int
 */
$webhook->getLastEventSequence();

/**
 * @return \XeroPHP\Webhook\Event[]
 */
$webhook->getEvents();

However, to initialise the XeroPHP\Application variable, we need $tenantId.

$application = new \XeroPHP\Application($accessToken, $tenantId);

The problem is, there are multiple tenants(organisations), so we don't know the $tenantId.

Does anyone know how to make it work? Thanks!

Gordon

rodjsta commented 3 years ago

The JSON Payload contains the tenantId image

getEvents() will return you an array of Event classes. Each Event will have the tenantId and other information as per the incoming JSON.

gitstashgithub commented 3 years ago

@rodjsta thanks, but the problem is before this stage. You need $webhook to run getEvents(). To create $webhook, you need a XeroPHP\Application instance. To initialise a XeroPHP\Application instance, you need tenantId.

rodjsta commented 3 years ago

@gitstashgithub, right... I see. Sorry, I actually handle my webhook events independent of this package. I essentially capture each event from the payload and process them separately.

https://medium.com/swlh/handling-xero-webhooks-with-a-laravel-application-61eefd4492c4