How build a Jumpseller App
A Jumpseller App is an application that interacts with one or more online stores that use Jumpseller. The App can be loaded through an iframe insid...
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.
El cliente realiza un Pedido en tu tienda Jumpseller y selecciona tu Pasarela de Pago Externa como método de pago.
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.
GET
) a x_url_complete
con todos los Parámetros de respuesta necesarios como parámetros de consulta, incluida la Firma.GET
) a x_url_cancel
con todos los Parámetros de respuesta necesarios como parámetros de consulta, incluida la Firma
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. HTTP 200
en un callback exitoso, de lo contrario debe hacer al menos 3 intentos.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_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 | Sólo se envía a métodos de pago instalados después del 2022/07/19 | 1111111-1 |
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 | 123,0 |
x_currency | Código de moneda ISO | EUR |
x_reference | Número de pedido en su tienda Jumpseller | 1001 |
x_result | Actualización del estado de la transacción |
completed \ pending \ failed
|
x_timestamp | Código de moneda ISO | EUR |
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 |
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.
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:
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 JumpsellerCreació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_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::Post.new(url)
response = https.request(request)
=> #<Net::HTTPOK 200 OK readbody=true>
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.
# !/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
?>
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
Todas las respuestas enviadas al Callback URL proporcionado deben incluir un campo x_result con uno de los siguientes valores de cadena:
pending
- El equivalente a Pending Payment en su Panel de Administración de Jumpseller, esta acción agregará un mensaje al Historial de Pedidos sin cambiar el estado del Pedido.failed
- El equivalente a Cancelled en su Panel de Administración de Jumpseller, esta acción cancelará la orden y cambiará su estado.completed
- El equivalente a Paid en su Panel de Administración de Jumpseller, esta acción cambiará el estado de la orden.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:
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:
Para más anuncios en boletines, redes sociales y otras actividades de marketing, ponte en contacto con partners@jumpseller.com.
Pruébala gratis durante 14 días. No necesitas tarjeta de crédito.