EPoint¶
Warning
Bu sorğulardan istifadə edə bilmək üçün, düzgün "environment variable"-ları quraşdırmalısınız. Daha ətraflı burdan oxuya bilərsiniz.
Rəsmi Dokumentasiya (v1.0.3)¶
Markdown versiyaları (bu saytda):
Sürətli başlanğıc¶
Ödəniş yaratmaq, müştərini ödəniş səhifəsinə yönləndirmək və statusu yoxlamaq:
from integrify.epoint import EPointRequest
# 1. Ödəniş yaradın
resp = EPointRequest.pay(
amount=10,
currency='AZN',
order_id='order-1',
description='Sifariş #1',
)
if resp.ok:
# 2. Müştərini EPoint ödəniş səhifəsinə yönləndirin
print(resp.body.redirect_url)
# 3. Nəticə callback-ə gəlir; istənilən vaxt statusu özünüz də yoxlaya bilərsiniz
status = EPointRequest.get_transaction_status(transaction_id=resp.body.transaction)
print(status.body.status) # new, success, returned, error, server_error
else:
print(resp.body.message)
Asinxron istifadə üçün EPointAsyncRequest import edib, eyni metodları await ilə çağırın.
Sorğular listi¶
| Sorğu metodu | Məqsəd | EPoint API | Callback-ə sorğu atılır |
|---|---|---|---|
pay |
Ödəniş | /api/1/request |
|
get_transaction_status |
Ödəniş statusunun yoxlanılması | /api/1/get-status |
|
save_card |
Ödəniş olmadan kartı yadda saxlamaq | /api/1/card-registration |
|
pay_with_saved_card |
Saxlanılan kartla ödəniş | /api/1/execute-pay |
|
pay_and_save_card |
Ödəniş etmə və kartı yadda saxlamaq | /api/1/card-registration-with-pay |
|
payout |
Vəsaitlərin köçürülməsi | /api/1/refund-request |
|
refund |
Ödənişi tam və ya yarımçıq geri qaytarma | /api/1/reverse |
|
split_pay |
Ödənişi başqa EPoint istifadəçisi ilə bölüb ödəmə | /api/1/split-request |
|
split_pay_with_saved_card |
Saxlanılmış kartla ödənişi başqa EPoint istifadəçisi ilə bölüb ödəmə | /api/1/split-execute-pay |
|
split_pay_and_save_card |
Ödənişi başqa EPoint istifadəçisi ilə bölüb ödəmə və kartı saxlamaq | /api/1/split-card-registration-with-pay |
|
create_widget |
Apple Pay/Google Pay widget-i yaratmaq | /api/1/token/widget |
|
create_token_payment |
Apple Pay/Google Pay üçün token ödənişi yaratmaq | /api/1/token/payment |
|
apple_pay_session |
Apple Pay session-u almaq | /api/1/token/apple/session |
|
apple_pay |
Apple Pay ilə ödənişi tamamlamaq | /api/1/token/apple/pay |
|
google_pay |
Google Pay ilə ödənişi tamamlamaq | /api/1/token/google/pay |
Apple Pay & Google Pay¶
Apple Pay və Google Pay-i iki yolla qoşmaq olar:
| Üsul | Nə vaxt | Backend sorğuları |
|---|---|---|
| Widget | Ən sadə yol: düymələr EPoint-in səhifəsində, iframe/webview daxilində göstərilir | create_widget |
| JS SDK | Düymələr birbaşa sizin səhifənizdə, öz dizaynınızla | create_token_payment, apple_pay_session, apple_pay, google_pay |
Widget¶
from integrify.epoint import EPointRequest
resp = EPointRequest.create_widget(amount=2.5, order_id='12345678', description='Ödəniş')
widget_url = resp.body.widget_url # frontend-ə ötürün
widget_url-i saytda iframe, mobil tətbiqdə isə webview daxilində açın. Ödəniş bitdikdən sonra
widget səhifəyə message event-i göndərir:
<iframe src="{{ widget_url }}" allow="payment"></iframe>
<script>
window.addEventListener('message', function (event) {
console.log(event.data); // {status: 'success', payment: {...}}
});
</script>
Qeyd
event.databrauzerdən gəldiyi üçün ona tam güvənməyin: ödənişin nəticəsini backend-dəget_transaction_statusilə yoxlayın.
JS SDK¶
Bu üsulda düymələr EPoint-in JS SDK-sı (epoint-token-pay) vasitəsilə göstərilir.
Axın belədir:
- Backend:
create_token_paymentilə EPoint-də token ödənişi yaradın. - Frontend: SDK-nı qoşun, düymələri əlavə edin və
initTokenPay-i 1-ci addımda gələn ödənişlə çağırın. - Apple Pay: SDK sizin session endpoint-inizə müraciət edir →
apple_pay_session. - Ödəniş: İstifadəçi ödənişi təsdiqlədikdən sonra SDK pay endpoint-inizə
id,tokenvəbillingContactgöndərir →apple_pay/google_pay.
Session və pay endpoint-ləri EPoint-dən gələn cavabı olduğu kimi (resp.body) qaytarmalıdır.
Frontend¶
<script src="https://epoint.az/js/epoint-token-pay.min.js"></script>
<google-pay-button type="pay" color="white"></google-pay-button>
<apple-pay-button type="pay" color="black"></apple-pay-button>
<script>
initTokenPay({
payment: { id: 9998887, amount: '2.50' }, // create_token_payment cavabından
endpoints: {
apple: { session: '/epoint/apple/session', pay: '/epoint/apple' },
google: { pay: '/epoint/google' },
},
onError: function (error) { console.log({ error }) },
onSuccess: function (success) { console.log({ success }) },
});
</script>
Backend (FastAPI nümunəsi)¶
from fastapi import APIRouter, Request
from integrify.epoint import EPointAsyncRequest
router = APIRouter(prefix='/epoint')
@router.post('/apple/session')
async def apple_session(request: Request):
resp = await EPointAsyncRequest.apple_pay_session(origin=request.headers['origin'])
return resp.body
@router.post('/apple')
async def apple_pay(request: Request):
body = await request.json()
resp = await EPointAsyncRequest.apple_pay(
payment_id=body['id'],
token=body['token'],
billing_contact=body.get('billingContact'),
)
return resp.body.model_dump()
@router.post('/google')
async def google_pay(request: Request):
body = await request.json()
resp = await EPointAsyncRequest.google_pay(
payment_id=body['id'],
token=body['token'],
billing_contact=body.get('billingContact'),
)
return resp.body.model_dump()
Qeyd
apple_pay/google_paysorğularının cavabındaredirect_urlgələ bilər (məs., 3DS üçün) — SDK bunu özü idarə edir. Uğurlu ödənişdən sonra statusuget_transaction_statusilə də yoxlaya bilərsiniz.
Callback Sorğusu¶
Bəzi sorğular müştəri məlumat daxil etdikdən və arxa fonda bank işləmləri bitdikdən sonra, tranzaksiya haqqında məlumat sizin EPoint dashboard-da qeyd etdiyiniz callback URL-ə POST sorğusu göndərilir. Data siz adətən sorğu göndərdiyiniz formatda gəlir:
{
'data': 'base64data'
'signature': 'sha1signature'
}
Bu data-nı signature-ni yoxladıqdan sonra, decode etmək lazımdır. Callback üçün API yazdıqda, datanı alıb, helpers.py-dakı decode_callback_data funksiyası ilə həm signature yoxlanması həm də datanın decode-unu edə bilərsiniz. Bu funksiya sizə DecodedCallbackDataSchema formatında decode olunmuş datanı qaytarır.
Qeyd
FastAPI istifadəçiləri kiçik "shortcut"-dan istifadə edə bilərlər:
from fastapi import Fastapi, APIRouter, Depends from integrify.epoint.schemas.callback import DecodedCallbackDataSchema from integrify.epoint.helpers import decode_callback_data router = APIRouter() @router.post('/epoint/callback') async def epoint_callback(data: DecodedCallbackDataSchema = Depends(decode_callback_data)): ...Funksiyanı belə yazdıqda, data avtomatik signature-i yoxlanaraq decode edilir.
Callback Data formatı¶
Nə sorğu göndərməyinizdən asılı olaraq, callback-ə gələn data biraz fərqlənə bilər. DecodedCallbackDataSchema bütün bu dataları özündə cəmləsə də, hansı fieldlərin gəlməyəcəyini (yəni, decode-dan sonra None olacağını) bilmək yaxşı olar. Ümumilikdə, mümkün olacaq datalar bunlardır:
| Dəyişən adı | İzahı |
|---|---|
| status | Success və ya failed əməliyyatının nəticəsi |
| message | Ödənişin icra statusu haqqında mesaj |
| code | Bankın cavab kodu. 3 rəqəmli koddan, xəta/uğur mesajına çevrilir. |
| transaction | Epoint xidmətinin əməliyyat IDsi |
| bank_transaction | Bank ödəniş əməliyyatı IDsi |
| bank_response | Ödəniş icrasının nəticəsi ilə bankın cavabı |
| operation_code | 001-kart qeydiyyatı\n100- istifadəçi ödənişi |
| rrn | Retrieval Reference Number - unikal əməliyyat identifikator. Yalnız uğurlu bir əməliyyat üçün mövcuddur |
| card_mask | Ödəniş səhifəsində göstərilən istifadəçi adı |
| card_name | 123456**1234 formatında əks edilən kart maskası |
| amount | Ödəniş məbləği |
| order_id | Tətbiqinizdə unikal əməliyyat ID |
| card_id | Ödənişləri yerinə yetirmək üçün istifadə edilm lazım olan unikal kart identifikatoru |
| split_amount | İkinci istifadəçi üçün ödəniş məbləği |
| other_attr | Əlavə göndərdiyiniz seçimlər |
Sorğudan asılı olaraq, bu data-lar callback-də GƏLMİR (yəni, avtomatik None dəyəri alır):
| Sorğu metodu | Callback-də gəlməyəcək datalar |
|---|---|
pay |
card_id, split_amount |
save_card |
order_id, transaction, amount, other_attr |
pay_and_save_card |
message |
split_pay |
- |
split_pay_and_save_card |
message |
Qeyd
Qalan bütün data-lar sorğu success olduqda gəlir, əks halda, onlar da
Nonedəyəri alır.