Bibliothèque pour utiliser les outils fournis par HelloAsso.com
- V3 : Manipulation de l'API v3
- V5 : Manipulation de l'API v5
- PHP 5.6
- Webserver (Apache, ...)
- Un compte HelloAsso.com
- Un accès API (clé + password) HelloAsso
Copier simplement le dossier contenant le code HelloAsso sur votre disque (ou cloner le dépôt)
Version conseillée.
Initialiser la bibliothèque avec son client_id et son client_secret à l'aide
de la classe HelloAsso
puis appeler authenticate()
pour lancer la requête d'autentification
require_once 'HelloAsso.php'; // Facultatif si autoload.php est chargé
\HelloAsso\V5\HelloAsso::initialize()
->setClient('my_client_id', 'my_secreat_id')
->setOrganization('organization-slug')
->authenticate()
;
Les ResourceQuery
permettent d'effectuer une requête sur une ressource.
Exemple de récupération d'une liste de paiements :
use \HelloAsso\V5\Resource\Query\Payment as PaymentQuery;
use \HelloAsso\V5\Api\Pagination;
$pagination = null; /* @var Pagination $pagination */
$payment_list = PaymentQuery::create()
->setFromDate(date('Y').'-01-01') // Depuis le premier janvier
->setToDate(date('Y-m-d')) // Jusqu'à aujourd'hui
->search() // Appel de la requête "search"
->getCollection($pagination) // Récupère la collection de Payment
;
echo 'Current page : ' . $pagination->page . PHP_EOL;
echo 'Max page : ' . $pagination->max_page . PHP_EOL;
echo 'Page size : ' . $pagination->result_per_page . PHP_EOL;
// --------------------
// Ou bien, en récupérant d'abord la réponse
// --------------------
$response = PaymentQuery::create()
->setFromDate(date('Y').'-01-01') // Depuis le premier janvier
->setToDate(date('Y-m-d')) // Jusqu'à aujourd'hui
->search() // Appel de la requête "search"
;
$payment_list = $response->getCollection();
echo 'Current page : ' . $response->getPagination()->page . PHP_EOL;
echo 'Max page : ' . $response->getPagination()->max_page . PHP_EOL;
echo 'Page size : ' . $response->getPagination()->result_per_page . PHP_EOL;
Pour récupérer un seul enregistrement, on utilise la méthode get()
use \HelloAsso\V5\Resource\Query\Payment as PaymentQuery;
use \HelloAsso\V5\Resource\Payment;
$payment_id = 3;
$payment = PaymentQuery::create()->get($payment_id)->getResource();
// -------------------------
// Ou bien sous forme statique :
// -------------------------
$payment_id = 3;
$payment = Payment::get($payment_id);
use \HelloAsso\V5\Resource\Payment;
use \HelloAsso\V5\Api\Pagination;
$pagination = null; /* @var Pagination $pagination */
$payment_list = Payment::getAll($pagination);
echo 'Current page : ' . $pagination->page . PHP_EOL;
echo 'Max page : ' . $pagination->max_page . PHP_EOL;
echo 'Page size : ' . $pagination->result_per_page . PHP_EOL;
Lorsqu'une ressource peut-être incomplète, par exemple lorsqu'elle vient
d'une liste, d'une autre ressource, ou d'un callback,
il peut être nécessaire d'effectuer une requête de type get()
pour rafraichir ses données
use \HelloAsso\V5\Resource\Payment;
// Récupérer toutes les infos d'un ORDER depuis un PAYMENT
$payment_order = Payment::get(3)->order->refresh();
// Depuis un Callback
$callback = new \HelloAsso\V5\Callback();
if ($callback->isPayment())
{
$payment = $callback->getPayment()->refresh();
}
Ne pas faire de refresh() dans ces cas, a pour conséquence de n'avoir que des données partielles
Lorsque HelloAsso envoie une notification sur l'URL de callback spécifiée, les données concernant le payment / form / order sont transmises en POST dans le corps de la requête.
La classe Callback
permet de traiter ces données pour récupérer la ressource
use HelloAsso\V5\Callback;
$callback = new Callback(); // Suffisant pour initialiser depuis le POST body
if ($callback->isPayment())
{
$payment = $callback->getPayment(); // Données transmises (partielles)
$payment->refresh(); // Requête cURL pour récupéer toute la ressource
}
if ($callback->isForm())
{
$form = $callback->getForm(); // Données transmises (partielles)
$payment->refresh(); // Requête cURL pour récupéer toute la ressource
}
if ($callback->isOrder())
{
$order = $callback->getOrder(); // Données transmises (partielles)
$order->refresh(); // Requête cURL pour récupéer toute la ressource
}
Objets modélisant les données renvoyées par l'API
- \HelloAsso\V5\Resource\Payment - Un paiement
- \HelloAsso\V5\Resource\Organization - Infos sur la structure
- \HelloAsso\V5\Resource\Item - Item de vente
- \HelloAsso\V5\Resource\Form - Campagne (vente, adhésion, ...)
- \HelloAsso\V5\Resource\Order - Commande
- \HelloAsso\V5\Data\Payer - Informations payeur
- \HelloAsso\V5\Data\CustomField - Champ personnalisé
- \HelloAsso\V5\Data\CustomData - abstact - Liste de champs personnalisés
- \HelloAsso\V5\Data\User - Informations utilisateurs
- \HelloAsso\V5\Data\Meta - Informations de date création / modification
- \HelloAsso\V5\Data\Banner - Bannière de la campagne
- \HelloAsso\V5\Data\Amount - Infos montant : total, TVA, remise
- \HelloAsso\V5\Query\Form
- \HelloAsso\V5\Query\Item
- \HelloAsso\V5\Query\Order
- \HelloAsso\V5\Query\Payment
- \HelloAsso\V5\Query\PaymentRefund - Extension de Payment permettant d'appeller la méthode refund()
Il s'agit de l'objet Api\Response
Les méthodes
setResourceClass(string) : Api\Response
: Permet de définir la classe qui sera utilisée par défaut pargetResource()
etgetCollection()
. Utilisée pour l'usage générique deResourceQuery
.getHttpCode() : int
: Retourne le code HTTPisCollection() : boolean
: Si la réponse est une collection de resourcesisError() : boolean
: Si la réponse est une erreurthrowException() : Api\Response
: Lancer l'exception éventuelle.getException() : Api\ResponseError
: Retourne l'exception éventuellegetData() : stdClass
: Données JSON décodéesgetPagination() : Api\Pagination
: Pagination renvoyée par l'APIgetResource(string) : Resource
: Retourne la ressourcegetCollection(&Pagination) : Resource[]
: Retourne la liste de ressources
Voir les exemples pour l'utilisation de Query et Response
Cette API est dépréciée
- HelloAsso.php est le point d'entrée et de configuration de l'API HelloAsso
- Callback.php et ses classes dérivées (dossier callback/) permet de manipuler les notifications
- Resource.php et ses classes dérivées (dossier resource/) permet de manipuler les ressources (objets)
Inclure simplement HelloAsso.php puis configurer l'API avec la clé.
require_once 'HelloAsso.php';
HelloAsso\HelloAsso::apiConfig("id-api-helloasso", "password-api-helloasso");
Il est possible de n'utiliser que la partie API / Ressources HelloAsso et utiliser moins de fichier
Inclure alors seulement Resource.php et supprimer le dossier callback/ et le fichier Callback.php et HelloAsso.php
La configuration se fait alors en définissant les variables statiques
\HelloAsso\Api\Query::setDefaultAuth($api_id, $api_pass)
;
require_once 'Resource.php';
use HelloAsso\Api\Query;
Query::setDefaultAuth("id-api-helloasso", "password-api-helloasso");
Objets modélisant les données transmises lors de la réception d'une notification HelloAsso
- \HelloAsso\V3\Callback\Campaign : Notification de création/édition d'une campagne
- \HelloAsso\V3\Callback\Payment : Notification de paiement
Les méthodes :
- \HelloAsso\V3\Callback\Campaign::getCampaign() : \HelloAsso\V3\Resource\Campaign
- \HelloAsso\V3\Callback\Payment::getPayment() : \HelloAsso\V3\Resource\Payment
- \HelloAsso\V3\Callback\Payment::getAction() : \HelloAsso\V3\Resource\Action
Objets modélisant les données renvoyées par l'API
- \HelloAsso\V3\Resource\BasicCampaign : Campagne basique (information publique)
- \HelloAsso\V3\Resource\Action
- \HelloAsso\V3\Resource\Campaign
- \HelloAsso\V3\Resource\Payment
- \HelloAsso\V3\Resource\Organism
Chaque ressource (sauf BasicCampaign) possède les méthodes statiques suivantes:
get(string ID) : Resource
getAll(& Pagination) : Resource[]
BasicCampaign dispose des méthodes de recherche statiques
searchForOrganismSlug(string $slug, string $type = NULL, int $page = NULL, int $results_per_page = NULL, Pagination & $pagination = NULL) : BasicCampaign[]
pour le recherche des campagne d'un organisme donné par son slug et
searchForOrganismId(string $id, string $type = NULL, int $page = NULL, int $results_per_page = NULL, Pagination & $pagination = NULL) : BasicCampaign[]
pour le recherche des campagne d'un organisme donné par son id
Une action est liée à un paiement, une campagne et un organisme. Les méthodes getters sont donc disponibles :
- \HelloAsso\V3\Resource\Action::getCampaign() : Campaign
- \HelloAsso\V3\Resource\Action::getOrganism() : Organism
- \HelloAsso\V3\Resource\Action::getPayment() : Payment
Pour créer et exécuter une requête d'API personnalisée, utiliser la classe \HelloAsso\Api\Query
Les paramètres du constructeur sont :
- string ressource : La ressource à chercher, ou bien le nom (full-qualified. utiliser ::class) de la classe ressource
- string id (facultatif) : l'ID de la ressource à récupérer
Les méthodes :
- Methode statique
Query::create(string ressource[, string id])
pour récupérer une nouvelle requete setId(string)
pour l'ID de la ressource à récupérersetPage(int)
le numéro de page à récupérersetResultsPerPage(int)
le nombre de résultat par pagessetCampaignId(string)
id de la campagne sur laquelle limiter la recherchesetOrganismId(string)
id de l'organisme sur lequel limiter la recherchesetOrganismSlug(string)
slug de l'organisme pour limiter la recherche à cet organisme - uniquement pour l'API publiquesetPublic()
pour utiliser l'API publique (prend éventuellement le booléen en paramètre)setPrivate()
pour utiliser l'API privé (prend éventuellement le booléen en paramètre)addParam(string, string)
pour ajouter des paramètres de rechercheexecute()
pour exécuter la requête retourne une Api\Responsebuild()
pour retourner l'URL de requête depuis les éléments donnés
Les méthodes sont chaînables (sauf build() qui retourne une chaine de caractère). Par exemple : Query::create('payments')->setOrganimId('id')->execute()
Il s'agit de l'objet Api\V3\Response
Les méthodes
setResourceClass(string) : Api\Response
: Permet de définir la classe qui sera utilisée par défaut pargetResource()
. Cette fonction est utilisée par la classeQuery
lorsque c'est une classe qui est passée au constructeur. Permet d'éviter la répétion et les erreurs en permettant de chaînerQuery::create(RessouceClass::class)->[...]->execute()->throwException()->getResource()
getHttpCode() : int
: Retourne le code HTTPgetData() : stdClass
: Retourne les données JSON décodéesgetPagination() : Api\Pagination
: Retourne la pagination renvoyée par l'APIgetResource(string) : Resource
: Parse les données récupérée comme la ressource de classe donnée.isCollection() : boolean
: Pour savoir si la réponse est une collection de donnéeisError() : boolean
: Pour savoir si la réponse est une erreurgetException() : Api\Exception
: Pour récupérer l'exception éventuellethrowException() : Api\Response
: Pour lancer l'exception éventuelle. Si pas d'exception, retourne Api\Response. Cette méthode permet de chainer avec Query::execute()
Voir les exemples pour l'utilisation de Query et Response
Ce mode permet de modifier les propriétés non modifiables des objets telles que Callback\Payment::$action ou Callback\Payment::$payment ou encore Api\Action::$organism, Api\Action::$payment, Api\Action::$campaign
Cela permet de les redéfinir à la volée pour pousser des données de test.
Le mode test peut se définir pour l'ensemble de HelloAsso
HelloAsso\V3\HelloAsso::setTestMode(boolean)
Il peut aussi se définir indépendamment pour le callback et les resources
HelloAsso\V3\Callback::setTestMode(boolean);
\HelloAsso\V3\Resource::setTestMode(boolean);
Exemple de réaction à la notification d'un paiement
require_once 'helloasso/HelloAsso.php';
HelloAsso\HelloAsso::config("id-api", "password-api");
HelloAsso\HelloAsso::setTestMode(false);
$notification = HelloAsso\Callback::getPayment();
$organism = $notification->getAction()->getOrganism()->name;
$campaign = $notification->getAction()->getCampaign()->name;
$amount = $notification->getPayment()->amount;
$firstname = $notification->getPayment()->payer_first_name;
$lastname = $notification->getPayment()->payer_last_name;
echo "$firstname $lastname a payé la somme de $amount euros à $organism à l'occasion de la campagne : $campaign";
Récupérer les paiements de l'année
use HelloAsso\V3\Api\Query;
use HelloAsso\V3\Resource\Payment;
// Paiements de mon organisme depuis le début de l'année
$response =
Query::create(Payment::class)
->setPage(1) // Premiere page
->setResultsPerPage(50) // 50 résultats par page
->addParam('from', date('Y').'-01-01') // Depuis le 1er janvier
->addParam('to', date('Y-m-d')) // Jusqu'à aujourd'hui
->execute() // Exécute la requête
->throwException(); // Lance l'exception si elle existe
$code = $response->getHttpCode();
$pagination = $response->getPagination();
$paiements = $response->getResource(Payment::class);
/*
* Note : Puisqu'on a initialisé Query::create() avec le nom de la classe ("Payment::class"),
* on peut aussi utiliser ici directement $response->getResource() sans paramètre
*/
echo "Code HTTP resultat : $code" . PHP_EOL;
echo "Pagination : Page {$pagination->page} / {$pagination->$max_page} ({$pagination->result_per_page} résultats par page)" . PHP_EOL;
echo count($paiements) . ' paiements trouvés' . PHP_EOL;
var_export($paiements);
echo PHP_EOL;
- Francois Raoult
Licence MIT - Voir LICENSE