# Registrar

<div align="left"><img src="/files/-MMxI-WOkfirFEK999lc" alt=""></div>

{% hint style="success" %}
**Producción:** <https://api.payvalida.com/api/v3/porders>
{% endhint %}

{% hint style="success" %}
**Sandbox:** <https://api-test.payvalida.com/api/v3/porders>
{% endhint %}

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

<table data-header-hidden><thead><tr><th width="139">Campo</th><th width="100">Tipo</th><th width="112">Requerido</th><th>Descripción</th></tr></thead><tbody><tr><td>Campo</td><td>Tipo</td><td>Requerido</td><td>Descripción</td></tr><tr><td>merchant</td><td>string</td><td>si</td><td>Nombre asignado para el comercio en Payvalida. Se entrega con las credenciales. </td></tr><tr><td>email</td><td>string</td><td>si</td><td>Correo electrónico del comprador. Debe cumplir con el formato de correo valido.</td></tr><tr><td>country</td><td>number</td><td>si</td><td><a href="https://payvalida.gitbook.io/api-cashin/codigos-de-pais-y-monedas">Código del pais.</a></td></tr><tr><td>order</td><td>string</td><td>si</td><td>Código de la orden para el comercio. <strong>Este código debe ser único para todas las ordenes registradas desde el comercio.</strong> Se utilizara para la notificación. No debe contener guiones bajos ni caracteres especiales.</td></tr><tr><td>reference</td><td>string</td><td>no</td><td><p>Número de la referencia con la que el cliente efectuará el pago. No es posible generar referencias alfanuméricas o con caracteres especiales. Este número es <strong>único</strong> en Payvalida. Si no se envía, se proporcionará uno disponible. Si se envía, puede darse la posibilidad de colisiones y será rechazada la creación de la orden. <br><br>Longitud máxima:<br>Colombia <img src="https://fonts.gstatic.com/s/e/notoemoji/15.0/1f1e8_1f1f4/72.png" alt="🇨🇴" data-size="line">: 15.</p><p>Ecuador <img src="https://fonts.gstatic.com/s/e/notoemoji/15.0/1f1ea_1f1e8/72.png" alt="🇪🇨" data-size="line">: 16.<br>El Salvador🇸🇻: 16.</p><p>Guatemala <img src="https://fonts.gstatic.com/s/e/notoemoji/15.0/1f1ec_1f1f9/72.png" alt="🇬🇹" data-size="line">: 16.</p><p>Perú <img src="https://fonts.gstatic.com/s/e/notoemoji/15.0/1f1f5_1f1ea/72.png" alt="🇵🇪" data-size="line">: 11.<br></p></td></tr><tr><td>money</td><td>string</td><td>si</td><td><a href="https://payvalida.gitbook.io/api-cashin/codigos-de-pais-y-monedas">Código de la moneda de pago. </a></td></tr><tr><td>amount</td><td>string</td><td>si</td><td>Monto de la orden para el recaudo. Si se envía este campo en cero ("0") la orden será de monto abierto por lo que el cliente puede pagar cualquier monto y se notificará el monto pagado.<br><br>Para el uso de decimales, se debe utilizar el punto (.) como separador y el número de decimales no debe exceder de 2 dígitos. Ejemplo: "amount": "10.95"</td></tr><tr><td>description</td><td>string</td><td>si</td><td>Descripción corta de la orden. No incluir caracteres especiales. </td></tr><tr><td>method</td><td>string</td><td>no</td><td><a href="https://payvalida.gitbook.io/api-cashin/medios-de-pago">Método de pago para la orden. </a>Si no se envía la orden se podrá pagar por cualquiera de los metodos de pago registrados en el comercio.</td></tr><tr><td>language</td><td>string</td><td>no</td><td>lenguaje de la petición. es o en. default: es</td></tr><tr><td>recurrent</td><td>bool</td><td>si</td><td>Indica si la orden es o no recurrente. Si la orden es recurrente está no expira y se puede pagar multiples veces por el usuario. La notificación para recurrentes se realizara con el consecutivo (order+_+consecutivo) que aumenta según la cantidad de pagos. (La recurrencia solo aplica para pagos en efectivo)</td></tr><tr><td>expiration</td><td>string</td><td>si</td><td>Fecha de expiración de la orden en formato DD/MM/AAAA. No puede superar 30 días calendario y no debe ser inferior a la fecha actual. </td></tr><tr><td>iva</td><td>string</td><td>si</td><td>Monto porcentual correspondiente al IVA de la orden. Si tu medio de pago es tarjeta de crédito debes indicar este valor para el calculo del reteIVA.</td></tr><tr><td>checksum</td><td>string</td><td>si</td><td>Cadena de comprobación con SHA512 (email + country + order + money + amount + FIXED_HASH)</td></tr><tr><td>user_di</td><td>string</td><td>no</td><td>Número del documento de identidad del comprador.</td></tr><tr><td>user_type_di</td><td>string</td><td>no</td><td>Tipo del documento de identidad del cliente.</td></tr><tr><td>user_name</td><td>string</td><td>no</td><td>nombre del cliente en el documento de identidad (no acepta caracteres especiales ni acentos).</td></tr><tr><td>redirect_timeout</td><td>string</td><td>no</td><td>Tiempo de espera para redireccionar automáticamente al sitio del comercio cuando la operación de pago ha sido completada. Aplica para TC y PSE en Colombia. (Default: 15000 ms).</td></tr><tr><td>shortener</td><td>bool</td><td>no</td><td>Indica si la url recibida en el checkout esta acortada o no.</td></tr><tr><td>get_deposit_url</td><td>bool</td><td>no</td><td>Por defecto false. Poner en true si en el response quieren recibir el formulario de registro de depósitos.</td></tr><tr><td>additional_information</td><td>object</td><td>no</td><td><p>Permite pre-diligenciar información del usuario en nuestro checkout, definiendo si es información editable o no.</p><p></p><p>La información adicional que puede contener este campo se encuentra en <a href="/pages/zLQTalHMbqzycxYOywOk">Registrar Información Adicional</a>. </p></td></tr></tbody></table>
{% endtab %}

{% tab title="Request (ejemplo)" %}

```bash
curl --location --request POST 'https://api-test.payvalida.com/api/v3/porders' \
--header 'Content-Type: application/json' \
--data-raw '{
    "merchant": "kuanto",
    "email": "someone@example.com",
    "country": 343,
    "order": "999999991",
    "reference": "46534512",
    "money": "COP",
    "amount": "10500",
    "description": "Orden de prueba",
    "method": "",
    "language": "es",
    "recurrent": true,
    "expiration": "27/12/2020",
    "iva": "0",
    "checksum": "96C79878E0CDC0C525090281141874D7494E0194B33E0E373DC412DD31AAD32B5DB2C681441C8007B2FCAF0873BBF2C8BFDB4A6E7D04DB8E52A843A30D6CFF08",
    "user_di": "94320444",
    "user_type_di": "CC",
    "user_name": "NombreUsuario",
    "redirect_timeout": "300000"
}'
```

{% endtab %}

{% tab title="Response" %}

| Campo        | Estructura | Tipo   | Descripción                                                                                                                               |
| ------------ | ---------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
| CODE         | -          | string | Código de respuesta **0000** para **OK.**                                                                                                 |
| DESC         | -          | string | Descripción de la respuesta.                                                                                                              |
| DATA         | -          | string | Datos del registro                                                                                                                        |
| Monto        | DATA       | string | Monto de la operación.                                                                                                                    |
| Operacion    | DATA       | string | Resultado de la creación de la orden.                                                                                                     |
| OrdenID      | DATA       | string | ID único de la orden asociado al comercio.                                                                                                |
| PVordenID    | DATA       | string | ID único asociado a la orden para Payvalida.                                                                                              |
| Referencia   | DATA       | string | Numero de la referencia con la cual el cliente realizara el pago.                                                                         |
| checkout     | DATA       | string | Link generado por Payvalida donde el cliente podrá efectuar el pago para las redes de recaudo electrónico y obtener información del pago. |
| deposit\_url | DATA       | string | Link de registro de depósito.                                                                                                             |
| {% endtab %} |            |        |                                                                                                                                           |

{% tab title="Response (ejemplo)" %}

```java
{
    "CODE": "0000",
    "DATA": {
        "Monto": "10500.0",
        "Operacion": "CREADA",
        "OrdenID": "999999991",
        "PVordenID": "1934480",
        "Referencia": "46534512",
        "checkout": "sandbox-short.payv.co/H4P1KTDr9"
    },
    "DESC": "OK"
}
```

{% endtab %}

{% tab title="Cabeceras" %}

| Cabecera      | Valor            |
| ------------- | ---------------- |
| Content-Type  | application/json |
| {% endtab %}  |                  |
| {% endtabs %} |                  |

{% hint style="info" %}
La identificación del comercio (merchant) y FIXED\_HASH, es generada al momento de [crear una cuenta](https://registro.payvalida.com) en nuestra plataforma y se envía por correo electrónico.
{% endhint %}

## Ejemplos

* **GO**

```go
package main
import (
	"bytes"
	"crypto/sha512"
	"encoding/hex"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"math/rand"
	"net/http"
	"time"
)
type Request struct {
	Country         int    `json:"country,omitempty"`
	Email           string `json:"email,omitempty"`
	Merchant        string `json:"merchant,omitempty"`
	Order           string `json:"order,omitempty"`
	Reference       string `json:"reference,omitempty"`
	Money           string `json:"money,omitempty"`
	Amount          string `json:"amount,omitempty"`
	Description     string `json:"description,omitempty"`
	Language        string `json:"language,omitempty"`
	Recurrent       bool   `json:"recurrent,omitempty"`
	Expiration      string `json:"expiration,omitempty"`
	Method          string `json:"method,omitempty"`
	Iva             string `json:"iva,omitempty"`
	Checksum        string `json:"checksum,omitempty"`
	UserDI          string `json:"user_di,omitempty"`
	UserTypeDI      string `json:"user_type_di,omitempty"`
	RedirectTimeout string `json:"redirect_timeout,omitempty"`
	UserName        string `json:"user_name,omitempty"`
}
func main() {
	url := "https://api-test.payvalida.com/api/v3/porders"
	method := "POST"
	email := "someone@example.com"
	country := "343"
	order := "test" + fmt.Sprint(rand.Intn(999999999))
	money := "COP"
	amount := "20000"
	fixedHash := "xxccc_b0b20707cca2b283b5844e77cadf2b5813bd923362b91583c95b736c8763937c0e0df27e9b730c404eeac6484666430f6042c043089135e8d3e76f2e86a82c38"
	Paysha512 := sha512.Sum512([]byte(email + country + order + money + amount + fixedHash))
	checksum := hex.EncodeToString(Paysha512[:])
	date := time.Now()
	expiration := date.AddDate(0, 0, 2)
	request := Request{
		Country:         343,
		Email:           email,
		Merchant:        "kuanto",
		Order:           order,
		Reference:       "",
		Money:           money,
		Amount:          amount,
		Description:     "Test pruebas unitarias",
		Language:        "es",
		Recurrent:       false,
		Expiration:      expiration.Format("02/01/2006"),
		Method:          "",
		Iva:             "0",
		Checksum:        checksum,
		UserDI:          "90000000",
		UserTypeDI:      "CC",
		RedirectTimeout: "150000",
		UserName:        "devPayvalida",
	}
	json, err := json.Marshal(request)
	if err != nil {
		fmt.Println(err)
		return
	}
	client := &http.Client{}
	req, err := http.NewRequest(method, url, bytes.NewBuffer(json))
	if err != nil {
		fmt.Println(err)
		return
	}
	req.Header.Add("Content-Type", "application/json")
	res, err := client.Do(req)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer res.Body.Close()
	body, err := ioutil.ReadAll(res.Body)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(string(body))
}
```

* **PHP**

```go
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api-test.payvalida.com/api/v3/porders",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS =>"{\n    \"merchant\": \"kuanto\",\n    \"email\": \"someone@example.com\",\n    \"country\": 343,\n    \"order\": \"999999991\",\n    \"reference\": \"46534512\",\n    \"money\": \"COP\",\n    \"amount\": \"10500\",\n    \"description\": \"Orden de prueba\",\n    \"method\": \"\",\n    \"language\": \"es\",\n    \"recurrent\": true,\n    \"expiration\": \"27/12/2020\",\n    \"iva\": \"0\",\n    \"checksum\": \"96C79878E0CDC0C525090281141874D7494E0194B33E0E373DC412DD31AAD32B5DB2C681441C8007B2FCAF0873BBF2C8BFDB4A6E7D04DB8E52A843A30D6CFF08\",\n    \"user_di\": \"94320444\",\n    \"user_type_di\": \"CC\",\n    \"user_name\": \"NombreUsuario\",\n    \"redirect_timeout\": \"300000\"\n}",
  CURLOPT_HTTPHEADER => array(
    "Content-Type: application/json"
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

* **JAVA**

```go
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"merchant\": \"kuanto\",\n    \"email\": \"someone@example.com\",\n    \"country\": 343,\n    \"order\": \"999999991\",\n    \"reference\": \"46534512\",\n    \"money\": \"COP\",\n    \"amount\": \"10500\",\n    \"description\": \"Orden de prueba\",\n    \"method\": \"\",\n    \"language\": \"es\",\n    \"recurrent\": true,\n    \"expiration\": \"27/12/2020\",\n    \"iva\": \"0\",\n    \"checksum\": \"96C79878E0CDC0C525090281141874D7494E0194B33E0E373DC412DD31AAD32B5DB2C681441C8007B2FCAF0873BBF2C8BFDB4A6E7D04DB8E52A843A30D6CFF08\",\n    \"user_di\": \"94320444\",\n    \"user_type_di\": \"CC\",\n    \"user_name\": \"NombreUsuario\",\n    \"redirect_timeout\": \"300000\"\n}");
Request request = new Request.Builder()
  .url("https://api-test.payvalida.com/api/v3/porders")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();
```

* **Python**

```go
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api-test.payvalida.com")
payload = "{\n    \"merchant\": \"kuanto\",\n    \"email\": \"someone@example.com\",\n    \"country\": 343,\n    \"order\": \"999999991\",\n    \"reference\": \"46534512\",\n    \"money\": \"COP\",\n    \"amount\": \"10500\",\n    \"description\": \"Orden de prueba\",\n    \"method\": \"\",\n    \"language\": \"es\",\n    \"recurrent\": true,\n    \"expiration\": \"27/12/2020\",\n    \"iva\": \"0\",\n    \"checksum\": \"96C79878E0CDC0C525090281141874D7494E0194B33E0E373DC412DD31AAD32B5DB2C681441C8007B2FCAF0873BBF2C8BFDB4A6E7D04DB8E52A843A30D6CFF08\",\n    \"user_di\": \"94320444\",\n    \"user_type_di\": \"CC\",\n    \"user_name\": \"NombreUsuario\",\n    \"redirect_timeout\": \"300000\"\n}"
headers = {
  'Content-Type': 'application/json'
}
conn.request("POST", "/api/v3/porders", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
```

* **JavaScript**

```go
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({"merchant":"kuanto","email":"someone@example.com","country":343,"order":"999999991","reference":"46534512","money":"COP","amount":"10500","description":"Orden de prueba","method":"","language":"es","recurrent":true,"expiration":"27/12/2020","iva":"0","checksum":"96C79878E0CDC0C525090281141874D7494E0194B33E0E373DC412DD31AAD32B5DB2C681441C8007B2FCAF0873BBF2C8BFDB4A6E7D04DB8E52A843A30D6CFF08","user_di":"94320444","user_type_di":"CC","user_name":"NombreUsuario","redirect_timeout":"300000"});
var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};
fetch("https://api-test.payvalida.com/api/v3/porders", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.payvalida.com/api-recaudo/ordenes-de-compra/registrar.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
