Generar link de pago vía API

1. Crear link de pago

El siguiente snippet incorpora todas las partes del paso 1.
Copia y pega el siguiente fragmento de código en tu sandbox y corre el código para crear a un objeto checkout y opcionalmente también puedes enviarlo por correo electrónico o SMS.

Para más información sobre las diferentes partes del snippet favor de seguir el resto del tutorial.

curl --request POST \
  --url https://api.conekta.io/checkouts \
  --header 'accept: application/vnd.conekta-v2.0.0+json' \
  -u key_eYvWV7gSDkNYXsmr: \
  --header 'content-type: application/json' \
  --data '{
    "name": "Payment Link Name",
    "type": "PaymentLink",
    "recurrent": false,
    "expires_at": 1590882634,
    "allowed_payment_methods": ["cash", "card", "bank_transfer"],
    "needs_shipping_contact": true,
    "order_template": {
        "line_items": [{
            "name": "Red Wine",
            "unit_price": 1000,
            "quantity": 10
        }],
        "currency": "MXN",
        "customer_info": {
            "name": "Juan Perez",
            "email": "[email protected]",
            "phone": "5566982090"
        }
    }
 }'

📘

Fecha de expiración

La fecha de expiración puede ser un timestamp comprendido entre 2 a 365 días (el rango válido se tomará a partir del siguiente día de fecha de creación a las 00:01 hrs)

1.1 Asociar un customer con link de pago

Si quieres crear customers y asociarlos con el link de pago entonces puedes hacer las siguientes dos peticiones.

Crear el customer

curl -H "Accept: application/vnd.conekta-v2.0.0+json"\
-H "Content-type: application/json" \
-u key_XXXXXXXXX: \
-X POST -d '{
    "name": "Vicente Mendoza",
    "email": "[email protected]",
    "phone": "5566982093",
    "shipping_contacts": [{
        "phone": "+5566982096",
        "receiver": "Vicente Mendoza",
        "address": {
            "street1": "Nuevo Leon 254",
            "country": "MX",
            "postal_code": "06100"
        }
    }]
}' https://api.conekta.io/customers

Crear link de pago asociado a ese customer

curl --request POST \
--url https://api.conekta.io/checkouts \
--header 'accept: application/vnd.conekta-v2.0.0+json' \
-u key_XXXXX: \
--header 'content-type: application/json' \
--data '{
    "name": "Payment Link Name",
    "type": "PaymentLink",
    "recurrent": false,
    "expired_at": 1597635007,
    "allowed_payment_methods": ["cash", "card", "bank_transfer"],
    "needs_shipping_contact": false,
    "order_template": {
        "line_items": [{
            "name": "Red Wine",
            "unit_price": 1000,
            "quantity": 10
        }],
        "currency": "MXN",
        "customer_info": {
            "customer_id": "cus_2nYSnP4EDiREgGte9"
        }
    }
}'

1.2 Compartir la URL del link de pago con el customer

Tienes dos opciones para compartir la url del link de pago, puedes hacerlo a través de sms o correo electrónico.

{
    "id": "42a4c95e-0db2-4ae8-9bb3-ea681acc8281",
    "object": "checkout",
    "name": "Payment Link Name",
    "url": "https://pay.conekta.com/link/42a4c95e0db24ae89bb3ea681acc8281",
    "slug": "42a4c95e0db24ae89bb3ea681acc8281",
    "status": "Issued",
    "type": "PaymentLink",
    "expired_at": 1590882634,
    "allowed_payment_methods": ["cash", "card", "bank_transfer"],
    "needs_shipping_contact": true,
    "livemode": true
}

2. Compartir el link de pago

Vía SMS

Si lo prefieres puedes enviar un sms con el link de pago a través de nuestros sistemas.

curl --request POST \
  --url https://api.conekta.io/checkouts/42a4c95e-0db2-4ae8-9bb3-ea681acc8281/sms \
  --header 'accept: application/vnd.conekta-v2.0.0+json' \
  -u key_eYvWV7gSDkNYXsmr: \
  --header 'content-type: application/json' \
  --data '{
    "phonenumber": "5566982090"
  }'

Vía correo electrónico

Si lo prefieres puedes enviar un email con el link de pago a través de nuestros sistemas.

curl --request POST \
  --url https://api.conekta.io/checkouts/42a4c95e-0db2-4ae8-9bb3-ea681acc8281/email \
  --header 'accept: application/vnd.conekta-v2.0.0+json' \
  -u key_eYvWV7gSDkNYXsmr: \
  --header 'content-type: application/json' \
  --data '{
    "email": "[email protected]"
  }'

3. Recibir la notificación de pago (opcional)

Si tienes configurado un webhook tu puedes recibir el evento charge.paid cada que se reciba un pago exitoso.

$body = @file_get_contents('php://input');
$data = json_decode($body);
http_response_code(200); // Return 200 OK 

if ($data->type == 'charge.paid'){
  $msg = "Tu pago ha sido comprobado.";
  mail("[email protected]","Pago confirmado",$msg);
}
class WebhooksController < ApplicationController
  skip_before_filter :verify_authenticity_token 

  def receive
    data = JSON.parse(request.body.read)
    if data['type'] == 'charge.paid'
        msg = 'Tu pago ha sido comprobado'
        ExampleMailer.paid_email(data, msg)
      end
    end 

    render status: 200
  end
end
import json 

data = json.loads(HttpRequest.body) 

if data.type == 'charge.paid':
  msg['Subject'] = 'Pago confirmado'
  msg['From'] = me
  msg['To'] = you 

  s = smtplib.SMTP('localhost')
  s.sendmail(me, [you], msg.as_string())
  s.quit()
end
//Using nodemailer
var data = typeof req.body == 'string' ? JSON.parse(req.body) : req.body; 

if (data.type == 'order.paid') {
  var mail = {
      from: me,
      to: you,
      subject: 'Pago comprobado',
      text: 'Tu pago ha sido confirmado.'
  };
  transporter.sendMail(mail, function(error, info){
      if(error){ return console.log(error); }
    });
}
import org.json.JSONObject;
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
      BufferedReader get_body = request.getReader(); 

      //Parse JSON
    }
using System.Net.Mail; 

public class ConektaWebhookController : Controller
    {
      MailMessage mail = new MailMessage(you, me); 

      [HttpPost]
      public ActionResult Index()
      {
          Stream req = Request.InputStream;
          req.Seek(0, System.IO.SeekOrigin.Begin); 

          string json = new StreamReader(req).ReadToEnd();
          var obj = JObject.Parse(json);
          var data = obj.SelectToken("data"); 

          if(data.Type == 'charge.paid'){
            mail.Subject = "Pago comprobado";
            mail.Body = "Tu pago ha sido confirmado.";
            client.Send(mail);
          } 

          return new HttpStatusCodeResult(HttpStatusCode.OK);
      }
  }
# N/A