Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/az/docs/integrations/epoint/api-reference/client.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,8 @@
- split_pay
- split_pay_with_saved_card
- split_pay_and_save_card
- create_widget
- create_token_payment
- apple_pay_session
- apple_pay
- google_pay
8 changes: 8 additions & 0 deletions docs/az/docs/integrations/epoint/api-reference/response.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,14 @@

::: integrify.epoint.schemas.response.SplitPayWithSavedCardResponseSchema

## Apple Pay & Google Pay

::: integrify.epoint.schemas.response.WidgetResponseSchema

::: integrify.epoint.schemas.response.TokenPaymentResponseSchema

::: integrify.epoint.schemas.response.TokenPayResponseSchema

## Extra

::: integrify.epoint.schemas.response.BaseWithCodeSchema
121 changes: 121 additions & 0 deletions docs/az/docs/integrations/epoint/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@

[Rusca](https://epointbucket.s3.eu-central-1.amazonaws.com/files/instructions/API%20Epoint%20ru.pdf)

Markdown versiyaları (bu saytda):

- [EPoint API (v1.0.3)](./official/api.md)
- [Apple Pay & Google Pay (JS SDK)](./official/apple-google-pay.md)

## Sürətli başlanğıc { #quickstart }

Ödəniş yaratmaq, müştərini ödəniş səhifəsinə yönləndirmək və statusu yoxlamaq:
Expand Down Expand Up @@ -53,6 +58,122 @@ Asinxron istifadə üçün `EPointAsyncRequest` import edib, eyni metodları `aw
| [`split_pay`][integrify.epoint.client.EPointClientClass.split_pay] | Ödənişi başqa EPoint istifadəçisi ilə bölüb ödəmə | `/api/1/split-request` | :fontawesome-solid-check: |
| [`split_pay_with_saved_card`][integrify.epoint.client.EPointClientClass.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` | :x: |
| [`split_pay_and_save_card`][integrify.epoint.client.EPointClientClass.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` | :fontawesome-solid-check: |
| [`create_widget`][integrify.epoint.client.EPointClientClass.create_widget] | Apple Pay/Google Pay widget-i yaratmaq | `/api/1/token/widget` | :x: |
| [`create_token_payment`][integrify.epoint.client.EPointClientClass.create_token_payment] | Apple Pay/Google Pay üçün token ödənişi yaratmaq | `/api/1/token/payment` | :x: |
| [`apple_pay_session`][integrify.epoint.client.EPointClientClass.apple_pay_session] | Apple Pay session-u almaq | `/api/1/token/apple/session` | :x: |
| [`apple_pay`][integrify.epoint.client.EPointClientClass.apple_pay] | Apple Pay ilə ödənişi tamamlamaq | `/api/1/token/apple/pay` | :x: |
| [`google_pay`][integrify.epoint.client.EPointClientClass.google_pay] | Google Pay ilə ödənişi tamamlamaq | `/api/1/token/google/pay` | :x: |

## Apple Pay & 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`][integrify.epoint.client.EPointClientClass.create_widget] |
| **JS SDK** | Düymələr birbaşa sizin səhifənizdə, öz dizaynınızla | [`create_token_payment`][integrify.epoint.client.EPointClientClass.create_token_payment], [`apple_pay_session`][integrify.epoint.client.EPointClientClass.apple_pay_session], [`apple_pay`][integrify.epoint.client.EPointClientClass.apple_pay], [`google_pay`][integrify.epoint.client.EPointClientClass.google_pay] |

### Widget { #apple-google-pay-widget }

```python
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:

```html
<iframe src="{{ widget_url }}" allow="payment"></iframe>

<script>
window.addEventListener('message', function (event) {
console.log(event.data); // {status: 'success', payment: {...}}
});
</script>
```

> **Qeyd**
>
> `event.data` brauzerdən gəldiyi üçün ona tam güvənməyin: ödənişin nəticəsini backend-də
> [`get_transaction_status`][integrify.epoint.client.EPointClientClass.get_transaction_status] ilə yoxlayın.

### JS SDK { #apple-google-pay-sdk }

Bu üsulda düymələr EPoint-in JS SDK-sı (`epoint-token-pay`) vasitəsilə göstərilir.
Axın belədir:

1. **Backend:** [`create_token_payment`][integrify.epoint.client.EPointClientClass.create_token_payment] ilə EPoint-də token ödənişi yaradın.
2. **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.
3. **Apple Pay:** SDK sizin session endpoint-inizə müraciət edir → [`apple_pay_session`][integrify.epoint.client.EPointClientClass.apple_pay_session].
4. **Ödəniş:** İstifadəçi ödənişi təsdiqlədikdən sonra SDK pay endpoint-inizə `id`, `token` və `billingContact` göndərir → [`apple_pay`][integrify.epoint.client.EPointClientClass.apple_pay] / [`google_pay`][integrify.epoint.client.EPointClientClass.google_pay].

Session və pay endpoint-ləri EPoint-dən gələn cavabı **olduğu kimi** (`resp.body`) qaytarmalıdır.

#### Frontend { #apple-google-pay-frontend }

```html
<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) { #apple-google-pay-backend }

```python
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_pay` sorğularının cavabında `redirect_url` gələ bilər (məs., 3DS üçün) — SDK bunu özü idarə edir.
> Uğurlu ödənişdən sonra statusu [`get_transaction_status`][integrify.epoint.client.EPointClientClass.get_transaction_status] ilə də yoxlaya bilərsiniz.

## Callback Sorğusu { #callback-request }

Expand Down
Loading
Loading