# 3D Payment

Payment with 3D Secure consists of two steps. These are 3D Payment Initial and 3D Payment Charge. With the 3D Payment Initial Service, you will be able to access the url or html content to access the 3D verification pages of the banks.

* [x] The request is sent with the "return\_url" parameter in addition to 3D Payment Initial Service that returns the 3D confirmation result.
* [x] You can redirect your application via the "post\_url" parameter that returns from the 3D Secure Payment Initial Service.
* [x] The 3D verification result is posted to the url specified in the "return\_url" parameter that you send to the 3D Secure Payment Initial Service.
* [x] You can control the result by posting the incoming parameters from "return\_url" to 3D Secure Payment Charge Service.

## 3D Secure Payment Initial

The return\_url parameter is sent differently than the payment process. You can open the 3D verification page of banks by the "post\_url" or "html\_content" parameters that return from the Service.

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

{% tabs %}
{% tab title="Request Parameters" %}

| Parameter Name            | Type    | Required | Description                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| ------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **amount**                | decimal | Yes      | Amount that charges from credit card. (You should use a comma (,) as a decimal seperator.)                                                                                                                                                                                                                                                                                                                                                  |
| **reference\_no**         | string  | Yes      | Reference no that related with the payment transaction. It must be unique.                                                                                                                                                                                                                                                                                                                                                                  |
| **return\_url**           | string  | Yes      | URL where the 3D verification result will be posted                                                                                                                                                                                                                                                                                                                                                                                         |
| **domain**                | string  | Yes      | This is website that integrated payment api.                                                                                                                                                                                                                                                                                                                                                                                                |
| **agent\_reference\_no**  | string  | No       | Reference code of company's agent.                                                                                                                                                                                                                                                                                                                                                                                                          |
| **card\_holder**          | string  | No       | Informations of card owner. It’s necessary if transaction doesn’t perform by saved card.                                                                                                                                                                                                                                                                                                                                                    |
| **pan**                   | string  | No       | Card number. It’s necessary if transaction doesn’t perform by saved card.                                                                                                                                                                                                                                                                                                                                                                   |
| **month**                 | int     | No       | Month of card expiration date (e.g 8, 12). It’s necessary if transaction doesn’t perform by saved card.                                                                                                                                                                                                                                                                                                                                     |
| **year**                  | int     | No       | Year of card expiration date (e.g 2020, 2030). It’s necessary if transaction doesn’t perform by saved card.                                                                                                                                                                                                                                                                                                                                 |
| **cvc**                   | string  | No       | Card security code. It’s necessary if transaction doesn’t perform by saved card.                                                                                                                                                                                                                                                                                                                                                            |
| **card\_hash**            | string  | No       | Token information of saved card. It's necessary if transaction performs by saved card.                                                                                                                                                                                                                                                                                                                                                      |
| **card\_holder\_phone**   | string  | No       | Phone number of card holder.                                                                                                                                                                                                                                                                                                                                                                                                                |
| **card\_holder\_mail**    | string  | No       | Mail address of card holder.                                                                                                                                                                                                                                                                                                                                                                                                                |
| **description**           | string  | No       | Decription area that related with transaction.                                                                                                                                                                                                                                                                                                                                                                                              |
| **instalment**            | int     | No       | Information about how many installments will be perform on.                                                                                                                                                                                                                                                                                                                                                                                 |
| **agent\_id**             | string  | No       | If you have a sub agent you can track transaction that comes from which agent as post agent id to the this area.                                                                                                                                                                                                                                                                                                                            |
| **company\_amount**       | decimal | No       | If you have a sub agent you can decide how much amount of transaciton will be transferred to your account.                                                                                                                                                                                                                                                                                                                                  |
| **add\_commission**       | bool    | No       | You can post true If you want to add transaction commision to amount that charged on card.                                                                                                                                                                                                                                                                                                                                                  |
| **transaction\_type**     | int     | No       | Sales or pre provision.1 sales,3 pre provision.Default sales transaction.                                                                                                                                                                                                                                                                                                                                                                   |
| **ratio\_code**           | string  | No       | You can see the ratio codes of ratio tables that you can define from the “API rate definitions ” at Paynet.com.tr management screens. Commision’s calculations performs on rate tables that belongs to the rate code that you post. Therefore you can do transactions that you wish which rates perform on.                                                                                                                                 |
| **save\_card**            | bool    | No       | If you want to save your credit card with payment transactions,you can post this parameter as “true”.If you want to card saving operation,it is necessary to post card\_desc and at least one of the card\_owner\_id or user\_unique\_id should be posted.                                                                                                                                                                                  |
| **card\_desc**            | string  | No       | This area is necessary if card saving operation will perform.                                                                                                                                                                                                                                                                                                                                                                               |
| **user\_unique\_id**      | string  | No       | <p>Unique id that given to user by member workplace.It’s necessary If card saving will perform at first time.Unique value(card\_owner\_id) assigns to user by Paynet after completion first card saving operation. You must store this value on your system by associating it with your user. Afterwards you should use the card\_owner\_id variable given by Paynet instead of user\_unique\_id for the saving</p><p>card operations .</p> |
| **card\_owner\_id**       | string  | No       | Unique card holder information that has been generated by Paynet residing on user\_unique\_id after the first card saving process. This value is also used in subsequent card saving and recieving payment processes.                                                                                                                                                                                                                       |
| **user\_gsm\_no**         | string  | No       | This parameter is used if you want to make an additional OTP control whilst the card saving procces. Please contact our customer service if you want more specific information about this matter please contact with our support team.                                                                                                                                                                                                      |
| **subscription\_id**      | string  | No       | Regular payment code, used with (invoice\_no)if you want to recieve manual payment with a already existing regular payment.                                                                                                                                                                                                                                                                                                                 |
| **invoice\_no**           | string  | No       | Regular payment invoice number.                                                                                                                                                                                                                                                                                                                                                                                                             |
| **ratio\_code\_method**   | char    | No       | Please contact our customer service if you want more spesific information about this matter.                                                                                                                                                                                                                                                                                                                                                |
| **merge\_option**         | bool    | No       | Please contact our customer service if you want more spesific information about this matter.                                                                                                                                                                                                                                                                                                                                                |
| **pos\_type**             | int     | No       | Please contact our customer service if you want more spesific information about this matter.                                                                                                                                                                                                                                                                                                                                                |
| **approved\_card**        | bool    | No       | Please contact our customer service if you want more spesific information about this matter.                                                                                                                                                                                                                                                                                                                                                |
| **agent\_customer\_name** | string  | No       | The parameter which you write in this area will be seen as the "Customer's Name". You may write your firm name which you want to be seen by your customer.                                                                                                                                                                                                                                                                                  |
| **is\_escrow**            | bool    | No       | If you want the transaction to be approved by the company, you must send "true". If the parameter is not sent, it is considered false.                                                                                                                                                                                                                                                                                                      |
| **iban**                  | string  | No       | It should be entered with a country code (ex "TR") with 26 characters in total.                                                                                                                                                                                                                                                                                                                                                             |
| {% endtab %}              |         |          |                                                                                                                                                                                                                                                                                                                                                                                                                                             |

{% tab title="Response Parameters" %}

| Parameter Name    | Type   | Description                                                                                            |
| ----------------- | ------ | ------------------------------------------------------------------------------------------------------ |
| **post\_url**     | string | It shows 3D verification page of bank when you redirect this Url.                                      |
| **html\_content** | string | It shows 3D verification page of bank when you add this html content to your page instead of post\_url |
| **token\_id**     | string | Token information of transaction.                                                                      |
| **session\_id**   | string | Session information of 3D payment flow.                                                                |
| **object\_name**  | string | tdsinitial\_response.                                                                                  |
| **code**          | string | Status code. [See more](https://doc.paynet.com.tr/genel-bilgiler/hata-kodlari/doenues-kodlari)         |
| **message**       | string | Transaction result message.                                                                            |
| {% endtab %}      |        |                                                                                                        |

{% tab title="Request" %}

```javascript
{
    "return_url": "https://pts-kurumsal.paynet.com.tr/Demo/TDSCharge",
    "amount": "20",
    "reference_no": "REF1001",
    "domain": "paynet.com.tr",
    "card_holder": "Paynet A.Ş",
    "pan": "1212121212121212",
    "month": "12",
    "year": "23",
    "cvc": "000"
}
```

{% endtab %}

{% tab title="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" %}

| System          | Url                                                        |
| --------------- | ---------------------------------------------------------- |
| **Live System** | <https://api.paynet.com.tr/v2/transaction/tds_initial>     |
| **Test System** | <https://pts-api.paynet.com.tr/v2/transaction/tds_initial> |
| {% endtab %}    |                                                            |
| {% endtabs %}   |                                                            |

## 3D Secure Payment Charge

The service where the corresponding amount is taken from the credit card as a result of 3D verification. You can complete the payment transfer by posting the "session\_id" and "token\_id" to the 3D Secure Payment Charge Service via the "return\_url" parameter we used in "3D Secure Payment Initial".

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

{% tabs %}
{% tab title="Request Parameters" %}

| Parameter Name        | Type   | Required | Description                                                                       |
| --------------------- | ------ | -------- | --------------------------------------------------------------------------------- |
| **session\_id**       | string | Yes      | Session information of 3D payment flow                                            |
| **token\_id**         | string | Yes      | Token information of transaction                                                  |
| **transaction\_type** | int    | No       | Sales or pre-provision. 1 for "sales", 3 for "pre-provision". Default is "sales". |
| {% endtab %}          |        |          |                                                                                   |

{% tab title="Response Parameters" %}

| Parameter Name                  | Type     | Description                                                                                                                                            |
| ------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **id**                          | int      | Unique paynet transaction id.                                                                                                                          |
| **xact\_id**                    | string   | Reference no that related with payment transaction.                                                                                                    |
| **xact\_date**                  | Datetime | Hash value of paynet transaction.                                                                                                                      |
| **transaction\_type**           | int      | Type of transaction; 1 for "sales", 3 for "pre-provision".                                                                                             |
| **pos\_type**                   | int      | Pos type.                                                                                                                                              |
| **is\_tds**                     | string   | If it's true non-3D Secure transactions will not be performed. If it's false, 3D or non-3D Secure transactions may be performed.                       |
| **user\_id**                    | string   | User code.                                                                                                                                             |
| **email**                       | string   | Email address.                                                                                                                                         |
| **phone**                       | string   | Phone number.                                                                                                                                          |
| **bank\_id**                    | string   | Bank code.                                                                                                                                             |
| **bank\_name**                  | string   | Bank name.                                                                                                                                             |
| **instalment**                  | int      | Installment information.                                                                                                                               |
| **ratio**                       | float    | Rate of transaction commision.                                                                                                                         |
| **card\_no\_masked**            | string   | Card information of masked card.                                                                                                                       |
| **card\_holder**                | string   | Card holder.                                                                                                                                           |
| **amount**                      | decimal  | Gross transaction amount.                                                                                                                              |
| **net\_amount**                 | decimal  | Amount except commision.                                                                                                                               |
| **comission**                   | decimal  | Commision amount.                                                                                                                                      |
| **comission\_tax**              | decimal  | Amount of commision service.                                                                                                                           |
| **currency**                    | string   | Currency.                                                                                                                                              |
| **authorization\_code**         | string   | Bank authorization code.                                                                                                                               |
| **reference\_code**             | string   | Bank reference code.                                                                                                                                   |
| **order\_id**                   | string   | Bank order id.                                                                                                                                         |
| **is\_succeed**                 | bool     | Whether transaction is success or not. If result true it means amount charged from card.                                                               |
| **paynet\_error\_id**           | string   | Paynet error code.                                                                                                                                     |
| **paynet\_error\_message**      | string   | Paynet error explanation.                                                                                                                              |
| **bank\_error\_id**             | string   | Error code that posted from bank.                                                                                                                      |
| **bank\_error\_message**        | string   | Error message that posted from bank.                                                                                                                   |
| **bank\_error\_short\_desc**    | string   | Error short explanation that posted from bank.                                                                                                         |
| **bank\_error\_long\_desc**     | string   | Error long explanation that posted from bank.                                                                                                          |
| **agent\_reference\_no**        | string   | Reference code that posted during request.                                                                                                             |
| **campaign\_url**               | string   | At the some of the card programs selections of plus installment or postponed intallments can be selected on the another application after transaction. |
| **end\_user\_comission**        | decimal  | Comission value on "ratio\_code" usage.                                                                                                                |
| **end\_user\_ratio**            | float    | Comission rate on "ratio\_code" usage.                                                                                                                 |
| **ratio\_code**                 | string   | Ratio code.                                                                                                                                            |
| **ratio\_code\_method**         | string   | Ratio code method.                                                                                                                                     |
| **is\_save\_card\_succeed**     | bool     | Result message shown if undergoing a card saving process.                                                                                              |
| **save\_card\_result\_message** | string   | Card saving message.                                                                                                                                   |
| **card\_owner\_id**             | string   | Id that is going to be used in subsequent card saving  processes.                                                                                      |
| **card\_logo\_url**             | string   | Saved card logo.                                                                                                                                       |
| **md\_status**                  | string   | Bank 3D result code.                                                                                                                                   |
| **object\_name**                | string   | Object name.                                                                                                                                           |
| **code**                        | string   | Status code. [See more](https://doc.paynet.com.tr/genel-bilgiler/hata-kodlari/doenues-kodlari)                                                         |
| **message**                     | string   | Transaction result message.                                                                                                                            |
| {% endtab %}                    |          |                                                                                                                                                        |

{% tab title="Request" %}

```
{  
    "session_id": "js_EAAAAFAL6CJHCCqAoll6DRsSqLfUMmn0pcqT6LZiJk6ZX*3G",
    "token_id": "DF63C3CB-358A-4258-BDDA-522F4D8C5FA8"
}
```

{% endtab %}

{% tab title="Response" %}

```
{  
   "is_tds": true,
    "md_status": 1,
    "id": 7438118,
    "xact_id": "xk_EAAAADIJMBHKDhG0bG1f/yItmz1v9cZqMZVHViQJF0VezRKF",
    "xact_date": "2020-02-25T15:12:48.353769+03:00",
    "transaction_type": 1,
    "pos_type": 5,
    "agent_id": "1001",
    "user_id": "paynet",
    "email": null,
    "phone": null,
    "instalment": 4,
    "ratio": 0,
    "card_no_masked": "435508******4358",
    "card_holder": "Paynet Ödeme Hizmetleri AŞ",
    "amount": 6500,
    "net_amount": 6500,
    "comission": 0,
    "comission_tax": 0,
    "currency": "TRY",
    "bank_id": "WRLD",
    "bank_name": "WorldCard",
    "bank_authorization_code": "159116",
    "bank_reference_code": "90eb21b1be8044859dc9ab6c00faba89",
    "bank_order_id": "B72A95279A3D4F54A41A408FB784E77A",
    "is_succeed": true,
    "paynet_error_id": "",
    "paynet_error_message": "",
    "bank_error_id": "",
    "bank_error_message": "",
    "bank_error_short_desc": "",
    "bank_error_long_desc": "",
    "reference_no": "857f60cf128ddbf112171522",
    "xact_transaction_id": "B72A9527-9A3D-4F54-A41A-408FB784E77A",
    "campaign_url": "",
    "end_user_comission": 0,
    "end_user_ratio": 0,
    "ratio_code": "",
    "ratio_code_method": "",
    "is_save_card_succeed": false,
    "save_card_result_message": "",
    "card_owner_id": "",
    "user_unique_id": "",
    "card_hash": "",
    "card_bank_id": "",
    "card_logo_url": "",
    "company_cost_ratio":"",
    "company_commission":"",
    "company_commission_with_tax":"",    
    "company_net_amount":"",    
    "plus_installment":"",    
    "card_type":"",    
    "card_brand_name":"",
    "object_name": "tdscharge_response",
    "code": 0,
    "message": "Başarılı İşlem"
}
```

{% endtab %}

{% tab title="Service Url" %}

| System        | Url                                                       |
| ------------- | --------------------------------------------------------- |
| Live System   | <https://api.paynet.com.tr/v2/transaction/tds_charge>     |
| Test System   | <https://pts-api.paynet.com.tr/v2/transaction/tds_charge> |
| {% endtab %}  |                                                           |
| {% endtabs %} |                                                           |

{% hint style="info" %}
During the **tds\_charge** process, if you can not get a response due to reasons such as connection timeout or execution time out, you can continue the process with the same **session\_id** and **token\_id** until you get a response. If there is a previously successful transaction with the same **session\_id** and **token\_id**, the system returns that transaction. In this case, the result code returns 100 instead of 0, and the result message returns as "Önceki Başarılı İşlem".
{% endhint %}
