alma php client
v2.4.0
這是ALMA的官方PHP API客戶。
該PHP API客戶端用於數千個電子商務網站的生產中,並提供了構建全型集成的必要端點。但是,它尚未實現此處記錄的完整ALMA API。如果您發現自己需要使用一些尚未實施的端點,請隨時接觸! (甚至更好,提交PR :))
針對所有最近支持的PHP版本,對ALMA PHP API客戶庫庫進行了測試。強烈建議使用現代支持的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許可分配的。