Это официальный клиент PHP API для ALMA.
Этот клиент PHP API используется в производстве на тысячах веб-сайтов электронной коммерции и предоставляет необходимые конечные точки для создания полной интеграции. Это, однако, не реализует полный API ALMA, как это задокументировано здесь. Если вам нужно использовать некоторые конечные точки, которые еще не реализованы, не стесняйтесь протянуть руку! (или даже лучше, отправьте пиар :))
Клиентская библиотека ALMA PHP API проверяется на всех недавно поддерживаемых версиях PHP. Современная поддерживаемая версия PHP настоятельно рекомендуется.
Обычно вы установили этот пакет через композитор:
composer require alma/alma-php-client
alma-php-client.zip последней опубликованной версии библиотеки. require_once " path/to/alma-php-client/vendor/autoload.php " ;Пример использования клиента API. (Проверьте документацию API для получения дополнительной информации)
$ 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> " ;
// ...Вы можете предпочесть использовать права на выполнение этой работы, но эта часть кода позволяет вам более знакомы с определениями 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 ();
// ...(Может быть предоставлен при создании платежей или статически определен в вашей панели 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 ;
}
// ... Клиент ALMA PHP распределен по лицензии MIT.