Suscripción de consumo
Es el conjunto de métodos que permitirán a nuestros usuarios la creación de clientes, planes, suscripciones y realizar transacciones de planes de consumo.
El principal uso de estos métodos es para realizar cargos únicos a un cliente por un servicio o producto, como por el ejemplo la contratación de un servicio de delivery de algún producto o la compra de un producto en particular.
Si se desea que el cliente vaya directo a la pasarela de pago de webpay es necesario enviar a través de parámetros en la url, en caso de una suscripción con los parámetros básicos como son nombre, apellido, email y teléfono, la url tendría la siguiente forma: https://BASE_URL/suscripcion/index?idplan=607&verif=b4280f5e&nombre=vicente&apellido=borjas&email=example@ example.com&telefono=986523565&direct_full=true
Si se desean agregar otros parámetros estos deben ser concatenados a través de & continuando con la estructura antes mostrada.
https://app.payku.cl/ (Default server) · https://des.payku.cl/ (Sandbox server)Crear cliente
Sección titulada «Crear cliente»/api/suclient/Este método permite la creación de un cliente.
Cuerpo de la solicitud
| Parámetro | Tipo | Descripción |
|---|---|---|
emailrequerido |
string <email> | Email del cliente. |
namerequerido |
string | Nombre del cliente. |
rut |
integer | Registro Único Tributario del cliente, será permitido el ingreso de este dato con ó sin guión. |
phonerequerido |
string | Teléfono del cliente. |
address |
string | Dirección del cliente. |
country |
string | País del cliente. |
region |
string | Región del cliente. |
city |
string | Ciudad del cliente. |
postal_code |
string | Código postal del cliente. |
additional_parameters |
object | Parámetros adicionales del cliente (Opcional). |
parameter_1 |
string | Nombre del parámetro dado por el usuario payku |
parameter_2 |
string | Nombre del parámetro dado por el usuario payku |
curl -X POST \https://BASE_URL/api/suclient \-H 'Accept: application/json, text/plain, */*' \-H 'Sign: SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO' \-H 'Authorization: Bearer TOKEN_PUBLICO' \-H 'Content-Type: application/json' \-H 'Host: BASE_URL' \-d { "email": "[email protected]", "name": "John Doe", "rut": "111111111", "phone": "923122312", "address": "Moneda 101", "country": "Chile", "region": "Metropolitana", "city": "Santiago", "postal_code": "850000, "additional_parameters":{ "parameter_1": "example", "parameter_2": "example 2", } }'$client = new \GuzzleHttp\Client(); $body = $client->request('POST', 'https://BASE_URL/api/suclient', [ 'json' => [ 'name' => 'John Doe', 'rut' => '111111111', 'phone' => '923122312', 'address' => 'Moneda 101', 'country' => 'Chile', 'region' => 'Metropolitana', 'city' => 'Santiago', 'postal_code' => '850000', 'additional_parameters' => [ 'parameter_1' => 'example', 'parameter_2' => 'example 2' ] ], 'headers' => [ 'Sign' => 'SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO', 'Authorization' => 'Bearer TOKEN_PUBLICO' ] ])->getBody();$response = json_decode($body);const request = async (data) => { const response = await fetch('https://BASE_URL/api/suclient', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Sign': 'SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO', 'Authorization': 'Bearer TOKEN_PUBLICO' }, body: JSON.stringify(data) }); const result = await response.json(); console.log(result)}
let data = { name: "John Doe", rut: "111111111", phone: "923122312", address: "Moneda 101", country: "Chile", region: "Metropolitana", city: "Santiago", postal_code: "850000", additional_parameters:{ parameter_1: "example", parameter_2: "example 2", }};
request(data);Respuestas
{ "status": "active", "id": "cl0be4c8e623c167bc8b777", "rut": "11111111", "name": "John Doe", "phone": "923122312", "address": "Moneda 101", "country": "Chile", "region": "Metropolitana", "city": "Santiago", "postal_code": "850000", "created_at": "2023-09-29", "update_at": null, "subcriptions": null, "additional_parameters": { "parameter_1": "example", "parameter_2": "example" }}Campos de la respuesta
| Parámetro | Tipo | Descripción |
|---|---|---|
status |
string | Estatus del cliente. |
id |
string | Identificador de la transacción creado por payku. |
rut |
string | Registro Único Tributario del cliente. |
name |
string | Nombre del cliente. |
phone |
string | Teléfono del cliente. |
email |
string | Email del cliente. |
address |
string | Dirección del cliente. |
country |
string | País del cliente. |
region |
string | Región del cliente. |
city |
string | Ciudad del cliente. |
postal_code |
string | Código postal del cliente. |
created_at |
string <datetime> | Fecha de registro. |
update_at |
string <datetime> | Fecha de modificación. |
subcriptions |
object | suscripciones del cliente. |
additional_parameters |
object | Parámetros adicionales del cliente (Opcional). |
parameter_1 |
string | Nombre del parámetro dado por el usuario payku |
parameter_2 |
string | Nombre del parámetro dado por el usuario payku |
Error en la solicitud.
{ "status": "failed", "type": "Unprocessable Entity", "message_error": "subject:invalid,amount:is empty,email:is empty,order:invalid"}Campos de la respuesta
| Parámetro | Tipo | Descripción |
|---|---|---|
status |
string | Estatus de la solicitud. |
type |
string | Tipo de error ocurrido. |
message_error |
string | Mensaje de error |
Token Público incorrecto.
{ "type": "Unauthorized", "message_error": { "error": "waiting token public" }}Campos de la respuesta
| Parámetro | Tipo | Descripción |
|---|---|---|
type |
string | Tipo de error ocurrido. |
message_error |
object | |
error |
string | Mensaje de error |
Crear plan
Sección titulada «Crear plan»/api/suplan/Este método permite la Inserción de los datos para la creación de un plan.
Cuerpo de la solicitud
| Parámetro | Tipo | Descripción |
|---|---|---|
namerequerido |
string | Nombre del plan. |
description |
string | Descripción del plan. |
url_notify_suscription |
string <url> | URL donde se notificare el estado de la suscripcion. |
url_notify_payment |
string <url> | URL donde se notificare el estado del pago. |
url_success_payment |
string <url> | URL donde se redigira al usuario si el pago es exitoso. |
url_failed_payment |
string <url> | URL donde se redigira al usuario si el pago es fallido. |
curl -X POST \https://BASE_URL/api/suplan \-H 'Accept: application/json, text/plain, */*' \-H 'Sign: SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO' \-H 'Authorization: Bearer TOKEN_PUBLICO' \-H 'Content-Type: application/json' \-H 'Host: BASE_URL' \-d { "name": "Test plan", "description": "Test Plan" }'$client = new \GuzzleHttp\Client(); $body = $client->request('POST', 'https://BASE_URL/api/suplan', [ 'json' => [ 'name' => 'Test plan', 'description' => 'Test Plan' ], 'headers' => [ 'Sign' => 'SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO', 'Authorization' => 'Bearer TOKEN_PUBLICO' ] ])->getBody(); $response = json_decode($body);const request = async (data) => { const response = await fetch('https://BASE_URL/api/suplan', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Sign': 'SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO', 'Authorization': 'Bearer TOKEN_PUBLICO' }, body: JSON.stringify(data) }); const result = await response.json(); console.log(result)}
let data = { name: "Test plan", description: "Test Plan"};
request(data);Respuestas
{ "status": "success", "id": "pl4293e97a87195bb9edcd"}Campos de la respuesta
| Parámetro | Tipo | Descripción |
|---|---|---|
status |
string | Estatus. |
id |
string | Identificador único de plan por payku. |
Error en la solicitud.
{ "status": "failed", "type": "Unprocessable Entity", "message_error": "subject:invalid,amount:is empty,email:is empty,order:invalid"}Campos de la respuesta
| Parámetro | Tipo | Descripción |
|---|---|---|
status |
string | Estatus de la solicitud. |
type |
string | Tipo de error ocurrido. |
message_error |
string | Mensaje de error |
Token Público incorrecto.
{ "type": "Unauthorized", "message_error": { "error": "waiting token public" }}Campos de la respuesta
| Parámetro | Tipo | Descripción |
|---|---|---|
type |
string | Tipo de error ocurrido. |
message_error |
object | |
error |
string | Mensaje de error |
Crear suscripción
Sección titulada «Crear suscripción»/api/sususcription/Este método permite al usuario de una cuenta payku crear una suscripción a un plan de suscripción de monto fijo, suscripción de plan de consumo y suscripción de monto variable a uno de sus clientes, para este ultimo tipo de suscripción es necesario enviar el monto que sera cobrado en la suscripción, es importante destacar que al realizar esta solicitud por primera vez se realizará un cobro de $50 que permite comprobar que la tarjeta se encuentra activa y es válida, en el caso de un plan de suscripción fijo el cobro del servicio será automático a partir del mes siguiente de la fecha de suscripción y en el caso que la suscripción sea a un plan de consumo será necesario utilizar el endpoint api/sutransaction para generar la transacción.
Cuerpo de la solicitud
| Parámetro | Tipo | Descripción |
|---|---|---|
planrequerido |
string | Id del plan. |
clientrequerido |
string | Id del cliente. |
curl -X POST \https://BASE_URL/api/sususcription \-H 'Accept: application/json, text/plain, */*' \-H 'Sign: SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO' \-H 'Authorization: Bearer TOKEN_PUBLICO' \-H 'Content-Type: application/json' \-H 'Host: BASE_URL' \-d { "plan": "pl9697fb170834ad42dd00", "client": "cl9b1e1dd988694f30fa30" }'$client = new \GuzzleHttp\Client(); $body = $client->request('POST', 'https://BASE_URL/api/sususcription, [ 'json' => [ 'plan' => 'pl9697fb170834ad42dd00', 'client' => 'cl9b1e1dd988694f30fa30', ], 'headers' => [ 'Sign' => 'SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO', 'Authorization' => 'Bearer TOKEN_PUBLICO' ] ])->getBody(); $response = json_decode($body);const request = async (data) => { const response = await fetch('https://BASE_URL/api/sususcription', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Sign': 'SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO', 'Authorization': 'Bearer TOKEN_PUBLICO' }, body: JSON.stringify(data) }); const result = await response.json(); console.log(result)}
let data = { plan: "pl9697fb170834ad42dd00", client: "cl9b1e1dd988694f30fa30"};
request(data);Respuestas
{ "status": "register", "id": "sucaab7865dceaff49d8b3", "url": "http://BASE_URL/gateway/registrosuscripcion?tipoplan=2&plan=true&token=219&validacion=e6c50ba0e0"}Campos de la respuesta
| Parámetro | Tipo | Descripción |
|---|---|---|
status |
string | Estatus. |
id |
string | Identificador único de suscripción por payku. |
url |
string | Url pago y activación de suscripción. |
Error en la solicitud.
{ "status": "failed", "type": "Unprocessable Entity", "message_error": "subject:invalid,amount:is empty,email:is empty,order:invalid"}Campos de la respuesta
| Parámetro | Tipo | Descripción |
|---|---|---|
status |
string | Estatus de la solicitud. |
type |
string | Tipo de error ocurrido. |
message_error |
string | Mensaje de error |
Token Público incorrecto.
{ "type": "Unauthorized", "message_error": { "error": "waiting token public" }}Campos de la respuesta
| Parámetro | Tipo | Descripción |
|---|---|---|
type |
string | Tipo de error ocurrido. |
message_error |
object | |
error |
string | Mensaje de error |
Crear transacción
Sección titulada «Crear transacción»/api/sutransaction/Este método permite al usuario de una cuenta payku crear una transacción única a uno de sus clientes que encuentre suscrito a un plan de consumo.
Cuerpo de la solicitud
| Parámetro | Tipo | Descripción |
|---|---|---|
suscriptionrequerido |
string | Identificador único de suscripción por payku. |
amount |
string | Monto. |
order |
string | Orden. |
description |
string | Descripción. |
marketplace |
string | ma0690b6451a7043d5. |
card |
string | Con el identificador puede indicar a cual de las tarjetas activas se realizará el cobro (OPCIONAL). |
curl -X POST \https://BASE_URL/api/sutransaction \-H 'Accept: application/json, text/plain, */*' \-H 'Sign: SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO' \-H 'Authorization: Bearer TOKEN_PUBLICO' \-H 'Content-Type: application/json' \-H 'Host: BASE_URL' \-d { "suscription": "sucaab7865dceaff49d8b3", "amount": "10000", "order": "001", "description": "Descripción", "marketplace": "ma0690b6451a7043d5" }'$client = new \GuzzleHttp\Client(); $body = $client->request('POST', 'https://BASE_URL/api/sutransaction, [ 'json' => [ 'suscription' => sucaab7865dceaff49d8b3, 'order' => '001', 'monto' => '10000', 'description' => 'descripcion', 'marketplace' => "ma0690b6451a7043d5" ], 'headers' => [ 'Sign' => 'SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO', 'Authorization' => 'Bearer TOKEN_PUBLICO' ] ])->getBody(); $response = json_decode($body);const request = async (data) => { const response = await fetch('https://BASE_URL/api/sutransaction', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Sign': 'SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO', 'Authorization': 'Bearer TOKEN_PUBLICO' }, body: JSON.stringify(data) }); const result = await response.json(); console.log(result)}
let data = { suscription: "sucaab7865dceaff49d8b3", amount: "10000", order: "001", description: "Descripción", marketplace: "ma0690b6451a7043d5"};
request(data);Respuestas
{ "status": "success", "order": "001", "amount": "10000", "transaction_id": "204444", "verification_key": "025dcad37e071daa8bfc2df35189009db65692a4ff766856108be1675e870839"}Campos de la respuesta
| Parámetro | Tipo | Descripción |
|---|---|---|
status |
string | Estatus de transacción.Los posibles estados que puede obtener son los siguientes:
|
order |
string | Orden. |
amount |
string | Monto. |
transaction_id |
string | Número de transacción. |
verification_key |
string |
Error en la solicitud.
{ "status": "failed", "type": "Unprocessable Entity", "message_error": "subject:invalid,amount:is empty,email:is empty,order:invalid"}Campos de la respuesta
| Parámetro | Tipo | Descripción |
|---|---|---|
status |
string | Estatus de la solicitud. |
type |
string | Tipo de error ocurrido. |
message_error |
string | Mensaje de error |
Token Público incorrecto.
{ "type": "Unauthorized", "message_error": { "error": "waiting token public" }}Campos de la respuesta
| Parámetro | Tipo | Descripción |
|---|---|---|
type |
string | Tipo de error ocurrido. |
message_error |
object | |
error |
string | Mensaje de error |
Eliminar tarjeta
Sección titulada «Eliminar tarjeta»/api/suscriptionsdeletecards/Este método permite eliminar una tarjeta asociada a la suscripción.
Cuerpo de la solicitud
| Parámetro | Tipo | Descripción |
|---|---|---|
suscriptionrequerido |
string | ID de la tarjeta asociada. |
curl -X POST \https://BASE_URL/api/suscriptionsdeletecards \-H 'Accept: application/json, text/plain, */*' \-H 'Sign: SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO' \-H 'Authorization: Bearer TOKEN_PUBLICO' \-H 'Content-Type: application/json' \-H 'Host: BASE_URL' \-d { "card": "surec804a8ed60c0a8cb8839" }'$client = new \GuzzleHttp\Client(); $body = $client->request('POST', 'https://BASE_URL/api/suscriptionsdeletecards', [ 'json' => [ 'card' => surec804a8ed60c0a8cb8839, ], 'headers' => [ 'Sign' => 'SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO', 'Authorization' => 'Bearer TOKEN_PUBLICO' ] ])->getBody(); $response = json_decode($body);const request = async (data) => { const response = await fetch('https://BASE_URL/api/suscriptionsdeletecards', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Sign': 'SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO', 'Authorization': 'Bearer TOKEN_PUBLICO' }, body: JSON.stringify(data) }); const result = await response.json(); console.log(result)}
let data = { card: "surec804a8ed60c0a8cb8839"};
request(data);Respuestas
{ "status": "Delete", "card": "surec804a8ed60c0a8cb8839"}Campos de la respuesta
| Parámetro | Tipo | Descripción |
|---|---|---|
status |
string | Status. |
card |
string | Identificador único de La tarjeta asociada a la suscripción. |
Error en la solicitud.
{ "status": "failed", "type": "card", "message_error": "is not valid"}Campos de la respuesta
| Parámetro | Tipo | Descripción |
|---|---|---|
status |
string | Estatus de la solicitud. |
type |
string | Tipo de error ocurrido. |
message_error |
string | Mensaje de error |
Token Público incorrecto.
{ "type": "Unauthorized", "message_error": { "error": "waiting token public" }}Campos de la respuesta
| Parámetro | Tipo | Descripción |
|---|---|---|
type |
string | Tipo de error ocurrido. |
message_error |
object | |
error |
string | Mensaje de error |