Reembolso de transacciones con Pix
Al recibir pagos con Pix, es posible que necesites realizar operaciones de reembolso. En caso de ser necesario, los reembolsos pueden permanecer en proceso (contingencia) debido a algĂșn error durante el procesamiento de la transacciĂłn, por ejemplo, en la comunicaciĂłn con el Bacen.
Por defecto, estos errores son reportados a quien hizo la solicitud como un 400 - Bad Request
, lo que puede dificultar la comprensiĂłn sobre el status en el que se encuentra el reembolso hasta que el pago pase al status refunded
(en caso de ser aprobado).
Para obtener una respuesta mĂĄs clara, basta con enviar el header X-Render-In-Process-Refunds: true
junto con el request de creaciĂłn de reembolso. De esta forma, la respuesta incluirĂĄ el status 201 - Created
y el campo status
con el valor in_process
.
El header tambiĂ©n puede ser incluido en requests para obtener la lista de reembolsos y para la bĂșsqueda de un reembolso especĂfico. En estos casos, cuando sea aplicable, la respuesta traerĂĄ el mismo valor de estado mencionado anteriormente.
<?php
use MercadoPago\Client\Payment\PaymentRefundClient;
MercadoPagoConfig::setAccessToken("YOUR_ACCESS_TOKEN");
$client = new PaymentRefundClient();
$refund = $client->refund($payment_id, 20);
echo $refund->id;
?>
MercadoPagoConfig.setAccessToken("YOUR_ACCESS_TOKEN");
PaymentRefundClient client = new PaymentRefundClient();
Map<String, String> customHeaders = new HashMap<>();
customHeaders.put("X-Render-In-Process-Refunds", "true");
MPRequestOptions requestOptions = MPRequestOptions.builder()
.customHeaders(customHeaders)
.build();
PaymentRefund refund = client.refund(paymentId, new BigDecimal(20), requestOptions);
import { MercadoPagoConfig, PaymentRefund } from 'mercadopago';
const client = new MercadoPagoConfig({ accessToken: 'YOUR_ACCESS_TOKEN' });
const paymentRefund = new PaymentRefund(client);
refund.create({
payment_id: '<PAYMENT_ID>',
body: {
amount: 100
}
}).then(console.log).catch(console.log);
sdk = mercadopago.SDK('YOUR_ACCESS_TOKEN')
refund_object = {
'amount': 20
}
request_options = mercadopago.config.RequestOptions()
request_options.custom_headers = {
'content-type': 'application/json',
'X-Render-In-Process-Refunds': 'true'
}
sdk.refund().create('payment_id', refund_object, request_options)
sdk = Mercadopago::SDK.new('YOUR_ACCESS_TOKEN')
data = {
amount: 20
}
custom_headers = {
'X-Render-In-Process-Refunds': 'true'
}
custom_request_options = Mercadopago::RequestOptions.new(custom_headers: custom_headers)
refund = sdk.refund.create(payment_id, refund_data: data, request_options: custom_request_options)
MercadoPagoConfig.AccessToken = "YOUR_ACCESS_TOKEN";
PaymentRefundClient client = new PaymentRefundClient();
var requestOptions = new RequestOptions();
requestOptions.CustomHeaders.Add("X-Render-In-Process-Refunds", "true");
var refund = client.Refund(paymentId, 20, requestOptions);
package main
import (
"context"
"fmt"
"github.com/mercadopago/sdk-go/pkg/config"
"github.com/mercadopago/sdk-go/pkg/refund"
)
func main() {
accessToken := "{{ACCESS_TOKEN}}"
cfg, err := config.New(accessToken)
if err != nil {
fmt.Println(err)
return
}
client := refund.NewClient(cfg)
resource, err := client.Create(context.Background(), <PAYMENT_ID>)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(resource)
}
curl --location --request POST 'https://api.mercadopago.com/v1/payments/{payment_id}/refunds \
-H 'X-Render-In-Process-Refunds: true' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'X-Idempotency-Key: {idempotency_key}' \
--data-raw '{
"amount": 20
}'
Ejemplo de respuesta (se omitieron algunos campos)
Json
{
"id": 1150873004,
"payment_id": 23443394602,
"amount": 20,
"metadata": {},
"source": {
"id": "475845652",
"name": "Test Test",
"type": "collector"
},
"date_created": "2022-06-24T16:09:03.944-04:00",
"unique_sequence_number": null,
"refund_mode": "standard",
"adjustment_amount": 0,
"status": "in_process",
"reason": "1",
"labels": [
"hidden",
"contingency"
],
"amount_refunded_to_payer": 20,
"e2e_id": "D00000000202312220000abcdefghijklm",
"partition_details": []
}