Saltar al contenido principal

PHP - crear orden de venta

Como apoyo a los desarrolladores realizaremos un ejemplo de petición por medio de PHP utilizando Guzzle y el método de petición POST, para crear una nueva orden de venta, la finalidad de este ejercicio es mostrarle al desarrollador una manera sencilla de realizarlos y que puedan implementarlo en sus proyectos, para uso practico utilizaremos el ambiente SANDBOX DE PRUEBAS para los ejemplos


Ejemplo de como crear una orden de venta

Para este ejemplo nos apoyaremos de la documentación del método add-order para crear una nueva orden de venta, recordemos que el Token API debe de esta generado y vigente para poder ingresarlo en el header de autorización bearer.

Utilizaremos el siguiente endpoint:

https://sandbox.aceptabits.com/api/thirdparty/v1/add-product

Y el siguiente fragmento de código para realizar la petición:

<?php

$token = "tu-token-api-va-aqui";

$params = [
'code_customer' => 'pgbcus56777697528357625',
'code_currency' => 'BTC',
'type_order' => 1,
'type_total' => 1,
'total' => 16000.5,
'services' => [
json_encode(["code" => "pgbser56683545785157568", "qty" => 1])
],
'products' => [
json_encode(["code" => "pgbpro6788273824117159", "qty" => 2]),
json_encode(["code" => "pgbpro9777846867311479", "qty" => 1])
],
'concept' => 'Pedido No. 457'
];

$guzzle = new GuzzleHttp;
$response = $guzzle->post("https://sandbox.aceptabits.com/api/thirdparty/v1/add-order", [
'headers' => [ 'Authorization' => 'Bearer ' . $token ],
'form_params' => $params
]);

$res = $response->getBody()->getContents();
$res = json_decode($res, true);

?>
  • Para esta orden estamos utilizando al cliente Mario Chávez Álvarez que tiene el código de cliente pgbcus56777697528357625, se usa el parámetro code_customer.
  • Después vemos que se utilizara la moneda Bitcoin (BTC) para que el cliente pague la orden, se usa el parámetro code_currency.
  • Después tenemos el tipo de orden, el cual enviamos con valor 1, este valor nos dice que deberemos de ingresar el total de la orden ya sea en moneda FIAT (Peso mexicano) o en la CRIPTOMONEDA con la que se pagara la orden (en este caso sería Bitcoin), se usa el parámetro type_order.
  • Ahora tenemos el tipo de total de la orden, el cual enviamos con valor 1, este valor nos dice que debemos de ingresar el total de la orden en moneda FIAT (Peso mexicano), es decir 16000.5 MXN, si se enviara el valor 2 se tendría que ingresar el total en la CRIPTOMONEDA con la que se pagara la orden, por ejemplo 0.01400000 (al tener un precio alto el BTC la conversión de los 16000.5 MXN nos da esa cantidad, pero claro está que varía entre cada criptomoneda, es por eso que la opción type_total con valor 1 es muy cómoda ya que se ingresa el total en FIAT y al momento de crear la orden nos muestra el total ya en la criptomoneda con la que se va a pagar), se usa el parámetro type_total para especificar el tipo de total de la orden.
  • Después tenemos ahora si el total de la orden usando el parámetro total, este es el monto total que el cliente pagara por la orden de venta, debido a que ingresamos el parámetro type_total con valor 1 tendremos que ingresar el total en MXN, en este ejemplo se ingresa la cantidad de 16000.5 (significa que son $16000.50 MXN), una vez que la orden se genere esta cantidad se convertirá a Bitcoin usando el tipo de cambio del Bitcoin que este en ese momento.
  • Ahora tenemos el carrito de compras, en este ejemplo ingresamos un servicio y dos productos, como podemos ver en el código y en la variable $params, se ingresan los parámetros services y products en forma de arreglo [], es decir, por cada servicio o producto ingresando se debe de enviar un elemento dentro de dichos arreglos, los elementos deben de enviarse en formato json y se utiliza el campo code y qty para enviar estos valores, es decir, cada elemento dentro de los parámetros services y products se representa como otro arreglo donde se ingresa code y qty, a ese arreglo le aplicamos la función json_encode que los convertirá al formato json que ya hemos mencionado, recordemos que para generar una orden de venta se requiere por lo menos un producto o un servicio, si no se envía ninguno se mostrara su respectivo código de error, así mismo, los productos y/o servicios ingresados deben de corresponder a la misma tienda a la que pertenece el cliente que se ingresó en el parámetro code_customer.
  • Para finalizar ingresamos el concepto de la orden utilizando el parámetro concept, el cual enviamos con el valor Pedido No. 457, aquí se puede ingresar el concepto que el desarrollador requiera, por ejemplo: mesa 10, reparación de pc, venta general, etc....
Notas

Toda la información de los parámetros necesarios para crear una orden, así como los códigos de éxito y error se pueden encontrar en su respectiva documentación ingresando en el siguiente enlace: add-order

Al ejecutar el código anterior obtenemos en la variable $res la siguiente información:

array:3 [
"status" => true
"success" => array:1 [
"code" => "0056"
]
"data" => array:34 [
"code" => "pgbord138863928951734896"
"address" => null
"slug" => "1ef022545cc636eb5367de06cfff0aa18a7f9190Kv1n7TPcUbXmPJLVi4sR"
"amount_filled" => "0.00000000"
"amount_remaining" => "0.01427879"
"amount_unconfirmed" => "0.00000000"
"code_customer" => "pgbcus56777697528357625"
"name_customer" => "Mario Chavez Alvarez"
"code_agent" => null
"name_agent" => null
"code_shop" => "pgbsho44747793463129176"
"name_shop" => "Velas martin"
"code_currency" => "BTC"
"currency_full_name" => "Bitcoin (BTC)"
"name_currency" => "Bitcoin"
"confirmations_counter" => "0"
"remaining_seconds" => null
"created_at" => "2024-08-20T00:54:59.000000Z"
"created_at_format" => "2024-08-19 18:54:59"
"expiration_date" => null
"expiration_date_format" => null
"isConfirming" => "0"
"isExpired" => "0"
"isPaid" => "0"
"isWaiting" => "0"
"total" => "0.01427879"
"subtotal" => "0.01413600"
"commission" => "0.00014279"
"commission_percent" => "1.00000000"
"total_mxn" => "16000.50000000"
"subtotal_mxn" => "15840.49000000"
"commission_mxn" => "160.01000000"
"cart" => array:3 [
0 => array:6 [
"quantity" => "1.00000000"
"total_mxn" => "12000.00000000"
"name_product" => null
"code_product" => null
"name_service" => "Decoracion 10 mesas para boda"
"code_service" => "pgbser56683545785157568"
]
1 => array:6 [
"quantity" => "2.00000000"
"total_mxn" => "399.98000000"
"name_product" => "Vela para decoración roma"
"code_product" => "pgbpro6788273824117159"
"name_service" => null
"code_service" => null
]
2 => array:6 [
"quantity" => "1.00000000"
"total_mxn" => "150.00000000"
"name_product" => "Vela de vainilla grande"
"code_product" => "pgbpro9777846867311479"
"name_service" => null
"code_service" => null
]
]
"concept" => "Pedido No. 457"
]
]

Esto nos indica que la orden se ha generado correctamente y ya está disponible y en espera de ser abierta para el cliente usando el método show-order-customer, recordemos que la ejecutar este método la orden generara su respectiva dirección de depósito y comenzara a correr el tiempo hasta su expiración, amenos claro, que se realice un depósito ya sea parcial o completo por el monto total de la orden, recordemos también que si el depósito lo realiza un usuario de MercadoBits se verá reflejado al instante, por otra parte si se realiza desde otra plataforma o wallet externa deberá de esperar a las respectivas confirmaciones de red para que se acredite el depósito en la orden.


En resumen, podemos observar que es bastante sencillo crear una orden de venta nueva usando PHP, se puede utilizar el cliente de peticiones que más se adepte a las necesidades del desarrollador, para este ejemplo se utilizó el cliente Guzzle que es bastante amigable y no requiere tantas líneas de código como por ejemplo cURL, que si bien tampoco son muchas, si son un poco más que al usar Guzzle.

Notas

Si tienes alguna duda recuerda que siempre puedes contactar con el equipo de soporte para desarrolladores ingresando en el siguiente enlace: Soporte para desarrolladores.