teamv / php-sdk2
SDK para Payway ventas online
Requires
- php: >=5.3
- dev-master
- v1.5.6
- V1.5.5
- V1.5.0
- V1.4.0
- V1.3.2
- V1.3.1
- V1.3.0
- V1.2.0
- V1.1.0
- V1.0.7
- V1.0.6
- V1.0.5
- V1.0.4
- dev-feature/FONLP02-2471-operaciones-bimonetaria-en-sd-ks-php
- dev-develop
- dev-release/2.0
- dev-feature/FPP11-6984-apikey-padre-hijo
- dev-feature/FPP11-6888-mini-refactor-checkout
- dev-issue-10-08
- dev-bugfix/fix-amount
- dev-feature/FPP11-5900-tokenizacion-interna
- dev-feature/FPP11-5653-tokenizacion-en-sdk-php-externa
- dev-bugfix/FPP11-5485-amount-error
- dev-bugfix/FPP11-5520
- dev-bugfix/wrong-amount
- dev-feature/FPP11-3495-generacion-link-pago
- dev-feature/FPP11-3364-3ds-challenge
- dev-bugfix/FPP11-3180-transaccion-distribuida
- dev-feature/FPP11-3363-3DS-payment
- dev-feature/FPP11-475-partial-total-refund
- dev-feature/FPP11-478-token-tokenCS
- dev-FPP18-97
- dev-feature/FPP11-134-environmentQA
- dev-DECD-9811
This package is auto-updated.
Last update: 2024-10-23 19:42:39 UTC
README
Payway SDK PHP
Modulo para conexión con gateway de pago Payway
- Introducción
- Instalación
- Uso
- Inicializar la clase correspondiente al conector
- Operatoria del Gateway
- Tokenizacion de tarjetas de crédito
- Integración con Cybersource
- Tablas de referencia
- Errores
Introducción
El flujo de una transacción a través de las sdks consta de dos pasos, la generación de un token de pago por parte del cliente y el procesamiento de pago por parte del comercio. Existen sdks específicas para realizar estas funciones en distintos lenguajes que se detallan a continuación:
- Generación de un token de pago. Se utiliza alguna de las siguentes sdks front-end :
- Procesamiento de pago. Se utiliza alguna de las siguentes sdks back-end :
Alcance
La sdk PHP provee soporte para su aplicación back-end, encargandose de la comunicación del comercio con la API Payway utilizando su API Key privada1 y el token de pago generado por el cliente.
Para generar el token de pago, la aplicación cliente realizará con Payway a través de alguna de las siguentes sdks front-end:
Cierre de lotes
El cierre de lote le permite al comercio hacer la presentación ante cada Marca de las operaciones de Compras, Anulaciones y Devoluciones realizadas para que las mismas puedan ser liquidadas por cada medio de pago.+
Los cierres de lotes de cada medio de pago pueden realizarse de 2 maneras: Manual: esta modalidad es “on demand”. Para ello, un usuario del comercio debe ingresar a la consola de Payway y seleccionar el medio de pago a cerrar lote. Opción de menú: Menú --> Cerrar Lote. Para más detalle por favor consultar el Manual de Administración de Payway. Automática: Los procesos se ejecutan diariamente luego de la medianoche, y al finalizar, se envían al comercio cada uno de los archivos del cierre de lote de cada medio de pago habilitado. Los resúmenes correspondientes a los cierres de lotes automáticos efectuados pueden ser enviados por:
- FTP/SFTP
En caso de que el comercio opte por recibir los resúmenes vía e-mail, debe indicarnos a qué dirección o direcciones de correo electrónico desea recibir tales archivos. En caso de que el comercio opte por recibir los resúmenes vía FTP o SFTP, debe indicarnos los siguientes datos: URL del servidor, usuario y clave.
TimeOut
El tiempo standard de Timeout para una transaccion es de 6 segundos. Puede existir casos excepcionales, mucho flujo de transacciones concurrentes , en el cual el timeout puede variar entre** 20 a 30 segundos**. Si el cliente decide configurar un timeout menor al indicado, deberá anular las transacciones en estado "Autorizadas" de manera manual.
Diagrama de secuencia
El flujo de una transacción a través de las sdks consta de dos pasos, a saber:
sdk front-end: Se realiza una solicitud de token de pago con la Llave de Acceso pública (public API Key), enviando los datos sensibles de la tarjeta (PAN, mes y año de expiración, código de seguridad, titular, y tipo y número de documento) y obteniéndose como resultado un token que permitirá realizar la transacción posterior.
sdk back-end: Se ejecuta el pago con la Llave de Acceso privada (private API Key), enviando el token generado en el Paso 1 más el identificador de la transacción a nivel comercio, el monto total, la moneda y la cantidad de cuotas.
A continuación, se presenta un diagrama con el Flujo de un Pago.
Instalación
El SDK se encuentra disponible para descargar desde Github o desde composer con el siguiente comando:
composer require decidir2/php-sdk
Una vez instalo el SDK dentro del proyecto, es necesario tener descomentada la extension=php_curl.dll en el php.ini, ya que para la conexión al gateway se utiliza la clase curl del API de PHP.
Versiones de PHP soportadas
La versión implementada de la SDK, está testeada para las versiones PHP desde 5.3.
Manual de Integración
Se encuentra disponible la documentación Manual de Integración Payway para su consulta online, en este se detalla el proceso de integración. En el mismo se explican los servicios y operaciones disponibles, con ejemplos de requerimientos y respuestas, aquí sólo se ejemplificará la forma de llamar a los distintos servicios utilizando la presente SDK.
Ambientes
El sdk PHP permite trabajar con los ambientes de Sandbox y Producción de Payway. El ambiente se debe definir al instanciar el SDK.
$ambient = "test";//valores posibles: "test" , "prod" o "qa" $connector = new \Decidir\Connector($keys_data, $ambient);
Uso
Inicializar la clase correspondiente al conector.
El SDK-PHP permite trabajar con los ambientes de desarrollo y de producción de Payway.
El ambiente se debe instanciar como se indica a continuación.
Instanciación de la clase Decidir\Connector
La misma recibe como parámetros la public key o private key provisto por Payway para el comercio y el ambiente en que se trabajara.
$keys_data = array('public_key' => 'e9cdb99fff374b5f91da4480c8dca741', 'private_key' => '92b71cf711ca41f78362a7134f87ff65'); $ambient = "test";//valores posibles: "test" , "prod" o "qa" $connector = new \Decidir\Connector($keys_data, $ambient);
Nota: La sdk incluye un ejemplo de prueba completo el cual se debe acceder desde el navegador, allí permitirá configurar las distintas opciones.
Operatoria del Gateway
Health Check
Este recurso permite conocer el estado actual de la API RESTful de Payway.
$connector = new \Decidir\Connector($keys_data, $ambient); $response = $connector->healthcheck()->getStatus(); $response->getName(); $response->getVersion(); $response->getBuildTime();
Token
Este recurso permite obtener token de pago.
$connector = new \Decidir\Connector($keys_data, $ambient, "", "", "SDK-PHP"); $data = array( "card_number" => "4509790112684851", "card_expiration_month" => "12", "card_expiration_year" => "30", "card_holder_name" => "Barb", "card_holder_birthday" => "24071990", "card_holder_door_number" => 505, "security_code" => "123", "card_holder_identification" => array( "type" => "dni", "number" => "29123456")); $response = $connector->token()->token($data); $respuesta = new TokenResponse(); $respuesta->setId($response->get('id',null)); $respuesta->setStatus($response->get('status',null)); $respuesta->setCardNumberLength($response->get('card_number_length', null)); $respuesta->setDateCreated($response->get('date_created', null)); $respuesta->setBin($response->get('bin', null)); $respuesta->setLastFourDigits($response->get('last_four_digits', null)); $respuesta->setSecurityCodeLength($response->get('security_code_length', null)); $respuesta->setExpirationMonth($response->get('expiration_month', null)); $respuesta->setExpirationYear($response->get('expiration_year', null)); $respuesta->setDateDue($response->get('date_due', null)); $cardHolder = $response->get('cardholder', null); $respuesta->setType($cardHolder['identification']['type']); $respuesta->setNumber($cardHolder['identification']['number']); $respuesta->setName($cardHolder['name']);
TokenCS
Este recurso permite obtener token de pago.
$connector = new \Decidir\Connector($keys_data, $ambient, "", "", "SDK-PHP"); $data = array( "card_number" => "4509790112684851", "card_expiration_month" => "12", "card_expiration_year" => "30", "card_holder_name" => "Barb", "card_holder_birthday" => "24071990", "card_holder_door_number" => 505, "security_code" => "123", "card_holder_identification" => array( "type" => "dni", "number" => "29123456" ), "fraud_detection"=> array( "device_unique_identifier"=> "12345" ), "ip_address"=> "192.168.100.1"); $response = $connector->token()->tokenCs($data); $respuesta = new TokenResponse(); $respuesta->setId($response->get('id',null)); $respuesta->setStatus($response->get('status',null)); $respuesta->setCardNumberLength($response->get('card_number_length', null)); $respuesta->setDateCreated($response->get('date_created', null)); $respuesta->setBin($response->get('bin', null)); $respuesta->setLastFourDigits($response->get('last_four_digits', null)); $respuesta->setSecurityCodeLength($response->get('security_code_length', null)); $respuesta->setExpirationMonth($response->get('expiration_month', null)); $respuesta->setExpirationYear($response->get('expiration_year', null)); $respuesta->setDateDue($response->get('date_due', null)); $cardHolder = $response->get('cardholder', null); $respuesta->setType($cardHolder['identification']['type']); $respuesta->setNumber($cardHolder['identification']['number']); $respuesta->setName($cardHolder['name']);
BatchClosure
Este recurso permite realizar un cierre de lote.
$connector = new \Decidir\Connector($keys_data, $ambient, "", "", "SDK-PHP"); $data = array( "username"=> "admin", "site_id"=> "00097001", "payment_method_id"=> "113"); try{ $response = $connector->batchClosure()->batchClosure($data); } catch( \Exception $e ) { return response()->json(['error' => $e->getMessage() ], 403); } $respuesta = new BatchClosureResponse(); $respuesta->setBatchId($response->get('batch_id',null)); $respuesta->setFileName($response->get('file_name',null)); $respuesta->setErrors($response->get('errors',null));
Ejecución del Pago
Una vez generado y almacenado el token de pago, se deberá ejecutar la solicitud de pago más el token previamente generado. Además del token de pago y los parámetros propios de la transacción, el comercio deberá identificar la compra con el site_transaction_id.
Aclaracion : amount es un campo double el cual debería tener solo dos dígitos decimales.
Ejemplo
$connector = new \Decidir\Connector($keys_data, $ambient); $data = array( "site_transaction_id" => "12042017_20", "token" => "be211413-757b-487e-bb0c-283d21c0fb6f", "customer" => array( "id" => "customer", "email" => "user@mail.com" "ip_address" => "192.168.100.2" ), "payment_method_id" => 1, "bin" => "450799", "amount" => 5.00, "currency" => "ARS", "installments" => 1, "description" => "", "establishment_name" => "Nombre establecimiento", "payment_type" => "single", "sub_payments" => array() ); try { $response = $connector->payment()->ExecutePayment($data); $response->getId(); $response->getToken(); $response->getUser_id(); $response->getPayment_method_id(); $response->getBin(); $response->getAmount(); $response->getCurrency(); $response->getInstallments(); $response->getPayment_type(); $response->getDate_due(); $response->getSub_payments(); $response->getStatus(); $response->getStatus_details()->ticket $response->getStatus_details()->card_authorization_code $response->getStatus_details()->address_validation_code $response->getStatus_details()->error $response->getDate(); $response->getEstablishment_name(); $response->getFraud_detection(); $response->getAggregate_data(); $response->getSite_id(); } catch( \Exception $e ) { var_dump($e->getData()); }
Captura del Pago
Para el caso de la operatoria de transacción en dos pasos, la captura o confirmación del pago puede realizarse de la siguiente manera.
Aclaracion : amount es un campo double el cual debería tener solo dos dígitos decimales.
Ejemplo
$connector = new \Decidir\Connector($keys_data, $ambient); $data = array( "amount" => 5.00, ); try { $response = $connector->payment()->CapturePayment($data); } catch( \Exception $e ) { var_dump($e->getData()); }
Ejecución de pago offline
Una vez generado y almacenado el token de Pago Offline, se deberá ejecutar la solicitud de pago utilizando el token previamente generado. Además del token de pago y los parámetros propios de la transacción, el comercio deberá identificar la compra con el site_transaction_id.
Aclaracion : amount es un campo double el cual debería tener solo dos dígitos decimales.
Pago Facil
Ejemplo
$data = array( "site_transaction_id" => "230518_41", "token" => "92a95793-3321-447c-8795-8aeb8a8ac067", "payment_method_id" => 25, "amount" => 10.00, "currency" => "ARS", "payment_type" => "single", "email" => "user@mail.com", "invoice_expiration" => "191123", "cod_p3" => "12", "cod_p4" => "134", "client" => "12345678", "surcharge" => 10.01, "payment_mode" => "offline" ); $response = $connector->payment()->ExecutePaymentOffline($data);
Rapipago
Ejemplo
$data = array( "site_transaction_id" => "230518_38", "token" => "8e190c82-6a63-467e-8a09-9e8fa2ab6215", "payment_method_id" => 26, "amount" => 10.00, "currency" => "ARS", "payment_type" => "single", "email" => "user@mail.com", "invoice_expiration" => "191123", "cod_p3" => "12", "cod_p4" => "134", "client" => "12345678", "surcharge" => 10.01, "payment_mode" => "offline" ); $response = $connector->payment()->ExecutePaymentOffline($data);
Pago mis Cuentas
Ejemplo
$data = array( "site_transaction_id" => "220518_39", "token" => "9ae1d130-8c89-4c3b-a267-0e97b88fedd0", "payment_method_id" => 41, "amount" => 10.00, "currency" => "ARS", "payment_type" => "single", "email" => "user@mail.com", "bank_id" => 1, "sub_payments" => 100, "invoice_expiration" => "191123" ); $response = $connector->payment()->ExecutePaymentOffline($data);
Cobro Express
Ejemplo
$data = array( "site_transaction_id" => "160518_42", "token" => "3df26771-67ab-4a8e-91e2-f1e0b0c559f7", "payment_method_id" => 51, "amount" => 10.00, "currency" => "ARS", "payment_type" => "single", "email" => "user@mail.com", "invoice_expiration" => "191123", "second_invoice_expiration" => "191123", "cod_p3" => "1", "cod_p4" => "134", "client" => "12345678", "surcharge" => 10.01, "payment_mode" => "offline" ); $response = $connector->payment()->ExecutePaymentOffline($data);
Cobro Express
Ejemplo
$data = array( "site_transaction_id" => "160518_42", "token" => "3df26771-67ab-4a8e-91e2-f1e0b0c559f7", "payment_method_id" => 51, "amount" => 10.00, "currency" => "ARS", "payment_type" => "single", "email" => "user@mail.com", "invoice_expiration" => "191123", "second_invoice_expiration" => "191123", "cod_p3" => "1", "cod_p4" => "134", "client" => "12345678", "surcharge" => 10.01, "payment_mode" => "offline" ); $response = $connector->payment()->ExecutePaymentOffline($data);
Formulario de Pago
Este servicio permite integrar en el comercio un formulario de pago. Utiliza el recurso "validate" para obtener un hash a partir de los datos de la operacion, luego este hash sera utilizado al momento de llamar al recurso "form" el cual devolvera el formulario renderizado propio para cada comercio listo para ser utilizado y completar el flujo de pago.
Ejemplo
//Para este servicio es necesario enviar junto al public y private key el "form_apikey" y "form_site". $keys_data = array( 'form_apikey' => '5cde7e72ea1e430db94d4312346a3744 ', 'form_site' => '00021625' ); $connector = new \Decidir\Connector($keys_data, $ambient); $data = array( "site" => array( "id" => "03101980", //opcional, si no se tiene Merchant no se envía este atributo "transaction_id" => "Swatch op", "template" => array( "id" => 5 ), ), "customer" => array( "id" => "001", "email" => "user@mail.com", ), "payment" => array( "amount" => 1203, "currency" => "ARS", "payment_method_id" => 1, "bin" => "45979", "installments" => 4, "payment_type" => "single", "sub_payments" => array() ), "success_url" => "https://shop.swatch.com/es_ar/", //si no se informa el "redirect_url" es requerido "cancel_url" => "https://swatch.com/api/result", "redirect_url" => "", //si no se informa el "success_url" es requerido "fraud_detection" => array() //si no esta activado cybersource no enviar este atributo ); $response = $connector->payment()->Validate($data);
Respuesta servicio validate
$response = $connector->payment()->Validate($data); $response->getHash(); //respuesta: 46711cd8-81f8-4228-96cc-ac3e90c75622"
Formulario renderizado
Al obtener el hash se puede generar el formulario a partir de la url: https://api.decidir.com/web/form?hash=46711cd8-81f8-4228-96cc-ac3e90c75622.
Listado de Pagos
Mediante este recurso, se genera una solicitud de listado de pagos. Este recurso admite la posibilidad de agregar los filtros adicionales:
- (opcional) offset: desplazamiento en los resultados devueltos. Valor por defecto = 0.
- (opcional) pageSize: cantidad máxima de resultados retornados. Valor por defecto = 50.
- (opcional) siteOperationId: ID único de la transacción a nivel comercio (equivalente al site_transaction_id).
- (opcional) merchantId: ID Site del comercio.
$connector = new \Decidir\Connector($keys_data, $ambient); $data = array("pageSize" => 5); $response = $connector->payment()->PaymentList($data); $response->getLimit(); $response->getOffset(); $response->getResults(); $response->getHas_more();
Información de un Pago
Mediante este recurso, se genera una solicitud de información de un pago previamente realizado, pasando como parámetro el id del pago.
$connector = new \Decidir\Connector($keys_data, $ambient); $data = array(); $response = $connector->payment()->PaymentInfo($data, '574421'); $response->getId(); $response->getSiteTransaction_id(); $response->getToken(); $response->getUser_id(); $response->getPayment_method_id(); $response->getCard_brand(); $response->getBin(); $response->getAmount(); $response->getCurrency(); $response->getInstallments(); $response->getPayment_type(); $response->getSub_payments(); $response->getStatus(); $response->getStatus_details(); $response->getDate(); $response->getEstablishment_name(); $response->getFraud_detection(); $response->getAggregate_data(); $response->getSite_id();
Información adicional de tarjeta
Agregando la opcion "card_data" se puede obtener información adicional de la tarjera utilizada para el pago.
$data = array(); $query = array("expand"=>"card_data"); $response = $connector->payment()->PaymentInfo($data, '873836', $query); $response->getCard_data()
Respuesta
Array ( [card_number] => 450799XXXXXX4905 [card_holder] => Array ( [identification] => Array ( [type] => dni [number] => 27859328 ) [name] => Tarjeta Visa ) )
Anulación / Devolución Total de Pago
Mediante este recurso, se genera una solicitud de anulación / devolución total de un pago puntual, pasando como parámetro el id del pago.
$data = array(); $response = $connector->payment()->Refund($data, '574671'); //574671 es el id de la operacion de compra $response->getId(); $response->getAmount(); $response->getSub_payments(); $response->getStatus();
Anulación de Devolución Total
Mediante este recurso, se genera una solicitud de anulación de devolución total de un pago puntual, pasando como parámetro el id del pago y el id de la devolución.
$data = array(); $response = $connector->payment()->deleteRefund($data, '574671', '164'); //574671 id de la operacion de compra, 164 id de la devolucion $response->getResponse(); $response->getStatus();
Devolución Parcial de un Pago
Mediante este recurso, se genera una solicitud de devolución parcial de un pago puntual, pasando como parámetro el id del pago y el monto de la devolución.
$data = array( "amount" => 10.00 ); $response = $connector->payment()->partialRefund($data,'574673'); //574671 id de la operacion de compra $response->getId(); $response->getAmount(); $response->getSub_payments(); $response->getStatus();
Anulación de Devolución Parcial
Mediante este recurso, se genera una solicitud de anulación de devolución parcial de un pago puntual, pasando como parámetro el id del pago y el id de la devolución.
$data = array(); $response = $connector->payment()->deleteRefund($data, '574671', '164'); //574671 id de la operacion de compra, 164 id de la devolucion parcial $response->getResponse()); $response->getStatus());
Tokenizacion de tarjetas de crédito
Esta funcionalidad permite que luego de realizar una compra con una tarjeta, se genere un token alfanumerico unico en el backend de Decidir, esto permite que a la hora de comprar nuevamente con esta tarjeta solo requerira el token de la tarjeta y el codigo de seguridad. Como primer paso se debe realizar una un pago normal, el token generado estara en el campo "token" de la respuesta.
Listado de tarjetas tokenizadas
Este metodo permite conocer el listado de tarjetas tokenizadas que posee un usuario determinado. Esto requerira el nombre de usuario (user_id) al momento de llamar al metodo tokensList.
$data = array(); $response = $connector->token()->tokensList($data, 'prueba'); //prueba, es el usuario dueño de la tarjeta de credito var_dump($response); var_dump($response->getTokens());
Ejecucion de pago tokenizado
Una vez que se obtiene el token a partir de la tarjeta tokenizada, se deberá ejecutar la solicitud de pago. Además del token de pago y los parámetros propios de la transacción, el comercio deberá identificar la compra con el "site_transaction_id" y "user_id".
$connector = new \Decidir\Connector($keys_data, $ambient); $data = array( "site_transaction_id" => "12042017_20", "token" => "be211413-757b-487e-bb0c-283d21c0fb6f", "user_id" => "pepe", "payment_method_id" => 1, "bin" => "450799", "amount" => 10.00, "currency" => "ARS", "installments" => 1, "description" => "", "payment_type" => "single", "sub_payments" => array() ); $response = $connector->payment()->ExecutePayment($data); $response->getId(); $response->getToken(); $response->getUser_id(); $response->getPayment_method_id(); $response->getBin(); $response->getAmount(); $response->getCurrency(); $response->getInstallments(); $response->getPayment_type(); $response->getDate_due(); $response->getSub_payments(); $response->getStatus(); $response->getStatus_details(); $response->getDate(); $response->getEstablishment_name(); $response->getFraud_detection(); $response->getAggregate_data(); $response->getSite_id();
Eliminacion de tarjeta tokenizada
El servicio da la posibilidad de eliminar un token de tarjeta generada, esto se logra instanciando token y utilizando el metodo tokenDelete() y enviando la tarjeta tokenizada.
$data = array(); $response = $connector->token()->tokenDelete($data, 'af49025a-f1b7-4363-a1cb-1ed38c3d4d75');
Integración con Cybersource
Para utilizar el Servicio de Control de Fraude Cybersource, en la ejecución del pago, deben enviarse datos adicionales sobre la operación de compra que se quiere realizar. Se han definido cinco verticales de negocio que requieren parámetros específicos, así como también parámetros comunes a todas las verticales.
Retail
Los siguientes parámetros se deben enviar específicamente para la vertical Retail. Además se deben enviar datos específicos de cada producto involucrado en la transacción.
Ejemplo
$cs_data = array( "send_to_cs" => true, "channel" => "Web", "bill_to" => array( "city" => "Buenos Aires", "country" => "AR", "customer_id" => "martinid", "email" => "accept@decidir.com.ar", "first_name" => "martin", "last_name" => "perez", "phone_number" => "1547766111", "postal_code" => "1768", "state" => "BA", "street1" => "GARCIA DEL RIO 3333", "street2" => "GARCIA DEL RIO 3333", ), "ship_to" => array( "city" => "Buenos Aires", "country" => "AR", "email" => "accept@decidir.com.ar", "first_name" => "martin", "last_name" => "perez", "phone_number" => "1547766111", "postal_code" => "1768", "state" => "BA", "street1" => "GARCIA DEL RIO 3333", "street2" => "GARCIA DEL RIO 3333", ), "currency" => "ARS", "amount" => 12.00, "days_in_site" => 243, "is_guest" => false, "password" => "password", "num_of_transactions" => 1, "cellphone_number" => "12121", "date_of_birth" => "129412", "street" => "RIO 4041", "days_to_delivery" => "55", "dispatch_method" => "storepickup", "tax_voucher_required" => true, "customer_loyality_number" => "123232", "coupon_code" => "cupon22", "csmdd17" => "17" ); //Datos de productos, array con los diferentes productos involucrados. $cs_products = array( array( "csitproductcode" => "electronic_product", //Código de producto. MANDATORIO. "csitproductdescription" => "NOTEBOOK L845 SP4304LA DF TOSHIBA", //Descripción del producto. MANDATORIO. "csitproductname" => "NOTEBOOK L845 SP4304LA DF TOSHIBA", //Nombre del producto. MANDATORIO. "csitproductsku" => "LEVJNSL36GN", //Código identificador del producto. MANDATORIO. "csittotalamount" => 6.00, //MANDATORIO "csitquantity" => 1,//Cantidad del producto. MANDATORIO. "csitunitprice" => 6.00 //Formato Idem CSITTOTALAMOUNT. MANDATORIO ), array( "csitproductcode" => "default", //Código de producto. MANDATORIO. "csitproductdescription" => "PENDRIVE 2GB KINGSTON", //Descripción del producto. MANDATORIO. "csitproductname" => "PENDRIVE 2GB", //Nombre del producto. MANDATORIO. "csitproductsku" => "KSPDRV2g", //Código identificador del producto. MANDATORIO. "csittotalamount" => 6.00, //MANDATORIO "csitquantity" => 1, //Cantidad del producto. MANDATORIO. "csitunitprice" => 6.00 //Formato Idem CSITTOTALAMOUNT. MANDATORIO ) );
Para incorporar estos datos en el requerimiento inicial, se debe instanciar un objeto de la clase Decidir\Data\Cybersource\Retail de la siguiente manera.
$cybersource = new Decidir\Cybersource\Retail( $datos_cs, // Datos de la operación $cs_productos, // Datos de los productos ); $connector->payment()->setCybersource($cybersource->getData()); $data = array( "site_transaction_id" => "12042017_20", "token" => "be211413-757b-487e-bb0c-283d21c0fb6f", "user_id" => "usuario", "payment_method_id" => 1, "bin" => "450799", "amount" => 12.00, "currency" => "ARS", "installments" => 1, "description" => "", "payment_type" => "single", "sub_payments" => array() ); $response = $connector->payment()->ExecutePayment($data);
Ticketing
Los siguientes parámetros se deben enviar específicamente para la vertical Ticketing. Además se deben enviar datos específicos de cada producto involucrado en la transacción.
Ejemplo
$cs_data = array( "send_to_cs" => true, "channel" => "Web", "bill_to" => array( "city" => "Buenos Aires", "country" => "AR", "customer_id" => "martinid", "email" => "accept@decidir.com.ar", "first_name" => "martin", "last_name" => "perez", "phone_number" => "1547766111", "postal_code" => "1427", "state" => "BA", "street1" => "GARCIA DEL RIO 4000", "street2" => "GARCIA DEL RIO 4000", ), "currency" => "ARS", "amount" => 12.00, "days_in_site" => 243, "is_guest" => false, "password" => "abracadabra", "num_of_transactions" => 1, "cellphone_number" => "12121", "date_of_birth" => "129412", "street" => "RIO 4041", "delivery_type"=> "Pick up", "days_to_event"=> 55, "csmdd17" => "17" ); //Datos de productos, array con los diferentes productos involucrados. $cs_products = array( array( "csitproductcode" => "concierto2016", "csitproductdescription" => "Popular Concierto 2016", "csitproductname" => "concierto2016", "csitproductsku" => "BS01", "csittotalamount" => 6.00, "csitquantity" => 1, "csitunitprice" => 6.00 ), array( "csitproductcode" => "concierto2017", "csitproductdescription" => "Popular Concierto 2017", "csitproductname" => "concierto2017", "csitproductsku" => "BS01", "csittotalamount" => 6.00, "csitquantity" => 1, "csitunitprice" => 6.00 ) );
Para incorporar estos datos en el requerimiento inicial, se debe instanciar un objeto de la clase Decidir\Data\Cybersource\Ticketing de la siguiente manera.
$cybersource = new Decidir\Cybersource\Ticketing( $datos_cs, // Datos de la operación $cs_productos, // Datos de los productos ); $connector->payment()->setCybersource($cybersource->getData()); $data = array( "site_transaction_id" => "12042017_20", "token" => "be211413-757b-487e-bb0c-283d21c0fb6f", "user_id" => "usuario", "payment_method_id" => 1, "bin" => "450799", "amount" => 12.00, "currency" => "ARS", "installments" => 1, "description" => "", "payment_type" => "single", "sub_payments" => array() ); $response = $connector->payment()->ExecutePayment($data);
Digital Goods
Los siguientes parámetros se deben enviar específicamente para la vertical Digital Goods. Además se deben enviar datos específicos de cada producto involucrado en la transacción.
Ejemplo
$cs_data = array( "send_to_cs" => true, "channel" => "Web", "bill_to" => array( "city" => "Buenos Aires", "country" => "AR", "customer_id" => "martinid", "email" => "accept@decidir.com.ar", "first_name" => "martin", "last_name" => "perez", "phone_number" => "1547766111", "postal_code" => "1427", "state" => "BA", "street1" => "GARCIA DEL RIO 4000", "street2" => "GARCIA DEL RIO 4000", ), "currency" => "ARS", "amount" => 12.00, "days_in_site" => 243, "is_guest" => false, "password" => "abracadabra", "num_of_transactions" => 1, "cellphone_number" => "12121", "date_of_birth" => "129412", "street" => "RIO 4041", "delivery_type"=> "Pick up", "csmdd17" => "17" ); //lista de productos cybersource $cs_products = array( array( "csitproductcode" => "software2016", "csitproductdescription" => "Software 2016", "csitproductname" => "soft2016", "csitproductsku" => "ST01", "csittotalamount" => 6.00, "csitquantity" => 1, "csitunitprice" => 6.00 ), array( "csitproductcode" => "software2017", "csitproductdescription" => "Software 2017", "csitproductname" => "soft2017", "csitproductsku" => "ST01", "csittotalamount" => 6.00, "csitquantity" => 1, "csitunitprice" => 6.00 ) );
Para incorporar estos datos en el requerimiento inicial, se debe instanciar un objeto de la clase Decidir\Data\Cybersource\DigitalGoods de la siguiente manera.
$cybersource = new Decidir\Cybersource\DigitalGoods( $datos_cs, // Datos de la operación $cs_productos, // Datos de los productos ); $connector->payment()->setCybersource($cybersource->getData()); $data = array( "site_transaction_id" => "12042017_20", "token" => "be211413-757b-487e-bb0c-283d21c0fb6f", "user_id" => "usuario", "payment_method_id" => 1, "bin" => "450799", "amount" => 12.00, "currency" => "ARS", "installments" => 1, "description" => "", "payment_type" => "single", "sub_payments" => array() ); $response = $connector->payment()->ExecutePayment($data);
Services
Los siguientes parámetros se deben enviar específicamente para la vertical Digital Goods. Además se deben enviar datos específicos de cada producto involucrado en la transacción.
Ejemplo
$cs_data = array( "send_to_cs" => true, "channel" => "Web", "bill_to" => array( "city" => "Buenos Aires", "country" => "AR", "customer_id" => "martinid", "email" => "accept@decidir.com.ar", "first_name" => "martin", "last_name" => "perez", "phone_number" => "1547766111", "postal_code" => "1768", "state" => "BA", "street1" => "GARCIA DEL RIO 3333", "street2" => "GARCIA DEL RIO 3333", ), "currency" => "ARS", "amount" => 12.00, "days_in_site" => 243, "is_guest" => false, "password" => "password", "num_of_transactions" => 1, "cellphone_number" => "12121", "date_of_birth" => "129412", "street" => "RIO 4041", "service_type" => "tiposervicio", "reference_payment_service1" => "reference1", "reference_payment_service2" => "reference2", "reference_payment_service3" => "reference3", "csmdd17" => "17" ); //lista de productos cybersource $cs_products = array( array( "csitproductcode" => "popblacksabbat2016", "csitproductdescription" => "Popular Black Sabbath 2016", "csitproductname" => "popblacksabbat2016ss", "csitproductsku" => "asas", "csittotalamount" => 6.00, "csitquantity" => 1, "csitunitprice" => 6.00 ), array( "csitproductcode" => "popblacksabbat2017", "csitproductdescription" => "Popular Black Sabbath 2017", "csitproductname" => "popblacksabbat2017ss", "csitproductsku" => "asas", "csittotalamount" => 6.00, "csitquantity" => 1, "csitunitprice" => 6.00 ) );
Para incorporar estos datos en el requerimiento inicial, se debe instanciar un objeto de la clase Decidir\Data\Cybersource\Service de la siguiente manera.
$cybersource = new Decidir\Cybersource\Service( $datos_cs, // Datos de la operación $cs_productos, // Datos de los productos ); $connector->payment()->setCybersource($cybersource->getData()); $data = array( "site_transaction_id" => "12042017_20", "token" => "be211413-757b-487e-bb0c-283d21c0fb6f", "user_id" => "usuario", "payment_method_id" => 1, "bin" => "450799", "amount" => 12.00, "currency" => "ARS", "installments" => 1, "description" => "", "payment_type" => "single", "sub_payments" => array() ); $response = $connector->payment()->ExecutePayment($data);
Travel
Los siguientes parámetros se deben enviar específicamente para la vertical Travel. Además se deben enviar datos específicos de cada pasajero involucrado en la transacción.
Ejemplo
$cs_data = array( "send_to_cs" => true, "channel" => "Web", "bill_to" => array( "city" => "Buenos Aires", "country" => "AR", "customer_id" => "martinid", "email" => "accept@decidir.com.ar", "first_name" => "martin", "last_name" => "perez", "phone_number" => "1547766111", "postal_code" => "1768", "state" => "BA", "street1" => "GARCIA DEL RIO 3333", "street2" => "GARCIA DEL RIO 3333", ), "currency" => "ARS", "amount" => 12.00, "days_in_site" => 243, "is_guest" => false, "password" => "password", "num_of_transactions" => 1, "cellphone_number" => "12121", "date_of_birth" => "129412", "street" => "RIO 4041", "reservation_code" => "GJH784", "third_party_booking" => false, "departure_city" => "EZE", "final_destination_city" => "HND", "international_flight" => true, "frequent_flier_number" => "00000123", "class_of_service" => "class", "day_of_week_of_flight" => 2, "week_of_year_of_flight" => 5, "airline_code" => "AA", "code_share" => "SKYTEAM", "decision_manager_travel" => array( "complete_route" => "EZE-LAX:LAX-HND", "journey_type" => "one way", "departure_date" => array( "departure_time" => "2017-05-30T09:00Z", "departure_zone "=> "GMT-0300" ) ), "airline_number_of_passengers" => 1 ); $cs_passenger = array( array( "email" => "juan@mail.com", "first_name" => "Juan", "last_name" => "Perez", "passport_id" => "412314851231", "phone" => "541134356768", "passenger_status" => "gol", "passenger_type" => "ADT" ) );
Para incorporar estos datos en el requerimiento inicial, se debe instanciar un objeto de la clase Decidir\Data\Cybersource\Travel de la siguiente manera.
$cybersource = new Decidir\Cybersource\Travel( $datos_cs, // Datos de la operación $cs_passenger, // Datos de los pasajeros ); $connector->payment()->setCybersource($cybersource->getData()); $data = array( "site_transaction_id" => "12042017_20", "token" => "be211413-757b-487e-bb0c-283d21c0fb6f", "user_id" => "usuario", "payment_method_id" => 1, "bin" => "450799", "amount" => 12.00, "currency" => "ARS", "installments" => 1, "description" => "", "payment_type" => "single", "sub_payments" => array() ); $response = $connector->payment()->ExecutePayment($data);
Tablas de Referencia
Códigos de Medios de pago
- Visa Debito no acepta devoluciones parciales en e-commerce.
Divisas Aceptadas
NOTA Si bien la API RESTful de DECIDIR admite compras en Dólares Americanos, la legislación argentina sólo permite transacciones en Pesos Argentinos. Es por esto que DECIDIR recomienda que todas las transacciones se cursen en dicha moneda.
Provincias
Erorres
Erorres de Sistema
Listado de Códigos de Errores
Erorres de Marca
Listado de Códigos de Errores de Medios de Pago