Este es el cliente oficial de PHP API para Alma.
Este cliente de API PHP se está utilizando en producción en miles de sitios web de comercio electrónico y proporciona los puntos finales necesarios para construir una integración de flujo completo. Sin embargo, no implementa la API de Alma completa como se documenta aquí todavía. Si necesita usar algunos puntos finales que aún no se han implementado, ¡no dude en comunicarse! (o incluso mejor, envíe un PR :))
La Biblioteca de Clientes de API de ALMA PHP se prueba con todas las versiones PHP recientemente compatibles. Se recomienda muy recomendable una versión moderna y compatible con PHP.
Normalmente instalaría este paquete a través del compositor:
composer require alma/alma-php-client
alma-php-client.zip de la última versión de biblioteca publicada. require_once " path/to/alma-php-client/vendor/autoload.php " ;Un ejemplo de uso del cliente API. (Consulte la documentación de la API para obtener más información)
$ 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> " ;
// ...Puede preferir usar elegibilidades para hacer este trabajo, pero esta parte del código le permite familiarizarse más con las definiciones de FeePlans.
// ...
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 ();
// ...(se puede dar en la creación de pagos o definirse estáticamente en su tablero de 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 ;
}
// ... El cliente ALMA PHP se distribuye bajo la licencia MIT.