Simular el pago de una orden de venta
AceptaBits proporciona a los desarrolladores la posibilidad de simular el pago de órdenes de venta, esta función es de mucha utilidad para brindarle al desarrollador un panorama completo acerca de los estados de una orden de venta, esto se realiza mediante el consumo del método simulate-payment-order, cuya información completa se podrá encontrar dentro de su respectiva documentación ingresando en el siguiente enlace: simulate-payment-order.
Puntos generales
Para brindar un panorama completo acerca de cómo se utiliza esta función tan útil, se detallará en los siguientes puntos, primero que nada, hay que mencionar que esta función está disponible únicamente en el ambiente SANDBOX DE PRUEBAS, por lo que no será posible utilizarlo dentro del ambiente PRODUCCION.
Al igual que cualquier otro de los métodos API disponibles para consumir, será necesario contar con el Token API para el ambiente SANDBOX DE PRUEBAS, también será necesario utilizar su respectivo método de petición HTTP, consumir el servicio a su respectivo endpoint y enviar los parámetros solicitados.
Esta funcionalidad permite simular el pago de dos diferentes maneras:
- Simular el pago proveniente de un usuario de MercadoBits
- Simular el pago proveniente desde una wallet, exchange o plataforma externa
La finalidad final de esta simulación es de brindarle a los desarrolladores una manera sencilla de revisar y analizar a fondo cómo se comporta una orden cuando ha recibido un pago parcial, un pago completo, si tiene que esperar o no confirmaciones de red, como identificar cuando una orden ya se pagó, entre otros.
Esta herramienta solo funciona con órdenes que ya han sido abiertas al cliente, es decir, después de ser abiertas con el método show-order-customer, esto es debido a que las órdenes que no ha sido ejecutadas con este método no tendrán generada su respectiva dirección de depósito, y por lo tanto no podrán ser utilizadas para simular su respectivo pago
Simular el pago proveniente de un usuario de MercadoBits
Los pagos provenientes de usuarios de MercadoBits se procesan de manera inmediata una vez que la orden de venta los ha recibido, es decir, no hay que esperar las confirmaciones de red del blockchain que ocurrirían si el pago proviene desde una wallet o plataforma externa a MercadoBits.
Los usuarios de MercadoBits tiene la posibilidad de pagar una orden de venta de AceptaBits desde la plataforma web o desde la aplicación para móviles Android y IOS.
Los usuarios de MercadoBits no pagan ningún tipo de comisión por el pago de órdenes, lo que se solicite en la orden de venta es lo que el usuario deberá de pagar ya sea que pague de manera completa o de forma parcial, la única comisión que AceptaBits obtiene es la comisión mostrada en la orden de venta, recordemos que esta comisión es retirada del vendedor y no del comprador, el comprador únicamente envía los fondos que la orden le solicita y es el vendedor quien recibe ya en su wallet final el monto de la orden menos la comisión cobrada.
Simular el pago proveniente desde una wallet, exchange o plataforma externa
Los pagos provenientes desde una wallet, exchange, plataforma o cualquier otro lugar que no sea MercadoBits, deberán de someterse a esperar las respectivas confirmaciones que AceptaBits solicita en cada una de las criptomonedas soportadas en la plataforma, es decir, si se recibe un pago a una orden, y se pagó por ejemplo, desde una wallet nativa que alguna persona tenga en su computadora, se deberá de esperar forzosamente a que la transacción tenga detrás de si el número de confirmaciones o bloques ya procesados en el blockchain para poder acreditarse, en AceptaBits se solicita X número de confirmaciones dependiendo de la criptomoneda con la que se pagara la orden, a ese número de confirmaciones siempre hay que hacer un +1 (sumarle la confirmación o bloque en que la transacción entre al blockchain).
Por ejemplo, si para Bitcoin (BTC) se requieren 6 confirmaciones, significa que cuando se reciba el pago se mostrara el contador de confirmaciones de la orden en 7 (las 6 confirmaciones que requiere AceptaBits + el bloque en el que la transacción se ingrese al blockchain), si se requieren 8 entonces el contador inicial de confirmaciones de la orden se mostrara en 9, y así sucesivamente dependiendo del número de confirmaciones que la plataforma solicite en ese momento.
Cada bloque que se va procesando en el blockchain indica que el contador de confirmaciones de la orden ira disminuyendo hasta que el monto ya sea acreditado completamente en la orden.
Las personas que pagan de esta manera deben de tener en cuenta que al momento de realizar el retiro de su respectiva wallet es casi seguro que la plataforma donde operen les cobrara alguna comisión, si lo hacen de una wallet nativa de escritorio por ejemplo, deberán de pagar la comisión de red que le solicite el blockchain.
Estados de una orden de venta
Es importante conocer y saber interpretar la combinación de ciertos campos para entender en qué estado se encuentra una orden, por ejemplo, para saber si una orden ya se pagó, si está en espera de confirmaciones de red, si ya expiro, etc., a continuación mostramos estos estados y su respectiva combinación e interpretación de sus respectivos campos:
ESTADO 1: orden recién creada en espera de ser abierta para el cliente: Este estado nos indica que se acaba de crear una orden nueva y está en espera de que sea abierta para el cliente utilizando el método: show-order-customer.
address
= nullisPaid
= 0isExpired
= 0isConfirming
= 0isWaiting
= 0confirmations_counter
= 0amount_filled
= 0amount_unconfirmed
= 0amount_remaining
= tiene el valor del campo total, ejemplo: 100, 0.00056, etcexpiration_date
= nullexpiration_date_format
= nullremaining_seconds
= null
ESTADO 2: orden recién abierta para el cliente: Este estado nos indica que la orden ya fue abierta para el cliente utilizando el método: show-order-customer, en este estado se genera la dirección de depósito y comienza a correr el tiempo hasta su expiración.
address
= tiene generada la dirección de depósito, ejemplo: pbtcrt1qjr2fte8wgt0zet9tz9xcgwvjagvchrdea6a4eyisPaid
= 0isExpired
= 0isConfirming
= 0isWaiting
= 0confirmations_counter
= 0amount_filled
= 0amount_unconfirmed
= 0amount_remaining
= tiene el valor del campo total, ejemplo: 100, 0.00056, etcexpiration_date
= tiene el valor de fecha y hora para su expiración, ejemplo: 2024-08-13 13:07:06, se representa en zona horaria America/Mexico_Cityexpiration_date_format
= tiene el valor de fecha y hora para su expiración, ejemplo: 2024-08-13T18:07:06.000000Z, se representa en zona horaria UTCremaining_seconds
= muestra el tiempo en segundos hasta su fecha y hora de expiración, ejemplo: 185
ESTADO 3: orden con un pago recibido esperando las confirmaciones de red (deposito externo que no proviene de un usuario de MercadoBits): Este estado nos indica que la orden ha recibido un depósito y se encuentra en espera de las confirmaciones de red para acreditar los fondos, en este estado la orden ya no va a expirar y se deberá de ignorar completamente los campos: expiration_date, expiration_date_format y remaining_seconds.
address
= tiene generada la dirección de depósito, ejemplo: pbtcrt1qjr2fte8wgt0zet9tz9xcgwvjagvchrdea6a4eyisPaid
= 0isExpired
= 0isConfirming
= -1isWaiting
= -1confirmations_counter
= muestra las confirmaciones pendientes de red para los depositos que requieren confirmaciones, ejemplo: 5amount_filled
= muestra el monto que ya se ha confirmado, ejemplo: 100, 0.00056, etc. (este campo va mostrando la sumatoria de todos los depósitos recibidos confirmados, es decir va mostrando el total de depósitos que ha recibido la orden)amount_unconfirmed
= tiene el valor del depósito recibido que está en espera de las confirmaciones de red, ejemplo: 70.52369854amount_remaining
= tiene el valor del monto restante para completar el pago, ejemplo: 100, 0.00056, etc.
ESTADO 4: pago parcial recibido que ya a cumplido con las confirmaciones de red (deposito externo que no proviene de un usuario de MercadoBits) Este estado nos indica que la orden ha recibido un depósito parcial y ya se ha completado las confirmaciones de red, en este estado la orden ya no va a expirar y se deberá de ignorar completamente los campos: expiration_date, expiration_date_format y remaining_seconds, así mismo la orden queda en espera de ser pagada completamente.
address
= tiene generada la dirección de depósito, ejemplo: pbtcrt1qjr2fte8wgt0zet9tz9xcgwvjagvchrdea6a4eyisPaid
= 0isExpired
= 0isConfirming
= 0isWaiting
= -1confirmations_counter
= 0 (si aun hay depósitos pendientes por confirmación mostrara las confirmaciones pendientes que aún restan por completarse)amount_filled
= muestra el monto que ya se ha confirmado, ejemplo: 100, 0.00056, etc. (este campo va mostrando la sumatoria de todos los depósitos recibidos confirmados, es decir va mostrando el total de depósitos que ha recibido la orden)amount_unconfirmed
= 0 (si aun hay depósitos pendientes por confirmacion mostrara el monto pendientes que aún falta por confirmarse)amount_remaining
= tiene el valor del campo total menos los depósitos ya confirmados, ejemplos: 100, 0.00056, 0, etc. (si ya se pagó en su totalidad este campo mostrara el valor 0)
ESTADO 5: pago completo recibido que ya a cumplido con las confirmaciones de red (deposito externo que no proviene de un usuario de MercadoBits) Este estado nos indica que la orden ha recibido un depósito que liquida en su totalidad la orden y ya se ha completado las confirmaciones de red, en este estado la orden ya no va a expirar y se deberá de ignorar completamente los campos: expiration_date, expiration_date_format y remaining_seconds, así mismo la orden se muestra como pagada completamente.
address
= tiene generada la dirección de depósito, ejemplo: pbtcrt1qjr2fte8wgt0zet9tz9xcgwvjagvchrdea6a4eyisPaid
= -1isExpired
= 0isConfirming
= 0isWaiting
= 0confirmations_counter
= 0amount_filled
= muestra el monto que ya se ha confirmado, en este caso el total de la orden, ejemplo: 100, 0.00056, etc. (si la orden tuvo algún excedente se mostrara aquí)amount_unconfirmed
= 0amount_remaining
= 0
ESTADO 6: pago parcial recibido que no necesita confirmaciones de red (deposito que proviene de un usuario de MercadoBits) Este estado nos muestra un pago parcial recibido proveniente de un usuario de MercadoBits, estos pagos se procesan al instante y no requieren de confirmaciones de red para acreditar los fondos, en este estado la orden ya no va a expirar y se deberá de ignorar completamente los campos: expiration_date, expiration_date_format y remaining_seconds, así mismo la orden queda en espera de ser pagada completamente.
address
= tiene generada la dirección de depósito, ejemplo: pbtcrt1qjr2fte8wgt0zet9tz9xcgwvjagvchrdea6a4eyisPaid
= 0isExpired
= 0isConfirming
= 0isWaiting
= -1confirmations_counter
= 0amount_filled
= muestra el monto que ya se ha confirmado, ejemplo: 100, 0.00056, etc (este campo va mostrando la sumatoria de todos los depósitos recibidos confirmados (en este caso de los depósitos provenientes de usuarios de MercadoBits entran directamente como depósitos confirmados), es decir va mostrando el total de depósitos que ha recibido la orden)amount_unconfirmed
= 0amount_remaining
= tiene el valor del campo total menos los depósitos ya confirmados, en este caso todos los depósitos que entran ya están confirmados y no necesitan confirmaciones de red, ejemplos: 100, 0.00056, 0, etc. (si ya se pagó en su totalidad este campo mostrara el valor 0)
ESTADO 7: pago completo recibido que no necesita confirmaciones de red (deposito que proviene de un usuario de MercadoBits) Este estado nos indica que la orden ha recibido un depósito que liquida en su totalidad la orden y que no necesita confirmaciones de red, en este estado la orden ya no va a expirar y se deberá de ignorar completamente los campos: expiration_date, expiration_date_format y remaining_seconds, así mismo la orden se muestra como pagada completamente.
address
= tiene generada la dirección de depósito, ejemplo: pbtcrt1qjr2fte8wgt0zet9tz9xcgwvjagvchrdea6a4eyisPaid
= -1isExpired
= 0isConfirming
= 0isWaiting
= 0confirmations_counter
= 0amount_filled
= muestra el monto que ya se ha confirmado, en este caso el total de la orden, ejemplo: 100, 0.00056, etc (si la orden tuvo algún excedente se mostrara aquí)amount_unconfirmed
= 0amount_remaining
= 0
ESTADO 8: la orden ha expirado Este estado nos muestra una orden que ha expirado, es importante que no se muestren al cliente órdenes ya expiradas, de ser necesario se deberá de generar una orden nueva para que el cliente la pague, en este estado ya no se debe de hacer nada y solamente se deberá de archivar como una orden expirada
address
= tiene generada la dirección de depósito, ejemplo: pbtcrt1qjr2fte8wgt0zet9tz9xcgwvjagvchrdea6a4eyisPaid
= 0isExpired
= -1isConfirming
= 0isWaiting
= 0confirmations_counter
= 0amount_filled
= 0amount_unconfirmed
= 0amount_remaining
= tiene el valor del campo total, ejemplo: 100, 0.00056, etcexpiration_date
= tiene el valor de fecha y hora para su expiración, ejemplo: 2024-08-13 13:07:06, se representa en zona horaria America/Mexico_Cityexpiration_date_format
= tiene el valor de fecha y hora para su expiración, ejemplo: 2024-08-13T18:07:06.000000Z, se representa en zona horaria UTCremaining_seconds
= 0
Los estados de una orden de venta se encuentran detallados dentro de la documentación de los siguientes métodos: show-order-customer, show-order, get-orders y add-order
Ejemplo de simulación de pago de una orden de venta
Para usos prácticos desarrollemos un pequeño ejemplo pagando una orden de venta, lo primero que deberemos de hacer es crear una nueva orden, para ellos utilizaremos la documentación del método add-order.
Generaremos una nueva orden de venta usando el servicio de Venta general, también utilizaremos al Cliente general que como sabemos esta ligado a Tienda general y cobraremos el equivalente a $500.00 MXN en Bitcoin (BTC), por lo tanto, obtenemos la siguiente orden después de haber consumido el servicio para crear órdenes nuevas.
{
"status": true,
"success": {
"code": "0056"
},
"data": {
"code": "pgbord142222182849692719",
"address": null,
"slug": "f224db71b2c522f4d67aba6aecae86b018ff014db7SwekHbILNAvbR8LmvL",
"amount_filled": "0.00000000",
"amount_remaining": "0.00042945",
"amount_unconfirmed": "0.00000000",
"code_customer": "pgbcus70363241174424994",
"name_customer": "Cliente General",
"code_agent": null,
"name_agent": null,
"code_shop": "pgbsho57498793732671786",
"name_shop": "Tienda general",
"code_currency": "BTC",
"currency_full_name": "Bitcoin (BTC)",
"name_currency": "Bitcoin",
"confirmations_counter": "0",
"remaining_seconds": null,
"created_at": "2024-08-22T21:12:34.000000Z",
"created_at_format": "2024-08-22 15:12:34",
"expiration_date": null,
"expiration_date_format": null,
"isConfirming": "0",
"isExpired": "0",
"isPaid": "0",
"isWaiting": "0",
"total": "0.00042945",
"subtotal": "0.00042515",
"commission": "0.00000430",
"commission_percent": "1.00000000",
"total_mxn": "500.00000000",
"subtotal_mxn": "495.00000000",
"commission_mxn": "5.00000000",
"cart": [
{
"quantity": "1.00000000",
"total_mxn": "0.00000000",
"name_product": null,
"code_product": null,
"name_service": "Venta general",
"code_service": "pgbser75239828527388637"
}
],
"concept": null
}
}
Ahora que tenemos creada la orden debemos de abrirla al cliente para que se genere su dirección de depósito y comience a correr el tiempo de expiración, claro está que para este ejemplo, no dejaremos que la orden expire.
Recordemos también que abrirla al cliente significa que ya está la orden lista para que el cliente pueda pagar, es importante recordar que las órdenes recién creadas pueden quedar en espera por tiempo indefinido sin sufrir ningún tipo de cambio (tampoco es recomendable mantener órdenes en espera por mucho tiempo ya que el precio del mercado de las criptomonedas cambia constantemente).
Regresando al ejemplo, deberemos de abrir la orden al cliente, para ellos utilizaremos la documentación del método show-order-customer, una vez ejecutado obtenemos la siguiente información
{
"status": true,
"success": {
"code": "0107"
},
"data": {
"code": "pgbord142222182849692719",
"address": "bcrt1qplr2lh4q96fyes9tzuj9wsp459stmfu50af5ar",
"slug": "f224db71b2c522f4d67aba6aecae86b018ff014db7SwekHbILNAvbR8LmvL",
"amount_filled": "0.00000000",
"amount_remaining": "0.00042945",
"amount_unconfirmed": "0.00000000",
"code_customer": "pgbcus70363241174424994",
"name_customer": "Cliente General",
"code_agent": null,
"name_agent": null,
"code_shop": "pgbsho57498793732671786",
"name_shop": "Tienda general",
"code_currency": "BTC",
"currency_full_name": "Bitcoin (BTC)",
"name_currency": "Bitcoin",
"confirmations_counter": "0",
"remaining_seconds": 1799,
"created_at": "2024-08-22T21:12:34.000000Z",
"created_at_format": "2024-08-22 15:12:34",
"expiration_date": "2024-08-22T21:55:20.321562Z",
"expiration_date_format": "2024-08-22T21:55:20.000000Z",
"isConfirming": "0",
"isExpired": "0",
"isPaid": "0",
"isWaiting": "0",
"total": "0.00042945",
"subtotal": "0.00042515",
"commission": "0.00000430",
"commission_percent": "1.00000000",
"total_mxn": "500.00000000",
"subtotal_mxn": "495.00000000",
"commission_mxn": "5.00000000",
"cart": [
{
"quantity": "1.00000000",
"total_mxn": "0.00000000",
"name_product": null,
"code_product": null,
"name_service": "Venta general",
"code_service": "pgbser75239828527388637"
}
],
"concept": null
}
}
Como podemos observar la información es muy similar a la información que obtenemos al recién crear la orden, con la diferencia de que ahora ya tenemos generada la dirección de depósito y el tiempo de expiración ha comenzado a correr, si volvemos a consumir el método de show-order-customer, obtendremos la misma información, con la diferencia de que el contador hasta su expiración sigue corriendo, esto lo podemos ver claramente en el campo remaining_seconds
que va disminuyendo.
Regresando al ejemplo ahora si haremos uso del método simulate-payment-order, para esta orden haremos dos pagos, uno simulando que proviene de un usuario de MercadoBits y otro simulando que proviene de una wallet externa, para ellos dividiremos la cuenta en dos:
- Para el pago proveniente de un usuario de MercadoBits pagaremos 0.00022945 BTC de los 0.00042945 BTC que solicita la orden
- Para el pago proveniente de una wallet externa pagaremos el restante que serían 0.0002 BTC
Entonces siguiendo la documentación de simulate-payment-order, enviaremos como parámetros lo siguiente para hacer la primera simulación:
- En el parámetro
code
enviaremos el código de la orden que es: pgbord142222182849692719 - En el parámetro
amount
enviaremos la cantidad de: 0.00022945 - En el parámetro
type
enviaremos el valor: 1 (este valor indica que simularemos el pago proveniente de un usuario de MercadoBits)
Al consumir el servicio obtenemos la siguiente información
{
"status": true,
"success": {
"code": "0108"
}
}
Esta respuesta nos indica que el pago se simulo de manera correcta, si consumimos alguno de los servicios de consulta como show-order o de nuevamente show-order-customer, obtenemos lo siguiente
{
"status": true,
"success": {
"code": "0107"
},
"data": {
"code": "pgbord142222182849692719",
"address": "bcrt1qplr2lh4q96fyes9tzuj9wsp459stmfu50af5ar",
"slug": "f224db71b2c522f4d67aba6aecae86b018ff014db7SwekHbILNAvbR8LmvL",
"amount_filled": "0.00022945",
"amount_remaining": "0.00020000",
"amount_unconfirmed": "0.00000000",
"code_customer": "pgbcus70363241174424994",
"name_customer": "Cliente General",
"code_agent": null,
"name_agent": null,
"code_shop": "pgbsho57498793732671786",
"name_shop": "Tienda general",
"code_currency": "BTC",
"currency_full_name": "Bitcoin (BTC)",
"name_currency": "Bitcoin",
"confirmations_counter": "0",
"remaining_seconds": 1042,
"created_at": "2024-08-22T21:12:34.000000Z",
"created_at_format": "2024-08-22 15:12:34",
"expiration_date": "2024-08-22 15:55:20",
"expiration_date_format": "2024-08-22T21:55:20.000000Z",
"isConfirming": "0",
"isExpired": "0",
"isPaid": "0",
"isWaiting": "-1",
"total": "0.00042945",
"subtotal": "0.00042515",
"commission": "0.00000430",
"commission_percent": "1.00000000",
"total_mxn": "500.00000000",
"subtotal_mxn": "495.00000000",
"commission_mxn": "5.00000000",
"cart": [
{
"quantity": "1.00000000",
"total_mxn": "0.00000000",
"name_product": null,
"code_product": null,
"name_service": "Venta general",
"code_service": "pgbser75239828527388637"
}
],
"concept": null
}
}
Como podemos observar el pago se procesó de manera instantánea, y esto se ve claramente, en el campo amount_filled
que ya refleja la cantidad que se pagó, también podemos ver el campo amount_remaining
que nos indica que ya solo resta pagar 0.0002 BTC (los cuales pagaremos por medio de una wallet externa como mencionamos anteriormente al comenzar con este ejemplo), también podemos observar el campo isWaiting
que se encuentra con valor -1, este nos dice que la orden está esperando a que se liquide en su total el monto de la orden.
Muy importante recordar que cuando una orden de venta recibe por lo menos un pago, como en este ejemplo, dicha orden ya no va a expirar, por lo que se tienen que ignorar completamente los campos expiration_date
, expiration_date_format
y remaining_seconds
, estos campos seguirán su conteo de manera natural pero al haber recibido ya un pago, el campo isExpired
jamás se mostrara con valor -1 (que indica que la orden ya expiro) y permanecerá siempre con valor 0.
Ahora bien, continuando con el ejemplo volveremos a consumir el servicio de simulate-payment-order para pagar el resto de la orden, pero ahora lo haremos simulando que el pago se realizó desde una wallet externa, por lo que enviaremos los parámetros de la siguiente manera:
- En el parámetro
code
enviaremos el código de la orden que es: pgbord142222182849692719 - En el parámetro
amount
enviaremos la cantidad de: 0.0002 (que es resto que nos indica la orden que hace falta por pagar) - En el parámetro
type
enviaremos el valor: 2 (este valor indica que simularemos el pago proveniente de una walle externa, ya sea otra plataforma, exchange o wallet nativa en alguna computadora)
Al consumir el servicio obtenemos la siguiente respuesta
{
"status": true,
"success": {
"code": "0108"
}
}
Esta respuesta nos indica que el pago se simulo de manera correcta, si consumimos alguno de los servicios de consulta como show-order o de nuevamente show-order-customer, obtenemos lo siguiente
{
"status": true,
"success": {
"code": "0107"
},
"data": {
"code": "pgbord142222182849692719",
"address": "bcrt1qplr2lh4q96fyes9tzuj9wsp459stmfu50af5ar",
"slug": "f224db71b2c522f4d67aba6aecae86b018ff014db7SwekHbILNAvbR8LmvL",
"amount_filled": "0.00022945",
"amount_remaining": "0.00020000",
"amount_unconfirmed": "0.00020000",
"code_customer": "pgbcus70363241174424994",
"name_customer": "Cliente General",
"code_agent": null,
"name_agent": null,
"code_shop": "pgbsho57498793732671786",
"name_shop": "Tienda general",
"code_currency": "BTC",
"currency_full_name": "Bitcoin (BTC)",
"name_currency": "Bitcoin",
"confirmations_counter": "7",
"remaining_seconds": 0,
"created_at": "2024-08-22T21:12:34.000000Z",
"created_at_format": "2024-08-22 15:12:34",
"expiration_date": "2024-08-22 15:55:20",
"expiration_date_format": "2024-08-22T21:55:20.000000Z",
"isConfirming": "-1",
"isExpired": "0",
"isPaid": "0",
"isWaiting": "-1",
"total": "0.00042945",
"subtotal": "0.00042515",
"commission": "0.00000430",
"commission_percent": "1.00000000",
"total_mxn": "500.00000000",
"subtotal_mxn": "495.00000000",
"commission_mxn": "5.00000000",
"cart": [
{
"quantity": "1.00000000",
"total_mxn": "0.00000000",
"name_product": null,
"code_product": null,
"name_service": "Venta general",
"code_service": "pgbser75239828527388637"
}
],
"concept": null
}
}
Como podemos observar tenemos que el campo amount_filled
se mantiene igual, esto es debido a que el pago aun no ha cumplido las confirmaciones de red del blockchain, hablando de confirmaciones de red podemos observar que el campo confirmations_counter
tiene el valor 7, esto nos indica que el pago esperara las 6 confirmaciones de red del blockchain + 1 confirmación adicional que en realidad es el bloque en que entre la transacción al blockchain, recordemos que en AceptaBits las confirmaciones comienzan a correr cuando la transacción ya ingrese a su respectivo bloque, también podemos observar que el campo amount_remaining
se mantiene igual, esto es debido a que el pago aun no ha cumplido las confirmaciones de red del blockchain (igual que el campo amount_filled
que se mencionó anteriormente), otro cambio que podemos observar es el campo amount_unconfirmed
, este campo nos indica la cantidad que está en espera de acreditarse, la cual en este ejemplo fue de 0.0002 BTC, para finalizar podemos observar el campo isConfirming
que tiene el valor -1 (indica que la orden se encuentra confirmando x cantidad recibida y está en espera de completarse las confirmaciones del blockchain).
La simulación de bloques en el ambiente SANDBOX DE PRUEBAS es muy similar al del mundo real, por ejemplo, para Bitcoin (BTC) cada bloque demorara alrededor de 10 minutos, por lo que el desarrollador deberá de esperar hasta que el pago simulado se acredite, se puede consumir alguno de los servicios de consulta de órdenes para ir viendo como el contador de bloques confirmations_counter
de la orden va disminuyendo
Ahora bien, pasadas las confirmaciones de red y si volvemos a consumir uno de los servicios de consulta obtenemos la siguiente información
{
"status": true,
"success": {
"code": "0107"
},
"data": {
"code": "pgbord142222182849692719",
"address": "bcrt1qplr2lh4q96fyes9tzuj9wsp459stmfu50af5ar",
"slug": "f224db71b2c522f4d67aba6aecae86b018ff014db7SwekHbILNAvbR8LmvL",
"amount_filled": "0.00042945",
"amount_remaining": "0.00000000",
"amount_unconfirmed": "0.00000000",
"code_customer": "pgbcus70363241174424994",
"name_customer": "Cliente General",
"code_agent": null,
"name_agent": null,
"code_shop": "pgbsho57498793732671786",
"name_shop": "Tienda general",
"code_currency": "BTC",
"currency_full_name": "Bitcoin (BTC)",
"name_currency": "Bitcoin",
"confirmations_counter": "0",
"remaining_seconds": 0,
"created_at": "2024-08-22T21:12:34.000000Z",
"created_at_format": "2024-08-22 15:12:34",
"expiration_date": "2024-08-22 15:55:20",
"expiration_date_format": "2024-08-22T21:55:20.000000Z",
"isConfirming": "0",
"isExpired": "0",
"isPaid": "-1",
"isWaiting": "0",
"total": "0.00042945",
"subtotal": "0.00042515",
"commission": "0.00000430",
"commission_percent": "1.00000000",
"total_mxn": "500.00000000",
"subtotal_mxn": "495.00000000",
"commission_mxn": "5.00000000",
"cart": [
{
"quantity": "1.00000000",
"total_mxn": "0.00000000",
"name_product": null,
"code_product": null,
"name_service": "Venta general",
"code_service": "pgbser75239828527388637"
}
],
"concept": null
}
}
Como podemos observar el campo amount_filled
ya se encuentra igual que el campo total
, esto nos dice que ya se pagó el total que solicitaba la orden, también podemos observar el campo amount_remaining
que se encuentra en 0, esto nos dice que ya no hay ninguna cantidad restante para ser pagada, también observamos el campo amount_unconfirmed
que se encuentra en también en 0, esto nos dice que la cantidad que estaba en espera de confirmaciones ya se acredito (recordemos que en el ejemplo era de 0.0002 BTC), hablando de confirmaciones podemos observar que el campo confirmations_counter
ya se encuentra en 0, esto significa que ya transcurrieron las confirmaciones de red y por ende se acreditaron los fondos, lo cual también podemos observar en el campo isConfirming
que ya se encuentra en 0 (significa que la orden ya no tiene ninguna cantidad que se encuentre en espera de ser confirmada por parte de la red del blockchain).
Para finalizar podemos observar que el campo isExpired
se encuentra aún en 0, recordemos que una orden que ha recibido al menos un pago ya no expirara, también podemos observar el campo isWaiting
que también se encuentra en 0, esto nos indica que la orden ya no está esperando a que se liquide en su totalidad, recordemos que con el pago simulado que hicimos liquidamos lo que faltaba de pagar de la orden, por ultimo podemos observar el campo isPaid
que se encuentra con el valor -1 (este valor no dice que la orden ha sido pagada completamente).
Como se observa es bastante sencillo simular el pago de órdenes, a su vez podemos decir es una herramienta muy útil para que los desarrolladores realicen sus propias pruebas de pagos, puedan analizar de una mejor manera el comportamiento de una orden y por dende realicen una mejor implementación de los servicios de AceptaBits.
Como nota adicional, cuando una orden de venta ya se ha pagado completamente como lo vimos en el ejemplo que se desarrolló, se necesitaran de un par de minutos aproximadamente para que el pago de la orden (menos la respectiva comisión) se vea reflejado en la wallet del usuario dueño de la cuenta, recordemos que las wallets se encuentran dentro de MercadoBits pudiendo consultarlas desde la plataforma web o desde la app para dispositivos móviles, esto claro está, en el ambiente de PRODUCCION cuando órdenes de venta reales son pagadas
Recordemos tambien que simulate-payment-order es únicamente una herramienta para simular pagos de órdenes de venta en el ambiente SANDBOX DE PRUEBAS y no está disponible para su consumo en el ambiente PRODUCCION.
Si tienes alguna duda recuerda que siempre puedes contactar con el equipo de soporte para desarrolladores ingresando en el siguiente enlace: Soporte para desarrolladores.