# 3D ile ödeme

3D’li ödeme iki  adımdan oluşur. Bunlar **3D ödeme başlatma** ve **3D ödemesi** yapmaktır. 3D Ödeme başlatma servisi ile bankaların 3D doğrulama sayfalarına erişim yapılacak url ve ya html içeriğe erişebileceksiniz. 3D ödemesi ile de 3D doğrulama sonucuna göre ödeme işlemini sonlandırırsınız.

&#x20;

* [x] **3D ödeme başlatma** servisine ödeme servisine ek olarak 3D doğrulama sonucunun döneceği **retur\_url** parametresi ile request gönderilir.
* [x] Uygulamanızı **3D ödeme başlatma** servisinden dönen **"post\_url**" parametresine redirect edersiniz.
* [x] Bankaların 3D doğrulama ekranı açılır.
* [x] 3D doğrulama sonucu başlatma servisine gönderdiğiniz **return\_url** parametresinde belirtilen url'e post edilir.
* [x] **return\_url**'inize gelen parametreleri 3D ödemesi servisine post edersiniz ve sonucu kontrol edersiniz.

## 3D ödeme başlatma

Ödeme işleminden farklı olarak **return\_ur**l parametresi gönderilir. Servisden dönen post\_url ya da html\_content parametrelerini kullanarak bankaların 3D doğrulama sayfasını açabilirsiniz.

{% hint style="info" %}
<https://api.paynet.com.tr/v2/transaction/tds_initial>
{% endhint %}

{% tabs %}
{% tab title="İstek Parametreleri" %}

| No           | Parametre İsmi          | Tip         | Zorunlu | Açıklama                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| ------------ | ----------------------- | ----------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 1            | **amount**              | decimal     | Evet    | Kredi kartından çekilecek tutar.                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| 2            | **reference\_no**       | string(50)  | Evet    | Ödeme işleminin ilişkili olduğu referans numarası. Tekil (unique) bir veri olmalı. ( örn: sipariş numarası )                                                                                                                                                                                                                                                                                                                                                            |
| 3            | **return\_url**         | string(256) | Evet    | 3D doğrulama sonucunun post edileceği URL                                                                                                                                                                                                                                                                                                                                                                                                                               |
| 4            | **domain**              | string(256) | Evet    | İşlemin yapıldığı uygulamanın domain bilgisi. ( örn: [www.acme.com](http://www.acme.com) )                                                                                                                                                                                                                                                                                                                                                                              |
| 5            | **card\_holder**        | string(50)  | Hayır   | <p>Kart sahibi bilgisi. </p><p>Saklı kart ile işlem yapılmıyorsa zorunlu.</p>                                                                                                                                                                                                                                                                                                                                                                                           |
| 6            | **pan**                 | string      | Hayır   | <p>Kart numarası. </p><p>Saklı kart ile işlem yapılmıyorsa zorunlu.</p>                                                                                                                                                                                                                                                                                                                                                                                                 |
| 7            | **month**               | int         | Hayır   | <p>Son kullanma tarihi Ay bilgisi. ( örn: 8,12 ) </p><p>Saklı kart ile işlem yapılmıyorsa zorunlu.</p>                                                                                                                                                                                                                                                                                                                                                                  |
| 8            | **year**                | int         | Hayır   | Son kullanma tarihi Yıl bilgisi. ( örn: 2020, 2030  ) Saklı kart ile işlem yapılmıyorsa zorunlu.                                                                                                                                                                                                                                                                                                                                                                        |
| 9            | **cvc**                 | string      | Hayır   | <p>Kart güvenlik kodu. </p><p>Saklı kart ile işlem yapılmıyorsa zorunlu.</p>                                                                                                                                                                                                                                                                                                                                                                                            |
| 10           | **card\_hash**          | string      | Hayır   | Saklı kartın token bilgisi. Kart bilgileri girilmemiş ise bu bilgi zorunlu.                                                                                                                                                                                                                                                                                                                                                                                             |
| 11           | **card\_holder\_phone** | string(10)  | Hayır   | Kart sahibinin telefon numarası                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| 12           | **card\_holder\_mail**  | string(60)  | Hayır   | Kart sahibi email adresi.                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| 13           | **description**         | string(140) | Hayır   | İşlem ile ilgili açıklama alanı.                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| 14           | **instalment**          | int         | Hayır   | İşlemin kaç taksit yapılacağı bilgisi. Değer gönderilmezse tek çekim uygulanır.                                                                                                                                                                                                                                                                                                                                                                                         |
| 15           | **agent\_id**           | string(10)  | Hayır   | Eğer alt bayileriniz var ise işlemin hangi bayi üzerinden geldiğini bu alana bayi kodu göndererek yapabilirsiniz.                                                                                                                                                                                                                                                                                                                                                       |
| 16           | **company\_amount**     | decimal     | Hayır   | Eğer alt bayileriniz var ise işlemin ne kadarının sizin hesabınıza aktarılacağını belirleyebilirsiniz.                                                                                                                                                                                                                                                                                                                                                                  |
| 17           | **add\_commission**     | bool        | Hayır   | İşlem komisyonunun karttan çekilecek tutar'a eklenmesini istiyorsanız "true" gönderebilirsiniz.                                                                                                                                                                                                                                                                                                                                                                         |
| 18           | **transaction\_type**   | char(1)     | Hayır   | Satış ya da ön provizyon. 1 satış, 3 ön provizyon. Varsayılan satış işlemidir.                                                                                                                                                                                                                                                                                                                                                                                          |
| 19           | **ratio\_code**         | string(8)   | Hayır   | Paynet.com.tr yönetim ekranlarında “API oran tanımları” sayfasından tanımlayabileceğiniz oran tablolarının “oran kodunu” bu alanda gönderebilirsiniz. Gönderdiğiniz oran koduna ait oran tablosu üzerinden komisyon hesaplaması yapılır. Bu sayede API üzerinden istediğiniz oranlar ile işlem yapabilirsiniz.                                                                                                                                                          |
| 20           | **save\_card**          | bool        | Hayır   | Ödeme işlemi ile birlikte kredi kart numarasının da saklanması istiyorsanız bu  parametreyi true yollayabilirsiniz. Kart saklama işlemi yapıyorsanız card\_desc zorunlu, card\_owner\_id ya da user\_unique\_id değerlerinden en az birini göndermeniz zorunlu.                                                                                                                                                                                                         |
| 21           | **card\_desc**          | string(100) | Hayır   | Kart saklama işlemi yapılıyor ise bu alan zorunludur.                                                                                                                                                                                                                                                                                                                                                                                                                   |
| 22           | **user\_unique\_id**    | string      | Hayır   | Üye iş yeri tarafından verilen kullanıcıya özgü benzersiz id. İlk defa kart saklama yapılıyorsa zorunlu. İlk kart saklama tamamlandıktan sonra Paynet tarafından bu kullanıcıya benzersiz bir değer atanır( card\_owner\_id). Bu değeri kendi sisteminizde kullanıcınız ile ilişkilendirerek saklamalısınız. Daha sonra bu kullanıcıya yapılan kart saklama işlemlerinde user\_unique\_id yerine Paynet tarafından verilen card\_owner\_id değişkenini kullanmalısınız. |
| 23           | **card\_owner\_id**     | string      | Hayır   | İlk defa kart saklama yapıldıktan sonra, Paynet tarafından user\_unique\_id’ye göre oluşturulan kart sahibinin benzersiz bilgisi. Bir sonraki kart saklama ve karttan ödeme alma işlemlerinde bu değer kullanılır.                                                                                                                                                                                                                                                      |
| 24           | **user\_gsm\_no**       | string      | Hayır   | Kart saklama işleminde ek olarak OTP kontrolü yapmak isterseniz bu parametre kullanılır. Daha detaylı bilgi için lütfen destek ekibimiz ile iletişime geçiniz.                                                                                                                                                                                                                                                                                                          |
| 25           | **subscription\_id**    | string      | Hayır   | Düzenli ödeme kodu, mevcut bir düzenli ödemenize manuel ödeme almak istediğinizde invoice\_no ile beraber kullanılır.                                                                                                                                                                                                                                                                                                                                                   |
| 26           | **invoice\_no**         | string      | Hayır   | Düzenli ödeme fatura numarası.                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| 27           | **ratio\_code\_method** | char(1)     | Hayır   | Bu alanla ilgili daha detaylı bilgi için lütfen destek ekibimiz ile iletişime geçiniz.                                                                                                                                                                                                                                                                                                                                                                                  |
| 28           | **merge\_option**       | bool        | Hayır   | Bu alanla ilgili daha detaylı bilgi için lütfen destek ekibimiz ile iletişime geçiniz.                                                                                                                                                                                                                                                                                                                                                                                  |
| 29           | **pos\_type**           | int         | Hayır   | Bu alanla ilgili daha detaylı bilgi için lütfen destek ekibimiz ile iletişime geçiniz                                                                                                                                                                                                                                                                                                                                                                                   |
| 30           | **approved\_card**      | bool        | Hayır   | Bu alanla ilgili daha detaylı bilgi için lütfen destek ekibimiz ile iletişime geçiniz.                                                                                                                                                                                                                                                                                                                                                                                  |
| {% endtab %} |                         |             |         |                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |

{% tab title="Dönüş Parametreleri" %}

| No           | Parametre İsmi    | Tip    | Açıklama                                                                                                   |
| ------------ | ----------------- | ------ | ---------------------------------------------------------------------------------------------------------- |
| 1            | **post\_url**     | string | Bu URL'e redirect ettiğinizde bankanın 3D doğrulama sayfasını gösterir.                                    |
| 2            | **html\_content** | string | post\_url yerine bu HTML content'i sayfanıza eklediğinizde bankanın 3D doğrulama sayfasını gösterir.       |
| 3            | **token\_id**     | string | İşlemin token bilgisi                                                                                      |
| 4            | **session\_id**   | string | 3D ödeme akışının session bilgisi                                                                          |
| 5            | **object\_name**  | string | tdsinitial\_response                                                                                       |
| 6            | **code**          | string | Bknz.[HTTP Status Kodlar](https://doc.paynet.com.tr/uornek/genel-bilgiler/hata-kodlari/http-status-kodlar) |
| 7            | **message**       | string | işlem sonuç mesajı                                                                                         |
| {% endtab %} |                   |        |                                                                                                            |

{% tab title="Request" %}

```javascript
Request
{
    "return_url": "https://pts-kurumsal.paynet.com.tr/Demo/TDSCharge",
    "amount": "20",
    "reference_no": "REF1001",
    "agent_id": "",
    "pos_type": "5",
    "transaction_type": "1",
    "company_amount": null,
    "add_commission": "False",
    "ratio_code": "",
    "instalment": "0",
    "merge_option": "False",
    "ratio_code_method": "",
    "domain": "",
    "approved_card": "False",
    "card_holder": "******",
    "card_hash": "",
    "pan": "******",
    "month": "**",
    "year": "**",
    "cvc": "***",
    "card_holder_phone": "",
    "card_holder_mail": "",
    "description": "test 2",
    "save_card": "False",
    "card_owner_id": "",
    "user_unique_id": "",
    "user_gsm_no": "",
    "card_desc": "",
    "subscription_id": "",
    "invoice_no": ""
}
```

{% endtab %}

{% tab title="Response" %}

```javascript
Response
{
    "token_id": "DF63C3CB-358A-4258-BDDA-522F4D8C5FA8",
    "session_id": "js_EAAAAFAL6CJHCCqAoll6DRsSqLfUMmn0pcqT6LZiJk6ZX*3G",
    "post_url": "https://pts-api.paynet.com.tr/v1/paynetjgate/tds_easy?session_id=js_EAAAAFAL6CJHCCqAoll6DRsSqLfUMmn0pcqT6LZiJk6ZX*3G&token_id=DF63C3CB-358A-4258-BDDA-522F4D8C5FA8",
    "html_content": "<form name=\"paynetForm\" id=\"paynetForm\" method=\"post\" action=\"https://pts-api.paynet.com.tr/v1/paynetjgate/tds_easy\"><input type=\"hidden\" name=\"session_id\" value=\"\"/><input type=\"hidden\" name=\"token_id\" value=\"\"/></form><script type=\"text/javascript\">document.forms[0].submit();</script>",
    "object_name": "tdsinitial_response",
    "code": 0,
    "message": "Başarılı İşlem"
}
```

{% endtab %}

{% tab title="Service Url" %}

| Sistem           | URL                                                        |
| ---------------- | ---------------------------------------------------------- |
| **Canlı sistem** | <https://api.paynet.com.tr/v2/transaction/tds_initial>     |
| **Test sistemi** | <https://pts-api.paynet.com.tr/v2/transaction/tds_initial> |
| {% endtab %}     |                                                            |
| {% endtabs %}    |                                                            |

## 3D Ödemesi Yapmak

3D doğrulama sonucunda kredi kartından ilgili tutarın çekim yapıldığı servis. "3D ödeme başlatma" servisinde kullandığınız return\_url'e post edilen **session\_id** ve **token\_id** değerlerini bu service post edip ödeme akışını tamamlayabilirsiniz.

{% hint style="success" %}
[https://api.paynet.com.tr/v2/transaction/t](https://api.paynet.com.tr/v2/transaction/tds_initial)ds\_charge
{% endhint %}

{% tabs %}
{% tab title="İstek Parametreleri" %}

| Parametre İsmi        | Tip     | Zorunlu | Açıklama                                                                                               |
| --------------------- | ------- | ------- | ------------------------------------------------------------------------------------------------------ |
| **session\_id**       | string  | Evet    | 3D ödeme akışının session bilgisi                                                                      |
| **token\_id**         | string  | Evet    | İşlemin token bilgisi                                                                                  |
| **transaction\_type** | char(1) | Hayır   | Satış ya da ön provizyon. 1 satış, 3 ön provizyon. Varsayılan satış işlemidir.                         |
| **company\_amount**   | decimal | Hayır   | Eğer alt bayileriniz var ise işlemin ne kadarının sizin hesabınıza aktarılacağını belirleyebilirsiniz. |
| {% endtab %}          |         |         |                                                                                                        |

{% tab title="Dönüş Parametreleri" %}

| Parametre İsmi                  | Tip      | Açıklama                                                                                                     |
| ------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------ |
| **id**                          | int      | tekil paynet işlem id                                                                                        |
| **xact\_id**                    | string   | paynet işlem id'nin hash değeri                                                                              |
| **xact\_date**                  | Datetime | işlemin tarihi                                                                                               |
| **transaction\_type**           | char(1)  | işlem tipi 1: satış, 2: ön provizyon                                                                         |
| **pos\_type**                   | int      | pos tipi                                                                                                     |
| **is\_tds**                     | string   | True ise 3D'siz işlem yapılamaz. False ise 3D'li veya 3D'siz işlem yapılabilir.                              |
| **user\_id**                    | string   | Kullanıcı kodu                                                                                               |
| **email**                       | string   | Mail adresi                                                                                                  |
| **phone**                       | string   | Telefon bilgisi                                                                                              |
| **bank\_id**                    | string   | Banka kodu                                                                                                   |
| **bank\_name**                  | string   | Banka adı                                                                                                    |
| **instalment**                  | int      | Taksit bilgisi                                                                                               |
| **ratio**                       | float    | işlem komisyon oranı                                                                                         |
| **card\_no\_masked**            | string   | Maskeli kart bilgisi                                                                                         |
| **card\_holder**                | string   | Kart sahibi                                                                                                  |
| **amount**                      | decimal  | Brüt işlem tutarı                                                                                            |
| **net\_amount**                 | decimal  | Komisyon hariç tutar                                                                                         |
| **comission**                   | decimal  | Komisyon tutarı                                                                                              |
| **comission\_tax**              | decimal  | Komisyon hizmet tutarı                                                                                       |
| **currency**                    | string   | Para birimi                                                                                                  |
| **authorization\_code**         | string   | Banka onay kodu                                                                                              |
| **reference\_code**             | string   | Banka referans kodu                                                                                          |
| **order\_id**                   | string   | Banka sipariş numarası                                                                                       |
| **is\_succeed**                 | bool     | İşlemin başarılı ya başarısız olduğu bilgisi. true ise ilgili karttan tutar tahsil edilmiş demektir.         |
| **paynet\_error\_id**           | string   | Paynet hata kodu                                                                                             |
| **paynet\_error\_message**      | string   | Paynet hata açıklaması                                                                                       |
| **bank\_error\_id**             | string   | Bankadan bildirilen hata kodu                                                                                |
| **bank\_error\_message**        | string   | Bankadan bildirilen hata mesajı                                                                              |
| **bank\_error\_short\_desc**    | string   | Bankadan bildirilen hata mesajı                                                                              |
| **bank\_error\_long\_desc**     | string   | Bankadan bildirilen hata mesajı                                                                              |
| **agent\_reference\_no**        | string   | Request sırasında gönderilen referans kodu                                                                   |
| **campaign\_url**               | string   | Bazı kart progamlarında + taksit ve taksit erteleme seçimi işlem sonrası başka bir uygulamada seçilebiliyor. |
| **end\_user\_comission**        | decimal  | ratio\_code kullanımında komisyon değeri                                                                     |
| **end\_user\_ratio**            | float    | ratio\_code kullanımında komisyon oranı                                                                      |
| **ratio\_code**                 | string   | oran kodu                                                                                                    |
| **ratio\_code\_method**         | string   | oran kodu methodu                                                                                            |
| **is\_save\_card\_succeed**     | bool     | Kart saklama işlemi yapılıyorsa kart saklama sonucu                                                          |
| **save\_card\_result\_message** | string   | Kart saklama mesajı                                                                                          |
| **card\_owner\_id**             | string   | Kart saklamada bir sonraki sefer kullanılacak id                                                             |
| **card\_logo\_url**             | string   | Saklı kart logosu                                                                                            |
| **md\_status**                  | string   | Banka 3D sonuç kodu                                                                                          |
| **object\_name**                | string   | Nesne adı                                                                                                    |
| **code**                        | string   | http status kodu                                                                                             |
| **message**                     | string   | İşlem sonuç mesajı                                                                                           |
| {% endtab %}                    |          |                                                                                                              |

{% tab title="Request" %}

```
{  
   "session_id":"{{session}}",
   "token_id":"{{token}}"
}
```

{% endtab %}

{% tab title="Response" %}

```
{  
   "id":2049018,
   "xact_id":"xk_EAAAAJ4Xc96iya0kRYaut2qsj*AFozqI3*nF0BwfoZWgswYK",
   "xact_date":"2018-12-04T09:03:59.81",
   "transaction_type":1,
   "pos_type":6,
   "is_tds":false,
   t_id":"20077",
   "user_id":"PaynetApi",
   "email":"",
   "phone":"          ",
   "bank_id":"ZDGR",
   "bank_name":"Diğer Banka",
   "instalment":0,
   "ratio":0,
   "card_no_masked":"450803******4509",
   "card_holder":"TEST TEST",
   "amount":12.5,
   "net_amount":12.25,
   "comission":0,
   "comission_tax":0,
   "currency":"TRY",
   "authorization_code":"aut-1513",
   "reference_code":"ref-1513",
   "order_id":"order-1513",
   "is_succeed":true,
   "paynet_error_id":"",
   "paynet_error_message":"",
   "bank_error_id":"",
   "bank_error_message":"",
   "bank_error_short_desc":"",
   "bank_error_long_desc":"",
   "agent_reference_no":"deneme11",
   "campaign_url":null,
   "end_user_comission":0.25,
   "end_user_ratio":0.02,
   "ratio_code":"",
   "ratio_code_method":" ",
   "is_save_card_succeed":false,
   "save_card_result_message":null,
   "card_owner_id":null,
   "user_unique_id":null,
   "card_hash":null,
   "card_bank_id":null,
   "card_logo_url":null,
   "md_status":-1,
   "object_name":"transaction",
   "code":100,
   "message":"Önceki Başarılı İşlem"
}
```

{% endtab %}

{% tab title="Service Url" %}

| Sistem           | URL                                                        |
| ---------------- | ---------------------------------------------------------- |
| **Canlı sistem** | <https://api.paynet.com.tr/v2/transaction/tds_initial>     |
| **Test sistemi** | <https://pts-api.paynet.com.tr/v2/transaction/tds_initial> |
| {% endtab %}     |                                                            |
| {% endtabs %}    |                                                            |

{% hint style="info" %}
**tds\_charge** işlemi sırasında eğer connection timeout ya da execution time out gibi sebeplerden dolayı cevap alamıyorsanız, aynı **session\_id** ve **token\_id** ile cevap alana kadar işleme devam edebilirsiniz. Sistem aynı **session\_id** ve **token\_id** ile daha önceden başarılı bir işlem var ise o işlemi döndürür. Bu durumda sonuç kodu 0 yerine 100 döner, sonuç mesajı da “Önceki Başarılı İşlem” şeklinde döner.
{% endhint %}
