Il s'agit du client officiel de l'API PHP pour Alma.
Ce client API PHP est utilisé en production sur des milliers de sites Web de commerce électronique et fournit les points de terminaison nécessaires pour créer une intégration complète. Il n'implémente cependant pas encore l'API ALMA complète comme documenté ici. Si vous avez besoin d'utiliser des points de terminaison qui ne sont pas encore mis en œuvre, n'hésitez pas à tendre la main! (ou même mieux, soumettez un PR :))
La bibliothèque client API ALMA PHP est testée contre toutes les versions PHP récemment prises en charge. Une version PHP moderne et prise en charge est fortement recommandée.
Vous installeriez normalement ce package via le compositeur:
composer require alma/alma-php-client
alma-php-client.zip de la dernière version de bibliothèque publiée. require_once " path/to/alma-php-client/vendor/autoload.php " ;Un exemple d'utilisation du client API. (Vérifiez la documentation de l'API pour plus d'informations)
$ alma = new Alma API Client ( $ apiKey , [ ' mode ' => Alma API Client:: TEST_MODE ]); // ...
$ amountInCents = 150000 ; // 1500 euros
$ customerBillingCountry = "" ; // can be an empty string but NOT null
$ customerShippingCountry = " FR " ; // billing_address has priority over shipping_address (if not empty)
try {
$ eligibilities = $ alma -> payments -> eligibility (
[
' purchase_amount ' => $ amountInCents ,
' billing_address ' => [ // (optional) useful to check eligibility for a specific billing country
' country ' => $ customerBillingCountry // can be an empty string but not null
],
' shipping_address ' => [ // (optional) useful to check eligibility for a specific shipping country
' country ' => $ customerShippingCountry
],
' queries ' =>
[
[
' installments_count ' => 1 ,
' deferred_days ' => 30 ,
],
[
' installments_count ' => 2 ,
],
[
' installments_count ' => 3 ,
],
[
' installments_count ' => 4 ,
],
[
' installments_count ' => 10 ,
],
],
],
$ raiseOnError = true // throws an exception on 4xx or 5xx http return code
// instead of just returning an Eligibility Object with isEligible() === false
);
} catch ( Alma API RequestError $ error ) {
header ( " HTTP/1.1 500 Internal Server Error " );
die ( $ error -> getMessage ());
}
foreach ( $ eligibilities as $ eligibility ) {
if (! $ eligibility -> isEligible ()) {
die ( ' cart is not eligible ' );
}
}
// ... // ...
echo " <form> " ;
echo " <h2>Available feePlans are:</h2> " ;
foreach ( $ alma -> merchants -> feePlans ( $ kind = FeePlan:: KIND_GENERAL , $ installmentsCounts = " all " , $ includeDeferred = true ) as $ feePlan ) {
if (! $ feePlan -> allowed ) {
continue ;
}
printf ( ' <label for="%s">Pay in %s by %s installments count</label> ' , $ feePlan -> getPlanKey (), $ feePlan -> getDeferredDays (), $ feePlan -> getInstallmentsCount ());
printf ( ' <input id="radio-%s" type="radio" name="fee-plan" value="%s"> ' , $ feePlan -> getPlanKey (), $ feePlan -> getPlanKey ());
}
echo " <button type= " submit " >Submit</button> " ;
echo " </form> " ;
// ...Vous pouvez préférer utiliser des éligibles pour faire ce travail, mais cette partie du code vous permette de vous familiariser avec les définitions de fécondes.
// ...
function formatMoney ( int $ amount ) {
return sprintf ( " %.2f %s " , round ( intval ( $ amount ) / 100 , 2 ), " € " );
}
function formatPercent ( int $ amount ) {
return sprintf ( " %.2f %s " , round ( intval ( $ amount ) / 100 , 2 ), " % " );
}
// ...
foreach ( $ eligibilities as $ eligibility ) {
// display following payment plan (or not eligible message) on feePlan selection using javascript.
printf ( ' <div id="table-%s"> ' , $ eligibility -> getPlanKey ());
if (! $ eligibility -> isEligible ()) {
echo " This fee plan is not eligible! " ;
echo " </div> " ;
continue ;
}
if (! $ paymentPlans = $ eligibility -> getPaymentPlan ()) {
echo " No payment plan found for current eligibility! (that should not happen) " ;
echo " </div> " ;
continue ;
}
echo " <ul> " ;
foreach ( $ paymentPlans as $ paymentPlan ) {
$ planDefinition = sprintf (
" <li>You will pay %s on %s including %s fees & %s of interest</li> " ,
formatMoney ( $ paymentPlan [ ' total_amount ' ]),
( new DateTime ())-> setTimestamp ( $ paymentPlan [ ' due_date ' ])-> format ( ' Y-m-d ' ),
formatMoney ( $ paymentPlan [ ' customer_fee ' ]),
formatMoney ( $ paymentPlan [ ' customer_interest ' ])
);
}
echo " </ul> " ;
echo " <div> " ;
echo " Annual Interest Rate: " . formatPercent ( $ eligibility -> getAnnualInterestRate ()) . " <br> " ;
echo " Order Amount: " . formatMoney ( $ amountInCents );
echo " Total Cost Amount: " . formatMoney ( $ eligibility -> getCustomerTotalCostAmount ());
echo " </div> " ;
echo " </div> " ;
}
// ... // ...
$ payment = $ alma -> payments -> createPayment (
[
' origin ' => ' online ' ,
' payment ' =>
[
' return_url ' => ' <where_the_customer_will_be_redirect_after_alma_checkout> ' ,
' ipn_callback_url ' => ' <your_ipn_callback_url> ' ,
' purchase_amount ' => 150000 ,
' installments_count ' => 4 ,
' custom_data ' =>
[
' my_very_important_key ' => ' <the_context_custom_value> ' ,
],
' locale ' => ' fr ' ,
' billing_address ' =>
[
' first_name ' => ' John ' ,
' last_name ' => ' Doe ' ,
' email ' => ' [email protected] ' ,
' line1 ' => ' 1 rue de Rome ' ,
' postal_code ' => ' 75001 ' ,
' city ' => ' Paris ' ,
' country ' => ' FR ' ,
],
' shipping_address ' =>
[
' first_name ' => ' John ' ,
' last_name ' => ' Doe ' ,
' email ' => ' [email protected] ' ,
' line1 ' => ' 1 rue de Rome ' ,
' postal_code ' => ' 75001 ' ,
' city ' => ' Paris ' ,
' country ' => ' FR ' ,
],
],
' customer ' =>
[
' first_name ' => ' John ' ,
' last_name ' => ' Doe ' ,
' email ' => ' [email protected] ' ,
' phone ' => ' 06 12 34 56 78 ' ,
' addresses ' =>
[
[
' first_name ' => ' John ' ,
' last_name ' => ' Doe ' ,
' email ' => ' [email protected] ' ,
' phone ' => ' 06 12 34 56 78 ' ,
],
],
],
]
);
// store $payment->id and link it to the customer order here ;)
header ( ' Location: ' . $ payment -> url );
exit ();
// ...(Peut être donné sur la création de paiement ou défini statiquement dans votre tableau de bord Alma)
// ...
if (! isset ( $ _GET [ ' pid ' ]) || empty ( $ _GET [ ' pid ' ])) {
header ( " HTTP/1.1 400 Bad Request " );
die ();
}
// retrieve your local order by payment id
$ order = getOrderByPaymentId ( $ _GET [ ' pid ' ])
if (! $ order ) {
header ( " HTTP/1.1 404 Not Found " );
die ();
}
// check $payment->state & do the order / customer stuff you want here :D
header ( " HTTP/1.1 200 " );
exit ();
// ... // ...
$ payment = $ alma -> payments -> fetch ( $ paymentId );
switch ( $ payment -> state ) {
case Alma API Entities Payment:: STATE_IN_PROGRESS : break ;
case Alma API Entities Payment:: STATE_PAID : break ;
}
// ... Le client ALMA PHP est distribué sous la licence MIT.