Saltar al contenido principal
Centro de Ayuda

Pasarelas de pago externas

Importante: Esta es una funcionalidad avanzada que te permite conectar cualquier método de pago a tu tienda. Normalmente, un desarrollador web externo (o la propia pasarela de pago) puede realizar esta integración.

Una tienda Jumpseller se puede integrar con cualquier Pasarela de Pago Externo (EPG) de su elección. Cualquier servicio de pago en línea con la capacidad de aceptar solicitudes HTTP y la capacidad de procesar transacciones de pago en línea se puede integrar en su tienda Jumpseller como un método de pago externo.

Cómo funciona

  1. El cliente realiza un Pedido en tu tienda Jumpseller y selecciona tu Pasarela de Pago Externa como método de pago.

  2. El cliente es redirigido a su Método de Pago URL usando una solicitud POST con los siguientes Parámetros de Solicitud. Su pasarela de pago debe verificar la Firma antes de mostrar la página de pago.

  3. El cliente procede con la transacción en su página de pago.
    • Si el cliente completa con éxito el flujo de pago, debe ser redirigido (GET) a x_url_complete con todos los Parámetros de respuesta necesarios como parámetros de consulta, incluida la Firma.
    • Si el cliente cancela o abandona el pago, debe redirigirse (GET) a x_url_cancel con todos los Parámetros de respuesta necesarios como parámetros de consulta, incluida la Firma
  4. Su pasarela de pago debe POST una devolución de llamada asíncrona a x_url_callback con los mismos Parámetros de respuesta. Esto asegura que los pedidos se pueden completar incluso en los casos en que la conexión del cliente a Jumpseller se termina por un error de red.
    • Jumpseller devuelve un estado HTTP 200 en un callback exitoso, de lo contrario debe hacer al menos 3 intentos.
    • Envía siempre al cliente y el callback a las URLs x_url_complete, x_url_cancel y x_url_callback recibidas en la solicitud, en lugar de construirlas tú mismo.

Parámetros del pedido

Después de que el cliente haya completado los detalles de pago y realizado el pedido en su tienda, Jumpseller hará una solicitud POST a la URL de configuración de EPG con los siguientes parámetros:

Clave de parámetro Descripción Ejemplo
x_url_complete URL a redirigir después de una transacción exitosa (GET). https://demostore.jumpseller.com/checkout/external_payment_complete/1001
x_url_callback URL para proporcionar notificaciones sobre la transacción de forma asíncrona (POST). https://demostore.jumpseller.com/checkout/external_payment_notification/1001
x_url_cancel URL a redirigir cuando el cliente retira o cancela el pago (GET). https://demostore.jumpseller.com/checkout/external_payment_cancel/1001
x_account_id Identificador de cuenta proporcionado por la EPG. 223504
x_amount Valor total de la transacción. 123.0
x_tax Valor de impuesto de la transacción. (Solo para nueva versión) 23.0
x_shipping Valor de envío de la transacción. (Solo para nueva versión) 15.0
x_discount Valor de discuento en la transacción. (Solo para nueva versión) 10.0
x_currency Código de divisa ISO. EUR
x_reference Número de pedido en su tienda Jumpseller. 1001
x_shop_country Código ISO del país de la tienda Jumpseller. ES
x_shop_name Nombre de la tienda Jumpseller. Demostore
x_description Descripción de la transacción (opcional). \\nProducto:\\n1 x teste: 1.000 EUR\\nImposto: 23€
x_signature Vea la sección “Firma” 3e3b0fa9b8e5e0309d8a4fd6ad00048548f8434873cfed2b42507ca9b580d053
x_customer_first_name   Prueba
x_customer_last_name   Jumpseller
x_customer_email   test@jumpseller.com
x_customer_phone   912345678
x_customer_shipping_first_name   Prueba
x_customer_shipping_last_name   Jumpseller
x_customer_shipping_city   Oporto
x_customer_shipping_address1   Calle de Almada 123
x_customer_shipping_address2    
x_customer_shipping_state   Oporto
x_customer_shipping_zip   4050
x_customer_shipping_country   ES
x_customer_shipping_phone   223456789
x_customer_billing_first_name   Prueba
x_customer_billing_last_name   Jumpseller
x_customer_billing_city   Oporto
x_customer_billing_address1   Calle de Almada 123
x_customer_billing_address2    
x_customer_billing_state   Oporto
x_customer_billing_zip   4050
x_customer_billing_country   ES
x_customer_billing_phone   223456789
x_customer_taxid Identificación tributaria del cliente. 1111111-1

Parámetros de respuesta

Todas las respuestas enviadas a la URL de devolución asíncrona proporcionada deben incluir los siguientes parámetros:

Clave del parámetro Descripción Ejemplo  
x_account_id Identificador de cuenta facilitado por GEP 223504  
x_amount Importe total de la transacción. Debe coincidir con el x_amount enviado en la solicitud. 123,0  
x_tax Valor de impuesto de la transacción. (Solo para nueva versión) 23.0  
x_shipping Valor de envío de la transacción. (Solo para nueva versión) 15.0  
x_discount Valor de discuento en la transacción. (Solo para nueva versión) 10.0  
x_currency Código de moneda ISO EUR  
x_reference Número de pedido en su tienda Jumpseller. Debe coincidir con el x_reference enviado en la solicitud. 1001  
x_result Actualización del estado de la transacción completed \ pending \ failed  
x_timestamp Hora UTC en la que se completó la transacción 2018-07-11T12:15:37Z (AAAA-MM-DDTHH:MM:SSZ)  
x_message (opcional) Descripción textual del resultado. Se muestra al cliente. “No se pudo procesar la tarjeta de crédito”.  
x_signature Véase la sección “Firma”. 3e3b0fa9b8e5e0309d8a4fd6ad00048548f8434873cfed2b42507ca9b580d053  

ID de cuenta

Todas las solicitudes y respuestas deben incluir un campo para la validación de la cuenta, x_account_id, que debe coincidir con el campo Clave de método de pago de su configuración de pago. Este es el identificador de cuenta que debe proporcionar su cuenta de pasarela de pago.

La Clave del Método de Pago y el Secreto del Método de Pago son obligatorios. Un método de pago sin alguno de ellos no se puede activar, y Jumpseller rechaza las respuestas de sus pedidos. Mantén el secreto en privado: solo tus servidores y Jumpseller deben conocerlo, así que nunca lo envíes al navegador del cliente.

Firma

Todas las peticiones y respuestas deben incluir un campo firmado, x_signature, para comprobar la integridad de las peticiones que se consigue utilizando HMAC-SHA256.

En un entorno Ruby, el siguiente código obtendría una firma válida:

OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), secret, result)

  • secret - el campo Secreto del Método de Pago en su configuración de pago, este es un valor que debe ser proporcionado por su cuenta de pasarela de pago y compartido con Jumpseller.
  • result - el hash de la solicitud/respuesta ensamblado en una sola cadena de todos los pares clave-valor que comienzan con el prefijo x_, ordenados alfabéticamente y concatenados sin separadores. Por favor, asegúrese de excluir el campo x_signature de este cálculo al comprobar cualquier solicitud recibida de los servidores de Jumpseller.

Notas importantes:

  • Asegúrese de que utiliza la codificación UTF-8.
  • x_message (& x_description) - cualquier carácter de nueva línea (‘\n’) debe ser escapado correctamente como (‘\n’) antes de calcular la firma.
  • x_amount - los valores se suministran como cadenas con decimales, incluso para totales redondeados (por ejemplo, 12345.0), para que no se conviertan inesperadamente.
  • x_signature - el parámetro debe ser excluido de la comprobación de pedidos Jumpseller

Calculadora de firma

Pega los parámetros de una solicitud o respuesta y el Secreto del Método de Pago para comprobar la firma que calcula tu integración.

La firma se calcula en tu navegador y no se envía nada a Jumpseller. Usa un secreto de prueba.

Texto a firmar
x_signature

Ejemplos

Ruby

Creación de una firma válida.

require 'openssl'

secret = 'external_payment_gateway_password'

hash = {
  x_shop_name: 'Manchester Plant ', x_account_id: '223504', x_amount: '123.0', x_currency: 'EUR',
  x_reference: '1001', x_result: "completed",  x_timestamp: '2014-03-24T12:15:41Z',
  x_message: "\\nProducto:\\n1 x Energise EDT 125 ML: 29.500 EUR\\nImpuesto: €6.785,00"
}

result = hash.sort.join

x_signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), secret, result)

=> "d5dbffd999d4cbf70de494b4eec410d68deb540de13ebf5cfc03903c78bbd496"

Haz una petición GET a external_payment_complete.

require "uri"
require "net/http"

url = URI("https://demostore.jumpseller.com/checkout/external_payment_complete/1026?x_signature=c6296d5a1b67c691e209a2023bee341f60d11b479f864b2016a8005a21888c64&x_shop_name=Manchester Plant &x_account_id=129785&x_amount=300.0&x_currency=CLP&x_reference=1026&x_result=completed&x_timestamp=2020-06-12T18:17:15.898Z&x_message=\\nProducto:\\n1 x Prueba de pago: $300")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Get.new(url)
response = https.request(request)

Si muestras response.read_body verás el html de la página que fue redirigida.

Haz una petición POST a external_payment_notification.

require "uri"
require "net/http"

url = URI("https://demostore.jumpseller.com/checkout/external_payment_notification/1026")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request.set_form_data(
  x_signature: 'c6296d5a1b67c691e209a2023bee341f60d11b479f864b2016a8005a21888c64', x_shop_name: 'Manchester Plant ',
  x_account_id: '129785', x_amount: '300.0', x_currency: 'CLP', x_reference: '1026', x_result: 'completed',
  x_timestamp: '2020-06-12T18:17:15.898Z', x_message: '\nProducto:\n1 x Prueba de pago: $300'
)
response = https.request(request)
=> #<Net::HTTPOK 200 OK readbody=true>

NodeJs

Crear una firma válida.

var crypto = require('crypto');

let body = {
  "x_account_id": "1234",
  "x_amount": "1000.0",
  "x_currency": "EUR",
  "x_reference": "1033",
  "x_result": "completed",  
  "x_timestamp": "2020-06-12T18:17:15.898Z",
  "x_message": "\\nProducto:\\n1 x Prueba de pago: $300"
}

let keys = Object.keys(body);

keys = keys.sort();

let toSign = '';
let query = '';
keys.forEach((key) => {
  toSign += key + body[key];
  query += encodeURIComponent(key) + '=' + encodeURIComponent(body[key]) + '&';
});

const secretKey = 'external_payment_gateway_password';
var signer = crypto.createHmac('sha256', secretKey);
var result = signer.update(toSign, 'utf8').digest('hex');

query += encodeURIComponent('x_signature')+"="+encodeURIComponent(result);

Haz una petición GET a external_payment_complete.

var request = require('request');

var options = {
  'method': 'GET',
  'url': 'https://demostore.jumpseller.com/checkout/external_payment_complete/3120?x_signature=be8d4df696d4e2c770b1890e67351b1f9be9f98cd94f421dfc7787c39f0e23c7&x_account_id=1988063&x_amount=1000.0&x_currency=EUR&x_reference=3120&x_result=completed&x_timestamp=2020-06-12T18:17:15.898Z&x_message=\\nProducto:\\n1 x Prueba de pago: $300'
};

request(options, function(error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

Si muestras response.body verás el html de la página que fue redirigida.

PHP

# !/usr/bin/env php
<?php

$secretKey = "external_payment_gateway_password";

$params = array( "x_shop_name" => "Manchester Plant ", "x_account_id" => "223504", "x_amount" => "123.0", "x_currency" => "EUR", "x_reference" => "1001", "x_result" => "completed",  "x_timestamp" => '2014-03-24T12:15:41Z', "x_message" => "\\nProducto:\\n1 x Energise EDT 125 ML: 29.500 EUR\\nImpuesto: €6.785,00" );

$keys = array_keys($params);
sort($keys);

$toSign = "";
foreach ($keys as $key) { $toSign .= $key . $params[$key]; }

$sign = hash_hmac('sha256', $toSign, $secretKey);
echo $sign . "\xA";

// => d5dbffd999d4cbf70de494b4eec410d68deb540de13ebf5cfc03903c78bbd496
?>

Flujogramas

En esta sección se presentan los flujogramas de los procesos de la pasarela de pago externa para tener una representación más precisa de cómo Jumpseller define los diferentes procesos de los medios de pago externos

Notificación de pago externo

Diagrama de flujo de notificación de pago externo

Cancelación de pago externo

Diagrama de flujo de cancelación de pago externo

Pago externo completado

Diagrama de flujo de pago externo completado

Estado Resultado

Toda respuesta debe incluir un campo x_result con uno de los siguientes valores. Lo que hace Jumpseller depende de la URL a la que se envía la respuesta:

x_result x_url_callback (POST) x_url_complete (GET) x_url_cancel (GET)
pending Pedido en Pending Payment Pedido en Pending Payment Pedido en Pending Payment
completed Pedido en Paid Pedido en Paid No aceptado
failed Pedido Canceled No aceptado El pedido queda en Pending Payment, para que el cliente pueda intentar pagar de nuevo
  • pending no cambia un pedido que ya está Canceled o Abandoned, solo agrega un mensaje a su Historial de Pedidos.
  • Una vez que un pedido está Paid, las respuestas enviadas para él después se ignoran.
  • Un valor no aceptado en esa URL se rechaza.

Cómo publicar

Una vez que haya al menos 2 tiendas Jumpseller utilizando su Gateway que hayan procesado al menos 150 transacciones exitosas cada una, puede solicitar que Jumpseller liste su Gateway públicamente para todos los comerciantes. Si es aprobado, su Gateway será listado en el Panel de Administración de Jumpseller y en la página pública pasarelas de pago de Jumpseller.

Para solicitar un listado público para su Gateway, envíe un correo electrónico a team@jumpseller.com con los siguientes detalles:

  • Nombre del pago externo.
  • Documentación sobre: cómo contratar, cómo configurar, cómo usar, sección de preguntas frecuentes (opcional).
  • Listado de comercios Jumpseller que utilizan tu pasarela y el número total de transacciones procesadas por comercio.
  • Screencasts del proceso de checkout para intentos de pago exitosos y fallidos.
  • Logo: Admin 110x66px / Checkout 280x35px / Todo en PNG transparente.

Se publicará en el panel de administración, junto con otras soluciones de pago, con su propio logotipo. Como se muestra en la imagen de abajo:

sampleexternalpayments

Para más anuncios en boletines, redes sociales y otras actividades de marketing, ponte en contacto con partners@jumpseller.com.

¡Comienza tu viaje con nosotros!

Probar gratis por 7 días. No se requiere tarjeta de crédito.