Administrar el depósito en garantía
Retenga cualquier método de pago en depósito en garantía para su posterior liberación.
Un depósito en garantía es un acuerdo para retener fondos en una transacción entre dos o más partes. Los depósitos en garantía ayudan a liquidar un intercambio entre un comprador y un vendedor en función de los requisitos acordados. Cuando un comprador realiza una compra de alto valor y los fondos se mantienen en depósito en garantía, los fondos se retienen para uno o varios vendedores y se pueden liberar de las siguientes maneras
Liberación total o parcial bajo demanda.
Liberación automáticamente después de un número específico de días.
Las liberaciones parciales se pueden liberar por cantidad o porcentaje y de forma proporcional o no proporcional.
El depósito en garantía es una función de Rapyd Collect que funciona con el back-end de su sitio web y retiene los fondos en un Rapyd Wallet. Cuando se realiza la compra, el back-end de su sitio web solicita a Rapyd que procese el pago; a continuación, los fondos se retienen en la billetera. Posteriormente, los fondos se liberan al vendedor del artículo de acuerdo con el acuerdo predeterminado con el vendedor o a solicitud. Cuando se libere el dinero, Rapyd le notifica a través de un webhook que la transferencia se completó correctamente.
Un cliente compra un artículo por 250 USD (dólares estadounidenses) a un vendedor en su plataforma. Retiene los fondos que pagó el cliente en depósito en garantía. Libera automáticamente un monto parcial de los fondos transcurridos 5 días y libera el resto de los fondos al vendedor a solicitud, de acuerdo con sus políticas empresariales.
Certificación PCI
Solo clientes con certificación PCI-DSS pueden gestionar la información de identificación personal de las tarjetas. Este servicio está disponible para los comercios que hayan firmado un acuerdo especial con Rapyd
Paso 1: Procesar el pago en depósito en garantía
Puede encontrar los métodos de pago específicos que aceptará y los campos obligatorios correspondientes que los clientes deben llenar en la sección Cómo funciona.

Un cliente de su plataforma compra un producto a un vendedor.
El back-end del sitio web le pide a Rapyd que procese la transacción y mantenga los fondos en depósito en garantía durante cinco días.
Rapyd procesa los pagos y mantiene los fondos en depósito en garantía.
Paso 2: Liberar los fondos en depósito en garantía

El back-end del sitio web le pide a Rapyd que libere parte de los fondos para el vendedor.
Rapyd libera automáticamente parte de los fondos para el vendedor y continúa manteniendo los fondos restantes en depósito en garantía.
Rapyd libera manualmente los fondos en depósito en garantía restantes al vendedor en función de la entrega del artículo de alto valor.
El siguiente diagrama de estados finitos resume los estados de los pagos en depósito en garantía.
Descripción de los estados
Estado | Descripción |
|---|---|
pending | Se crearon el pago y el depósito en garantía, pero el pago no se ha completado y los fondos no están en depósito en garantía. |
on_hold | El pago se ha completado y los fondos están en depósito en garantía. |
released | La totalidad o parte de los fondos se han entregado a las billeteras. |
canceled | Se cancela el depósito en garantía. |
Prerrequisitos
Para ejecutar los ejemplos de este caso de uso, debe crear los siguientes ID en su propio sandbox:
ewallet_ - Ejecute Crear una billetera para el Rapyd Wallet del vendedor del teléfono. Use la «ID» que obtiene en la respuesta. Para obtener más información, ver Creación de una billetera Rapyd. Repita para la billetera del vendedor del altavoz.
En tu página de pago, permite que el cliente seleccione un método de pago. En primer lugar, debe decidir qué métodos de pago aceptará. En este ejemplo, comprobará si hay métodos de pago en USD (dólares estadounidenses) en los Estados Unidos.
Para eso, utilizará Listar los métodos de pago por país con los siguientes parámetros.
Descripción de los parámetros de consulta
Parámetro de consulta | Descripción |
|---|---|
país | Introduzca US como el código del país para los Estados Unidos. |
currency | Introduzca USD como el código de la moneda para los dólares estadounidenses. |
Solicitud de lista de métodos de pago por país
Solicita la lista de todos los métodos de pago estadounidenses disponibles en USD.
Solicitud
// Request URL: GET https://sandboxapi.rapyd.net/v1/payment_methods/country?country=US¤cy=USD // Message body absent
.NET Core
using System; namespace RapydApiRequestSample { class Program { static void Main(string[] args) { try { string country = "US"; string currency = "USD"; string result = RapydApiRequestSample.Utilities.MakeRequest("GET", $"/v1/payment_methods/country?country={country}¤cy={currency}"); Console.WriteLine(result); } catch (Exception e) { Console.WriteLine("Error completing request: " + e.Message); } } } }
JavaScript
const makeRequest = require('<path-to-your-utility-file>/utilities').makeRequest; async function main() { try { const result = await makeRequest('GET', '/v1/payment_methods/country?country=US¤cy=USD'); console.log(result); } catch (error) { console.error('Error completing request', error); } }
PHP
<?php $path = $_SERVER['DOCUMENT_ROOT']; $path .= "/<path-to-your-utility-file>/utilities.php"; include($path); try { $object = make_request('get', '/v1/payment_methods/country?country=US¤cy=USD'); var_dump($object); } catch (Exception $e) { echo "Error: $e"; } ?>
Python
from pprint import pprint from utilities import make_request results = make_request(method='get', path=f'/v1/payment_methods/country?country=US¤cy=USD') pprint(results)
Respuesta de la lista de métodos de pago por país
Veamos la respuesta.
Respuesta
{ "status": { "error_code": "", "status": "SUCCESS", "message": "", "response_code": "", "operation_id": "2ef3f76f-6a57-4d1f-bf60-162313d304bc" }, "data": [ { "type": "us_debit_visa_card", "name": "Visa", "category": "card", "image": "https://iconslib.rapyd.net/checkout/us_visa_card.png", "country": "US", "payment_flow_type": "card", "currencies": [ "USD" ], "status": 1, "is_cancelable": false, "payment_options": [], "is_expirable": false, "is_online": false, "minimum_expiration_seconds": null, "maximum_expiration_seconds": null } ] }
La sección data de esta respuesta muestra que us_debit_visa_card es un método de pago aceptable.
Nota: Una respuesta real suele incluir muchos métodos de pago.
Debe averiguar qué campos el cliente necesita llenar para el método de pago.
Para eso, utilizará Obtener campos obligatorios del método de pago con el siguiente parámetro:
Descripción de los parámetros de ruta
Parámetro de ruta | Descripción |
|---|---|
type | Introduzca us_debit_visa_card como el tipo de método de pago. |
Solicitud de obtener campos obligatorios del método de pago
Solicita el conjunto de campos obligatorios para un pago us_debit_visa_card.
Solicitud
/ Request URL: GET https://sandboxapi.rapyd.net/v1/payment_methods/us_debit_visa_card/required_fields // Message body absent
.NET Core
using System; namespace RapydApiRequestSample { class Program { static void Main(string[] args) { try { string type = "us_visa_card"; string result = RapydApiRequestSample.Utilities.MakeRequest("GET", $"/v1/payment_methods/{type}/required_fields"); Console.WriteLine(result); } catch (Exception e) { Console.WriteLine("Error completing request: " + e.Message); } } } }
JavaScript
const makeRequest = require('<path-to-your-utility-file>/utilities').makeRequest; async function main() { try { const result = await makeRequest('GET', '/v1/payment_methods/us_visa_card/required_fields'); console.log(result); } catch (error) { console.error('Error completing request', error); } }
PHP
<?php $path = $_SERVER['DOCUMENT_ROOT']; $path .= "/<path-to-your-utility-file>/utilities.php"; include($path); try { $object = make_request('get', '/v1/payment_methods/us_visa_card/required_fields'); var_dump($object); } catch (Exception $e) { echo "Error: $e"; } ?>
Python
from pprint import pprint from utilities import make_request payment_method = 'us_visa_card' results = make_request(method='get', path=f'/v1/payment_methods/{payment_method}/required_fields') pprint(results)
Respuesta de obtener campos obligatorios del método de pago
Veamos la respuesta.
Respuesta
{ "status": { "error_code": "", "status": "SUCCESS", "message": "", "response_code": "", "operation_id": "0cd7be44-fd91-4b27-941f-158f5e47fb7c" }, "data": { "type": "us_debit_visa_card", "fields": [ { "name": "number", "type": "string", "regex": "", "is_required": true, "instructions": "card number" }, { "name": "expiration_month", "type": "string", "regex": "", "is_required": true, "instructions": "expiration month as string, 01-12" }, { "name": "expiration_year", "type": "string", "regex": "", "is_required": true, "instructions": "expiration year in to digits as string, 18-99" }, { "name": "cvv", "type": "string", "regex": "", "is_required": true, "instructions": "card cvv" }, { "name": "name", "type": "string", "regex": "", "is_required": false, "instructions": "card holder name" }, { "name": "address", "type": "Address", "regex": "", "is_required": false, "instructions": "card billing address. see Address object for more details" } ], "payment_method_options": [ { "name": "3d_required", "type": "string", "regex": "", "description": "", "is_required": false, "is_updatable": false } ], "payment_options": [], "minimum_expiration_seconds": null, "maximum_expiration_seconds": null } }
La sección data de esta respuesta muestra que se requieren cinco campos para un pago us_debit_visa_card. Estos campos son number, expiration_month, expiration_year, cvv, y name.
John Doe realiza las siguientes compras en el sitio web de su plataforma:
Un altavoz de un vendedor por USD 50,00 (dólares estadounidenses).
Un teléfono de otro vendedor por 200 USD (dólares estadounidenses).
Solicita a Rapyd que procese el pago e incluya un depósito en garantía para retener los fondos durante cinco días.
Para eso, utilizará Crear pago con los siguientes parámetros:
Descripción de los parámetros del cuerpo
Parámetro del cuerpo | Descripción |
|---|---|
amount | Introduzca 250 como el monto total del pago. |
currency | Introduzca USD como el código para dólares estadounidenses. |
payment_method | Introduzca un objeto 'payment_method' que tenga los siguientes campos:
|
ewallets | Introduzca una matriz de «ewallets» que tenga dos objetos con los siguientes campos: Primer objeto:
Segundo objeto:
|
escrow | Introduzca verdadero para habilitar el depósito en garantía. |
escrow_release_days | Ingrese 5 como el número de días antes de que los fondos del depósito en garantía se liberen automáticamente. |
Crear solicitud de pago
Solicita a Rapyd que procese el pago y el pago del depósito en garantía.
Solicitud
// Request URL: POST https://sandboxapi.rapyd.net/v1/payments // Message body: { "amount": 250, "currency": "USD", "requested_currency": "USD", "payment_method": { "type": "us_debit_visa_card", "fields": { "number": "4111111111111111", "expiration_month": "10", "expiration_year": "20", "cvv": "123", "name": "Test User" } }, "ewallets": [ { "ewallet": "ewallet_090e1ef18c3aa754fd43cce9ee454858", "amount": 50 }, { "ewallet": "ewallet_11078019438f943986c1fcfbaba05e13", "amount": 200 } ], "escrow": true, "escrow_release_days": "5" }
Python
from pprint import pprint from utilities import make_request payment_body = { "amount": 250, "currency": "USD", "requested_currency": "USD", "payment_method": { "type": "us_visa_card", "fields": { "number": "4111111111111111", "expiration_month": "10", "expiration_year": "20", "cvv": "123", "name": "John Doe" } }, "ewallets": [ { "ewallet": "ewallet_090e1ef18c3aa754fd43cce9ee454858", "amount": 50 }, { "ewallet": "ewallet_11078019438f943986c1fcfbaba05e13", "amount": 200 } ], "escrow": True, "escrow_release_days": "5" } create_payment_response = make_request(method='post', path='/v1/payments', body=payment_body) pprint(create_payment_response)
Crear respuesta de pago
Veamos la respuesta.
Respuesta
{ "status": { "error_code": "", "status": "SUCCESS", "message": "", "response_code": "", "operation_id": "2eb07c96-f541-43fa-bd33-3599c7ebb033" }, "data": { "id": "payment_3b01b41950ec59d92c532974edc8f7dd", "amount": 250, "original_amount": 250, "is_partial": false, "currency_code": "USD", "country_code": "US", "status": "CLO", "description": "", "merchant_reference_id": "", "customer_token": "cus_30896ef7ee24397f340cc64a1f474697", "payment_method": "card_cf53c0452fb183a09d1fff2f16577b74", // ... "created_at": 1580986835, // ... "paid": true, "paid_at": 1580986836, // ... "ewallets": [ { "ewallet_id": "ewallet_090e1ef18c3aa754fd43cce9ee454858", "amount": 200, "percent": 0, "released_amount": 0, "refunded_amount": 0 }, { "ewallet_id": "ewallet_11078019438f943986c1fcfbaba05e13", "amount": 50, "percent": 80, "released_amount": 0, "refunded_amount": 0 } ], "payment_method_options": {}, "payment_method_type": "us_debit_visa_card", "payment_method_type_category": "card", // ... "escrow": { "id": "escrow_150c88345d2bca0a8be05e54a952cc80", "payment": "payment_3b01b41950ec59d92c532974edc8f7dd", "amount_on_hold": 250, "total_amount_released": 0, "status": "on_hold", "escrow_release_days": 5, "created_at": 1580986835, "updated_at": 1580986835, "last_payment_completion": 1580986836 }, "group_payment": "" } }
La sección data de esta respuesta muestra que:
El
amountes 250.El
currencyes USD.El objeto
ewalletindica:El monto de 50 se retienen en depósito de garantía para el
ewallet_idewallet_090e1ef18c3aa754fd43cce9ee454858 .El monto de 200 se retiene en depósito de garantía para el
ewallet_idewallet_11078019438f943986c1fcfbaba05e13 .
El objeto escrow indica:
El
ides escrow_150c88345d2bca0a8be05e54a952cc80 .El ID del pago es
payment_3b01b41950ec59d92c532974edc8f7dd.El
amount_on_holdes 250.El
statuses on_hold.El
escrow_release_dayses 5.
Cuando solicite a Rapyd que libere los fondos al vendedor del altavoz, utilizará el ewallet_id, el id del objeto escrow y el ID del payment.
Decide liberar inmediatamente los fondos de USD 50 (dólares estadounidenses) al vendedor del altavoz.
Para eso, utilizará Libere fondos del depósito en garantía con los siguientes parámetros:
Descripción de los parámetros de ruta
Parámetro de ruta | Descripción |
|---|---|
payment | Introduzca el ID del pago («id») que recibió cuando creó el pago en su sandbox. Para los fines de esta lección de caso de uso, estamos usando payment_3b01b41950ec59d92c532974edc8f7dd, que es el ID del pago que creamos en nuestro sandbox. |
escrow | Introduzca el ID del depósito en garantía («id») que recibió cuando creó el pago en su sandbox. Para los fines de esta lección de caso de uso, estamos usando escrow_150c88345d2bca0a8be05e54a952cc80, que es el ID del depósito en garantía que creamos en nuestro sandbox. |
Descripción de los parámetros del cuerpo
Parámetro del cuerpo | Descripción |
|---|---|
ewallets | Introduzca una matriz de «ewallets» con un objeto que tenga los siguientes campos:
|
Solicitud de liberar fondos de un depósito en garantía
Solicite a Rapyd que libere los fondos a un vendedor.
Solicitud
// Request URL: POST https://sandboxapi.rapyd.net/v1/payments/payment_3b01b41950ec59d92c532974edc8f7dd/escrows/escrow_150c88345d2bca0a8be05e54a952cc80/escrow_releases // Message body: { "ewallets": [ { "ewallet": "ewallet_090e1ef18c3aa754fd43cce9ee454858", "amount": 50 } ] }
.NET Core
using System; using System.Text.Json; namespace RapydApiRequestSample { class Program { static void Main(string[] args) { try { string payment = "payment_3b01b41950ec59d92c532974edc8f7dd"; string escrow = "escrow_150c88345d2bca0a8be05e54a952cc80"; var requestObj = new { ewallets = new Object[] { new { ewallet = "ewallet_090e1ef18c3aa754fd43cce9ee454858", amount = 50 }, } }; string request = JsonSerializer.Serialize(requestObj); string result = RapydApiRequestSample.Utilities.MakeRequest("POST", $"/v1/payments/{payment}/escrows/{escrow}/escrow_releases", request); Console.WriteLine(result); } catch (Exception e) { Console.WriteLine("Error completing request: " + e.Message); } } } }
PHP
<?php $path = $_SERVER['DOCUMENT_ROOT']; $path .= "/<path-to-your-utility-file>/utilities.php"; include($path); $body = [ array( "ewallet" => "ewallet_090e1ef18c3aa754fd43cce9ee454858", "amount" => 50 ) ]; try { $object = make_request('post', '/v1/payments/payment_3b01b41950ec59d92c532974edc8f7dd/escrows/escrow_150c88345d2bca0a8be05e54a952cc80/escrow_releases', $body); var_dump($object); } catch (Exception $e) { echo "Error: $e"; } ?>
Python
from pprint import pprint from utilities import make_request release_funds_body = { "ewallets": [ { "ewallet": "ewallet_090e1ef18c3aa754fd43cce9ee454858", "amount": 50 } ] } release_funds_response = make_request(method='post', path='/v1/payments/payment_3b01b41950ec59d92c532974edc8f7dd/escrows/escrow_150c88345d2bca0a8be05e54a952cc80/escrow_releases', body=release_funds_body) pprint(release_funds_response)
Respuesta de liberar fondos de un depósito en garantía
Veamos la respuesta.
Respuesta
{ "status": { "error_code": "", "status": "SUCCESS", "message": "", "response_code": "", "operation_id": "8338da6d-997c-41fb-97ef-def18c133224" }, "data": { "id": "escrow_150c88345d2bca0a8be05e54a952cc80", "payment": "payment_3b01b41950ec59d92c532974edc8f7dd", "amount_on_hold": 250, "total_amount_released": 50, "status": "released", "escrow_release_days": 5, "escrow_releases": { "data": [ { "id": "er_ac023aae3b13b0e74ad64c876b1034dd", "amount": 50, "trigger": "event", "proportional_release": false, "ewallets": [ { "ewallet": "ewallet_090e1ef18c3aa754fd43cce9ee454858", "amount": 250 } ], "created_at": 1580987535 } ], "has_more": false, "total_count": 1, "url": "/v1/payments/payment_3b01b41950ec59d92c532974edc8f7dd/escrows/escrow_150c88345d2bca0a8be05e54a952cc80/escrow_releases" }, "created_at": 1580986835, "updated_at": 1580987535, "last_payment_completion": 1580986836 } }
La sección datos de esta respuesta muestra que:
El
amount_on_holdes 250.El objeto
escrow_releasesindica:Una cantidad de USD 50 fue liberado para el
ewallet_idewallet_090e1ef18c3aa754fd43cce9ee454858
El
escrow_release_dayses 5.
Después de cinco días, USD 50 se libera automáticamente a ewallet_11078019438f943986c1fcfbaba05e13. Para obtener una lista de todas las liberaciones de fondos de este depósito en garantía, ver Listar liberaciones de depósito en garantía.