# Actualizar

<div align="left"><img src="https://1217586153-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ly_b6lZywQ5rYRHAN2H%2F-MNLvqZ6lfE3yVVXjSXP%2F-MNP4NMMGrW4Svt1L8d3%2Fimage.png?alt=media&#x26;token=5533f3ac-ef62-46b8-9a2f-39519bc7e4d1" 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" %}

| Campo        | Tipo   | Requerido | Descripción                                                                                                                                                                                                                                                      |
| ------------ | ------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| merchant     | string | si        | Nombre asignado para el comercio en Payvalida. Se entrega con las credenciales.                                                                                                                                                                                  |
| email        | string | si        | Correo electrónico del comprador. Debe cumplir con el formato de correo valido.                                                                                                                                                                                  |
| country      | int    | si        | [Código del pais.](https://payvalida.gitbook.io/api-cashin/codigos-de-pais-y-monedas)                                                                                                                                                                            |
| order        | string | si        | Código de la orden para el comercio. **Este código debe ser único para todas las ordenes registradas desde el comercio.** Se utilizara para la notificación. No debe contener guiones bajos ni caracteres especiales.                                            |
| reference    | string | no        | Numero de la referencia con la cual el cliente efectuara el pago. Este numero es **único** en Payvalida. si no se envía se proporcionara uno disponible. Si se envía puede darse la posibilidad de colisiones.                                                   |
| money        | string | si        | [Código de la moneda de pago. ](https://payvalida.gitbook.io/api-cashin/codigos-de-pais-y-monedas)                                                                                                                                                               |
| amount       | string | si        | Monto de la orden para el recaudo. Si se envía este campo en cero ("0") la orden sera de monto abierto por lo que el cliente puede cualquier monto. Y se notificara el monto pagado.                                                                             |
| description  | string | si        | Descripción corta de la orden. No incluir caracteres especiales.                                                                                                                                                                                                 |
| method       | string | no        | [Método de pago para la orden. ](https://payvalida.gitbook.io/api-cashin/medios-de-pago)Si no se envía la orden se podrá pagar por cualquiera de los metodos de pago registrados en el comercio.                                                                 |
| language     | string | no        | lenguaje de la petición. es o en. default: es                                                                                                                                                                                                                    |
| recurrent    | bool   | si        | 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. |
| expiration   | string | si        | 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.                                                                                                                             |
| iva          | string | si        | 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.                                                                                                             |
| checksum     | string | si        | Cadena de comprobación con SHA512 (email + country + order + money + amount + FIXED\_HASH)                                                                                                                                                                       |
| {% endtab %} |        |           |                                                                                                                                                                                                                                                                  |

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

```bash
curl --location --request PATCH '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": "9500",
    "description": "Orden de prueba",
    "method": "",
    "language": "es",
    "recurrent": true,
    "expiration": "27/12/2020",
    "iva": "0",
    "checksum": "1AC89E7089355B5069222C01779431A192FC4D459C25584D69B64ABBF605FE7CB54A015296A39D234CA9B94FF9F068423AC1E00F5A319EB18F2167B97C8A0BB1",
    "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 actualizació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. |
| {% endtab %} |            |        |                                                                                                                                           |

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

```java
{
    "CODE": "0000",
    "DESC": "OK",
    "DATA": {
        "OrdenID": "999999991",
        "Monto": "9,500.00",
        "PVordenID": "1934652",
        "Referencia": "46534512",
        "Operacion": "ACTUALIZADA",
        "checkout": "sandbox-checkout.payvalida.com?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJNRVJDSEFOVF9DRUwiOiIzMTYzODg3MzQwIiwiTUVSQ0hBTlRfQ09ERSI6NzMsIk9SREVSX0NPREUiOjE5MzQ2NTIsIk1FUkNIQU5UX0VNQUlMIjoiZWZyYW5jb0BwYXl2YWxpZGEuY29tIiwiTUVSQ0hBTlRfTE9HTyI6Imh0dHBzOi8vdGVzdC1pbWFnZXMucGF5dmFsaWRhLmNvbS92YWxpZGRhd2ViL2xvZ29fbWVyY2hhbnQva3VhbnRvL2xvZ28xNTk4NTM4MTEyMjkyLmpwZyIsIk1FUkNIQU5UX1VSTF9SRVRVUk4iOiJodHRwczovL3BsdXMuZ29vZ2xlLmNvbS8rZ29vZ2xlIiwiTUVSQ0hBTlRfTkFNRSI6Ikt1YW50byBUZXN0IiwiRVhQSVJBVElPTiI6IjI3LzEyLzIwMjAiLCJPUkRFUl9CUklFRiI6Ik9yZGVuIGRlIHBydWViYSIsIk1FUkNIQU5UX1RFTCI6IjQ0NDk5NjkiLCJPUkRFUl9DVVJSRU5DWSI6IkNPUCIsIk9SREVSX0FNT1VUIjoiOSw1MDAuMDAiLCJNRVJDSEFOVF9JRCI6Imt1YW50byIsIk9SREVSX1JFRkVSRU5DRSI6IjQ2NTM0NTEyIiwiT1JERVJfTUVUSE9EIjoiIiwiVVNFUl9ESSI6IiIsIlVTRVJfVFlQRV9ESSI6IiIsIlVTRVJfTkFNRSI6IiIsIlJFRElSRUNUX1RJTUVPVVQiOiIiLCJNRVJDSEFOVF9URU1QTEFURSI6InY0IiwiZXhwIjoxNjA5MTExMTAzLCJpc3MiOiJhdXRoMCJ9.p2JIfEJokyy0OrKJghv4aJvXGrjErEfAY6f0Ane1Ghs"
    }
}
```

{% endtab %}

{% tab title="Cabeceras" %}

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

{% hint style="info" %}
La identificación del comercio (merchant) y el FIXED\_HASH se proporcionan al momento de [crear una cuenta](https://registro.payvalida.com) en nuestra plataforma.

Se verifican los datos enviados y se actualizan aquellos que sean diferentes a la orden original.
{% endhint %}

{% hint style="danger" %}
Para actualizar la orden, es necesario que su estado sea **PENDIENTE**, de lo contrario no podrá actualizarse.
{% endhint %}

## Ejemplo

* **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 := "PATCH"
	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 => "PATCH",
  CURLOPT_POSTFIELDS =>"{\n    \"merchant\": \"kuanto\",\n    \"email\": \"someone@example.com\",\n    \"country\": 343,\n    \"order\": \"999999991\",\n    \"reference\": \"46534512\",\n    \"money\": \"COP\",\n    \"amount\": \"9500\",\n    \"description\": \"Orden de prueba\",\n    \"method\": \"\",\n    \"language\": \"es\",\n    \"recurrent\": true,\n    \"expiration\": \"27/12/2020\",\n    \"iva\": \"0\",\n    \"checksum\": \"1AC89E7089355B5069222C01779431A192FC4D459C25584D69B64ABBF605FE7CB54A015296A39D234CA9B94FF9F068423AC1E00F5A319EB18F2167B97C8A0BB1\",\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
Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.patch("https://api-test.payvalida.com/api/v3/porders")
  .header("Content-Type", "application/json")
  .body("{\n    \"merchant\": \"kuanto\",\n    \"email\": \"someone@example.com\",\n    \"country\": 343,\n    \"order\": \"999999991\",\n    \"reference\": \"46534512\",\n    \"money\": \"COP\",\n    \"amount\": \"9500\",\n    \"description\": \"Orden de prueba\",\n    \"method\": \"\",\n    \"language\": \"es\",\n    \"recurrent\": true,\n    \"expiration\": \"27/12/2020\",\n    \"iva\": \"0\",\n    \"checksum\": \"1AC89E7089355B5069222C01779431A192FC4D459C25584D69B64ABBF605FE7CB54A015296A39D234CA9B94FF9F068423AC1E00F5A319EB18F2167B97C8A0BB1\",\n    \"user_di\": \"94320444\",\n    \"user_type_di\": \"CC\",\n    \"user_name\": \"NombreUsuario\",\n    \"redirect_timeout\": \"300000\"\n}")
  .asString();
```

* **JavaScript**

```javascript
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":"9500","description":"Orden de prueba","method":"","language":"es","recurrent":true,"expiration":"27/12/2020","iva":"0","checksum":"1AC89E7089355B5069222C01779431A192FC4D459C25584D69B64ABBF605FE7CB54A015296A39D234CA9B94FF9F068423AC1E00F5A319EB18F2167B97C8A0BB1","user_di":"94320444","user_type_di":"CC","user_name":"NombreUsuario","redirect_timeout":"300000"});
var requestOptions = {
  method: 'PATCH',
  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));
```
