Envia el pago a Mercado Pago
Server-Side
Para continuar el proceso de pago hacia Mercado Pago, es necesario que tu backend sepa recibir la informaciĂłn del formulario con el token generado y los datos completados. Su backend debe disponibilizar un endpoint /process_payment
para recibir allĂ todos los datos luego de realizar la acciĂłn submit.
Ya estando en tu backend con toda la informaciĂłn recolectada, es momento de enviar la solicitud a Mercado Pago a travĂ©s de nuestras APIs. Los campos mĂnimos requeridos a enviar son: token
, transaction_amount
, installments
, payment_method_id
y el payer.email
.
Ten en cuenta que para que este paso funcione es necesario que configures tu clave privada y que para interactuar con nuestras APIs recomendamos utilizar la SDK oficial de Mercado Pago.
<?php
use MercadoPago\Client\Payment\PaymentClient;
use MercadoPago\Client\Common\RequestOptions;
use MercadoPago\MercadoPagoConfig;
MercadoPagoConfig::setAccessToken("YOUR_ACCESS_TOKEN");
$client = new PaymentClient();
$request_options = new RequestOptions();
$request_options->setCustomHeaders(["X-Idempotency-Key: <SOME_UNIQUE_VALUE>"]);
$payment = $client->create([
"transaction_amount" => (float) $_POST['<TRANSACTION_AMOUNT>'],
"token" => $_POST['<TOKEN>'],
"description" => $_POST['<DESCRIPTION>'],
"installments" => $_POST['<INSTALLMENTS>'],
"payment_method_id" => $_POST['<PAYMENT_METHOD_ID'],
"issuer_id" => $_POST['<ISSUER>'],
"payer" => [
"email" => $_POST['<EMAIL>'],
"identification" => [
"type" => $_POST['<IDENTIFICATION_TYPE'],
"number" => $_POST['<NUMBER>']
]
]
], $request_options);
echo implode($payment);
?>
Puedes encontrar el estado del pago en el valor status.
const mercadopago = require('mercadopago');
import { MercadoPagoConfig, Payment } from '@src/index';
const client = new MercadoPagoConfig({ accessToken: '<ACCESS_TOKEN>', options: { timeout: 5000 } });
const payment = new Payment(client);
payment
.create({
body: {
transaction_amount: 100,
token: '<TOKEN>',
description: '<DESCRIPTION>',
installments: 1,
payment_method_id: '<PAYMENT_METHOD_ID>',
issuer_id: 310,
payer: {
email: '<EMAIL>',
identification: {
number: '12345678909',
type: 'CPF',
},
},
},
}).then(console.log).catch(console.log);
Puedes encontrar el estado del pago en el valor status.
Map<String, String> customHeaders = new HashMap<>();
customHeaders.put("x-idempotency-key", <SOME_UNIQUE_VALUE>);
MPRequestOptions requestOptions = MPRequestOptions.builder()
.customHeaders(customHeaders)
.build();
MercadoPagoConfig.setAccessToken("YOUR_ACCESS_TOKEN");
PaymentClient client = new PaymentClient();
PaymentCreateRequest paymentCreateRequest =
PaymentCreateRequest.builder()
.transactionAmount(request.getTransactionAmount())
.token(request.getToken())
.installments(request.getInstallments())
.paymentMethodId(request.getPaymentMethodId())
.payer(
PaymentPayerRequest.builder()
.email(request.getPayer().getEmail())
.identification(
IdentificationRequest.builder()
.type(request.getPayer().getIdentification().getType())
.number(request.getPayer().getIdentification().getNumber())
.build())
.build())
.build();
client.create(paymentCreateRequest, requestOptions);
Puedes encontrar el estado del pago en el valor status.
require 'mercadopago'
sdk = Mercadopago::SDK.new('YOUR_ACCESS_TOKEN')
custom_headers = {
'x-idempotency-key': '<SOME_UNIQUE_VALUE>'
}
custom_request_options = Mercadopago::RequestOptions.new(custom_headers: custom_headers)
payment_data = {
transaction_amount: params[:transactionAmount].to_f,
token: params[:token],
installments: params[:installments].to_i,
payment_method_id: params[:paymentMethodId],
payer: {
email: params[:cardholderEmail],
identification: {
type: params[:identificationType],
number: params[:identificationNumber]
}
}
}
payment_response = sdk.payment.create(payment_data, custom_request_options)
payment = payment_response[:response]
puts payment
Puedes encontrar el estado del pago en el valor status.
using System;
using MercadoPago.Client.Common;
using MercadoPago.Client.Payment;
using MercadoPago.Config;
using MercadoPago.Resource.Payment;
MercadoPagoConfig.AccessToken = "YOUR_ACCESS_TOKEN";
var requestOptions = new RequestOptions();
requestOptions.CustomHeaders.Add("x-idempotency-key", "<SOME_UNIQUE_VALUE>");
var paymentRequest = new PaymentCreateRequest
{
TransactionAmount = decimal.Parse(Request["transaction_amount"]),
Token = Request["token"],
Installments = int.Parse(Request["installments"]),
PaymentMethodId = Request["payment_method_id"],
Payer = new PaymentPayerRequest
{
Email = Request["payer"]["email"],
Identification = new IdentificationRequest
{
Type = Request["payer"]["identification"]["type"],
Number = Request["payer"]["identification"]["number"],
},
},
};
var client = new PaymentClient();
Payment payment = await client.CreateAsync(paymentRequest, requestOptions);
Console.WriteLine(payment.Status);
Puedes encontrar el estado del pago en el valor status.
import mercadopago
sdk = mercadopago.SDK("ACCESS_TOKEN")
request_options = mercadopago.config.RequestOptions()
request_options.custom_headers = {
'x-idempotency-key': '<SOME_UNIQUE_VALUE>'
}
request_values = request.get_json()
payment_data = {
"transaction_amount": float(request_values["transaction_amount"]),
"token": request_values["token"],
"installments": int(request_values["installments"]),
"payment_method_id": request_values["payment_method_id"],
"issuer_id": request_values["issuer_id"],
"payer": {
"email": request_values["payer"]["email"],
"identification": {
"type": request_values["payer"]["identification"]["type"],
"number": request_values["payer"]["identification"]["number"]
}
}
}
payment_response = sdk.payment().create(payment_data, request_options)
payment = payment_response["response"]
print("status =>", payment["status"])
print("status_detail =>", payment["status_detail"])
print("id =>", payment["id"])
Puedes encontrar el estado del pago en el valor status.
curl -X POST \
-H 'accept: application/json' \
-H 'content-type: application/json' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'X-Idempotency-Key: SOME_UNIQUE_VALUE' \
'https://api.mercadopago.com/v1/payments' \
-d '{
"transaction_amount": 100,
"token": "ff8080814c11e237014c1ff593b57b4d",
"installments": 1,
"payment_method_id": "visa",
"issuer_id": 310,
"payer": {
"email": "PAYER_EMAIL_HERE"
}
}'
Respuesta
json
{
"status": "approved",
"status_detail": "accredited",
"id": 3055677,
"date_approved": "2019-02-23T00:01:10.000-04:00",
"payer": {
...
},
"payment_method_id": "visa",
"payment_type_id": "credit_card",
"refunds": [],
...
}
El callback onSubmit de Brick contiene todos los datos necesarios para crear un pago; sin embargo, si lo desea, puede incluir detalles adicionales que pueden facilitar el reconocimiento de la compra por parte del comprador y aumentar la tasa de aprobaciĂłn del pago.
Para hacer esto, agregue campos relevantes al objeto enviado, que viene en la respuesta del callback onSubmit de Brick. Algunos de estos campos son: description
(este campo se puede mostrar en los tickets emitidos) y external_reference
(id de compra en su sitio web, lo que permite un reconocimiento de compra mås fåcil). También es posible añadir datos adicionales sobre el comprador.
Conoce todos los campos disponibles para realizar un pago completo en las Referencias de API.
Prueba tu integraciĂłn
Con la integraciĂłn completada, podrĂĄs probar la recepciĂłn de pagos. Para obtener mĂĄs informaciĂłn, accede a la secciĂłn Hacer compra de prueba.
Puedes encontrar el estado del pago en el valor status.