# 1. Ödeme Başlat

## Ödeme Başlat (Id)

<mark style="color:green;">`POST`</mark> `{{Base Adres}}/api/paywall/apm/pay`

{% hint style="info" %}
Önemli: **APM Ödeme Başlatma (DirectPay)** servisini kullanabilmeniz için 'Header' alanında '**apikeypublic**' ve '**apiclientpublic**' parametrelerini göndermeniz gerekmektedir.\
\
[<mark style="color:green;">**PaymentAPI Adresi**</mark>](https://developer.paywall.one/ortam)
{% endhint %}

#### Servise gönderilmesi gereken (HEADERS) parametreler şu şekildedir :

<table><thead><tr><th width="178">Parametre</th><th width="79">Tip</th><th width="107">Zorunlu</th><th width="403">Açıklama</th></tr></thead><tbody><tr><td>apikeypublic</td><td>string</td><td>Evet</td><td>Üye işyeri panelinden temin etmiş olduğunuz Public Key.</td></tr><tr><td>apiclientpublic</td><td>string</td><td>Evet</td><td>Üye işyeri panelinden temin etmiş olduğunuz Public Client.</td></tr></tbody></table>

#### Servise gönderilmesi gereken (BODY) parametreler şu şekildedir :

<table><thead><tr><th width="221">Parametre</th><th width="160">Tip</th><th width="148">Zorunlu</th><th width="336">Açıklama</th></tr></thead><tbody><tr><td>ApmKey</td><td>int</td><td>Evet (Koşullu)</td><td>APM sağlayıcısının Key bilgisi.<br><br>Bkz: <a href="../../sistem-verileri/apm">APM</a></td></tr><tr><td>ApmConnectionId</td><td>int</td><td>Evet (Koşullu)</td><td>APM listeleme servisiyle edinilen bağlantılara ait Id (kimlik) bilgisidir. Ödeme ekranınızı dinamik oluşturduğunuz senaryolarda bu parametreyle birlikte ilgili bağlantı üzerinden ödeme başlatabilirsiniz</td></tr><tr><td>CurrencyId</td><td>int</td><td>Evet</td><td>Ödeme'nin bağlatılmak istendiği para birimi<br><br>Bkz: <a href="../../sistem-verileri/para-birimleri">Para Birimleri</a></td></tr><tr><td>SectorId</td><td>short?</td><td>Hayır</td><td>Ödemenin gerçekleştirileceği sektör bilgisi. Sağlayıcılarla paylaşılmaktadır<br><br>Sektörler</td></tr><tr><td>MerchantUniqueCode</td><td>string</td><td>Evet</td><td>Ödeme için oluşturduğunuz tekil numara</td></tr><tr><td>Amount</td><td>decimal</td><td>Evet</td><td>Ödeme tutarı</td></tr><tr><td>Description</td><td>string</td><td>Evet</td><td>Ödeme'ye ait açıklama. Sağlayıcıya bağlı olarak bu açıklama ödeme ekranında görüntülenebilmektedir.</td></tr><tr><td>IsPreAuth</td><td>bool</td><td>Hayır</td><td>İlgili APM sağlayıcısının, ön provizyonlu işlem desteklemesi durumunda kullanılır</td></tr><tr><td>InstallmentCount</td><td>short</td><td>Hayır</td><td>İlgili APM sağlayıcısı, taksit desteği veriyorsa kullanılabilir</td></tr><tr><td>Payer</td><td><mark style="color:orange;">Payer</mark></td><td>Evet</td><td>Ödeme'nin gerçekleştirileceği ödeyici bilgilerinin barındığı nesnedir. Bu nesne altındaki parametrelerin zorunlulukları sağlayıcının beklediği parametreye göre farklılık gösterebilmektedir. <br><br>Örnek: CardNumber bekleyen bir sağlayıcı için Paywall API'si CardNumber parametresini zorunlu tutar</td></tr><tr><td>Products</td><td>List&#x3C;Products></td><td>Hayır</td><td>Gönderilmesi, raporlama ve takip anlamında yararlı olacaktır. Bu bilgiler gönderildiği durumda gönderilen ürünlerin toplam tutarı asıl işlem tutarıyla karşılaştırılır. Ancak gönderilmemesi durumunda bir karşılaştırma yapılmamaktadır</td></tr><tr><td>Provider:Parameters</td><td>Dynamic</td><td>Evet/Hayır</td><td>Sağlayıcının ödemenin gerçekleşmesi anında beklediği dinamik bilgiler olması durumunda bu parametrelerle ilgili bilgiler dışardan alınır ve sağlayıcılarla paylaşılır. Örnek mağaza kodu, mağaza kimliği gibi bilgileri sağlayıcının beklemesi durumunda bu bilgiler Paywall API'si tarafından kontrol edilir ve zorunlu tutulur.</td></tr></tbody></table>

#### <mark style="color:orange;">Payer</mark> :

<table><thead><tr><th width="221">Parametre</th><th width="160">Tip</th><th width="148">Zorunlu</th><th width="336">Açıklama</th></tr></thead><tbody><tr><td>Fullname</td><td>string</td><td>Evet (Koşullu)</td><td>Ödeyici tam isim</td></tr><tr><td>CardNumber</td><td>string</td><td>Evet (Koşullu)</td><td>Ödeyici kart numarası (yemek kartı vb)</td></tr><tr><td>CardId</td><td>string</td><td>Evet (Koşullu)</td><td>Ödeyici kart kimlik numarası (kartın APM sağlayıcısında saklanması durumunda çalışır)</td></tr><tr><td>Phone</td><td>string</td><td>Evet (Koşullu)</td><td>Ödeyicinin telefon numarası</td></tr><tr><td>Email</td><td>string</td><td>Evet (Koşullu)</td><td>Ödeyicinin e-posta adresi</td></tr><tr><td>UserIdentity</td><td>string</td><td>Evet (Koşullu)</td><td>Ödeyicinin sisteminizdeki kimlik bilgisi (TCKN/VKN)</td></tr><tr><td>ConsumerIdentity</td><td>string</td><td>Evet (Koşullu)</td><td>Ödeyicinin sisteminizdeki kimlik bilgisi (UserId)</td></tr><tr><td>Birthday</td><td>DateTime</td><td>Hayır</td><td>Ödeyicinin doğum günü bilgisi</td></tr><tr><td>CardAlias</td><td>string</td><td>Evet (Koşullu)</td><td>Ödeyiciye ait kart bilgisinin etiketi (Masterpass)</td></tr></tbody></table>

**Servise gönderilecek örnek bir JSON dosyası şu şekildedir :**

{% tabs %}
{% tab title="JSON" %}
{% code lineNumbers="true" %}

```json5
{
    "ApmKey": "ApmProviderKey", // Apm Provider Static Key (ApmConnectionId boş ise)
    "ApmConnectionId": 19, // Apm Connection Id (ApmKey boş ise)
    "CurrencyId": 1,
    "MerchantUniqueCode": "A1s2d3F4G5H6J7K8L9",
    "Amount": 1,
    "Description": "PW",
    "IsPreAuth": false,
    "InstallmentCount": 1,
    "Payer": {
        "Fullname": "",
        "CardNumber": "",
        "CardId": "",
        "Phone": "",
        "Email": "",
        "UserIdentity": "",
        "CardAlias": "",
        "ConsumerIdentity": "",
        "Birthday": null
    },
    "Products": [
        {
            "ProductId": "123",
            "ProductName": "Name",
            "ProductCategory": "Food",
            "ProductDescription": "Description of Product",
            "ProductAmount": 1
        }
    ],
    // MarketPlace tipindeki sağlayıcılar içindir,
    // kullanılmaması durumunda null gönderilebilir
    "Provider": {
        // Dynamic
        "Parameters": {
            "MerchantCode": "**********",
            "TerminalCode": "**********"
        }
    }
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

Servisten dönen parametreler şu şekildedir:

<table><thead><tr><th width="189">Parametre</th><th width="100.33333333333331">Tip</th><th>Açıklama</th></tr></thead><tbody><tr><td>ErrorCode</td><td>int</td><td>Hata kodu. İşlem başarılı ise '0' değerini döner.</td></tr><tr><td>Result</td><td>bool</td><td>True ya da false değeri döner. İşlem başarılı iste 'true' değerini döner.</td></tr><tr><td>Message</td><td>string</td><td>İşlem hatalıysa, bu hataya dair belirtilen mesajdır, locale parametresine göre dil desteği sunar.</td></tr><tr><td>Body</td><td>nesne</td><td>İşlem hatalıysa, bu hataya dair detay nesne</td></tr></tbody></table>

{% hint style="info" %}
**Önemli:** `PendingOtpConfirm` parametresinin `TRUE` gelmesi durumunda [Ödeme Onayla](https://developer.paywall.one/alternatif-odeme-apm/otp-tabanli/1.-odeme-onayla) sayfasındaki istekle birlikte ödemeyi onaylamalısınız
{% endhint %}

{% tabs %}
{% tab title="JSON" %}
{% code lineNumbers="true" %}

```json
{
    "ErrorCode": 0,
    "Result": true,
    "Message": "",
    "Body": {
        "ApmKey": "FoodCardProvider",
        "ApmConnectionId": 21,
        "ApmTransactionId": 4330,
        "UniqueCode": "85a07d7e-adc4-4698-a4cb-e643bdd705b1",
        "MerchantUniqueCode": "G5H6A4FKAJDLF3457394759834",
        "Amount": 1.0,
        "PendingOtpConfirm": true, // Eğer false ise OTP doğrulama gerekmez
        "ProviderDummyResponse": {
            "ErrorCode": 0,
            "Body": {
                "Success": true,
                "Code": null,
                "Message": null,
                "Status": 0,
                "OtpVerifyCounterInSeconds": 0,
                "Id": 58612,
                "ServiceId": 1000,
                "BatchNo": 102,
                "TransactionSequenceNumber": 35298,
                "TransactionAmount": 100,
                "TransactionApprovalCode": "000000004330",
                "LoyaltyMessage": "",
                "Hash": "fe556fe622f3a3aa2b484666b2d7887c54932a9f469f016c3d00b740ed36de95"
            },
            "HttpCode": 200
        }
    }
}
```

{% endcode %}
{% endtab %}
{% endtabs %}
