Smart COMM VB6
1. Instalación del driver.
Las terminales se conectan al punto de venta a través del puerto USB, es necesario instalar los drivers correspondientes para que Windows pueda detectar el dispositivo. Para instalar los drivers del dispositivo es necesario descomprimir el archivo USBDriver_V2.22_20180726.zip, ejecutar el instalador USBDriver.exe y seguir las instrucciones en pantalla.
Al haber instalado los drivers, Windows detectará el dispositivo Pin Pad y le asignará un puerto serial de trabajo. Para detectar el puerto serial asignado, se puede visualizar en el Panel de Control, en la sección de Dispositivos de Hardware, bajo el menú de Puertos (COM & LPT).
2. Demo de punto de venta.
Se cuenta con un Demo de punto de venta para simular las transacciones de Venta, Cancelación y Reimpresión.
Descargar el Demo “vb6-connector-demo-dev.zip” del drive descomprimir realizar las referencias al dll y tlb dependiendo la arquitectura x64 o x86 como se indica en el punto 3.- Instalación de componente.
3. Instalación e integración de componentes.
3.1 Instalación de componentes.
Para realizar la integración con la terminal se incluye los siguientes archivos los cuales deberán de ser importados en el proyecto del punto de venta. Los archivos DLL tienen como Target .NET 3.5 Framework o superior.
NetPayConnect.dll (Conector para la terminal Smart PinPad DEV).
NetpayConnect.tlb (Librería requerida para Visual 6.0).
Los archivos dll pueden ser descargados del siguiente drive carpeta “NetpayConnect_v1.1”:
Nota.
Dependiendo el tipo de desarrollo hay que verificar si se encuentra en arquitectura x64 o x86 ya que se deberá agregar las dll correspondientes.
Pasos para la instalación de los componentes.
Abrir línea de comandos de Windows (CMD) en modo Administrador
Ejecutar la línea --> cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 (Ruta donde se encuentre instalado el netframework)
Seguido de --> RegAsm.exe "C:\Utilidades\NetPayConnect.dll" /tlb:NetPayConnect.tlb /codebase
Donde C:\ Es la ruta donde se encuentran los archivos necesarios a instalar (dll y tlb).
Nota.
Si por alguna razón no funciona la asignación del archivo .tlb se puede generar uno nuevo ubicando el archivo .dll con los siguientes comandos:
Ejecutar la línea --> cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 (Ruta donde se encuentre instalado el netframework)
Seguido de -> RegAsm.exe "C:\Utilidades\NetPayConnect.dll" /tlb /codebase
3.2 Integración componente.
El componente NetpayConnect.dll es una librería que puede ser integrada en cualquier lenguaje de desarrollo basado en Windows que soporte este tipo de librería. Actualmente la librería está compilada por plataformas x86 para poder trabajar en plataformas x86 (32 bits) y x64 (64 bits) según sea el caso.
Referenciar DLL a Visual Basic6.
Abrir Pestaña de Project y hacer clic en References, En la pantalla de References Dar clic a la opción de browse y buscar el archivo con la extensión tlb una vez agregado seleccionar la Referencia NetPayConnect de la lista.
4. Integración de las librerías.
La aplicación SmartPinPad DEV ya contiene la funcionalidad por default o Método SendData()
La librería contiene una clase llamada Operator que es utilizado para mandar a llamar los métodos.
El método SendData() realiza o procesa los pagos de tarjeta de crédito y débito de la marca Visa, MasterCard y American Express.
Nota.
En la clase general se agrega la línea para poder utilizar la dll. En el caso de Visual Studio 6 se integra el .tlb
Ejemplo de cómo utilizar la dll una vez referenciada e instalada en windows:
Dim conector As NetPayConnect.Operator
Set conector = New NetPayConnect.Operator
A continuación, se enumeran los parámetros que recibe el método Operator (Define el tipo de transacción a ejecutar, puede recibir los siguientes valores):
Campo | Descripción |
---|---|
setAmount() | Se asigna el monto a cobrar. Recibe valor de tipo Double (solo acepta 2 decimales). |
setMSI() | Se asigna el número de meses sin intereses al momento de procesar la transacción. Por default se envía el valor 0 (Sin meses). Posibles valores que acepta: 3, 6, 9, 12, 18. |
setFolio() | Se asigna el folio personalizado a utilizar en el Ticket. |
sendData() | Una vez asignado el monto como mínimo se manda a llamar este método para procesar la transacción en la PinPad. |
sendPrint() | Reimprime una transacción (requiere orderId). Para realizar una transacción de prueba debemos de utilizar al menos el método de setAmount() para colocar el monto a cobrar y procesar la transacción con el método sendData(). |
ReceiveData() | Después de ejecutar algún método tipo send se activa el tipo RecieveData() el cual activa la lectura del puerto. Este regresa mensaje de respuesta en texto. |
4.1 Lectura de respuesta solicitud de autorización.
Al ejecutar el método SendData() el conector enviará la transacción al Smart PinPad DEV el cual procesa la transacción y retornará los parámetros que muestran el resultado de la operación.
Para leer la respuesta de la transacción el componente retorna un valor booleano indicando true si todo se procesó de manera exitosa y false en caso contrario.
El proceso para el procesamiento de una transacción es el siguiente:
- El punto de venta asigna los parámetros necesarios, SetAmount.
- El punto de venta ejecuta el método SendData().
- El conector activa la comunicación con el dispositivo Pinpad y solicita sea deslizada o insertada o por vía contactless la tarjeta del cliente en el Pinpad.
- Al recibir los datos de la tarjeta del PinPad procesa la transacción.
- El punto de venta lee las variables de retorno de la transacción activando el método RecieveData().
- Se le el método GetResponse() el cual regresa un objeto del tipo data:
Las variables que pueden ser leídas cuando el evento GetResponse() es ejecutado, obtendrá un objeto tipo respuesta el cual contiene una propiedad idReport y otro objeto el cual contiene todas las propiedades de la venta.
idReport: Contiene el tipo de objeto que pueden ser lo siguientes:
PENDIENTE
Ejemplo de código para obtener los datos de la venta:
Dim conector As NetPayConnect.Operator
Dim ResponseData As NetPayConnect.Response
Set conector = New NetPayConnect.Operator
conector.SetAmount CDbl(Val(txtAmount.Text))
conector.SetTip CDbl(Val(txtTip.Text))
conector.SetFolio (txtFolio.Text)
conector.SetMSI (Val(cmbMsi.Text))
Text1.Text = ""
lblResult.Text = ""
Dim resultRead As String
resultRead = conector.sendData()
Set ResponseData = conector.GetResponse() if ResponseData is Nothing Then Exit Sub if ResponseData.idReport = 1 then
‘ obtiene datos de la venta
Else if ResponseData.idReport = -1 then
‘ ocurrió un error en la venta
End if
End if
Response data
Id | Nombre campo | Descripción | Tipo de dato |
---|---|---|---|
1 | affiliation | Contiene el número de afiliación asignado por el banco a una tienda el cual debe de ser impreso en el recibo de la operación. | VARCHAR2(50 BYTE) |
2 | applicationLabel | Información sobre la lectura de la tarjeta. | VARCHAR2(100 BYTE) |
3 | arqc | Contiene un criptograma que debe de ser impreso en el recibo del cliente, siempre y cuando sea leído una tarjeta de CHIP. | VARCHAR2(250 BYTE) |
4 | aid | Información sobre la lectura de la tarjeta. | VARCHAR2(50 BYTE) |
5 | amount | Monto total de la transacción con todo y propina. | NUMBER(15,2) |
6 | authCode | Valor generado por la autoridad de autorización para una transacción aprobada. | VARCHAR2(7 BYTE) |
7 | bankName | Nombre de la institución financiera emisora de la tarjeta. | VARCHAR2(250 BYTE) |
8 | cardExpDate | Fecha de expiración de la tarjeta en formato MM/YY. | VARCHAR2(5 BYTE) |
9 | cardType | Identificador de tipo de tarjeta. Débito (D), crédito (C). | VARCHAR2(20 BYTE) |
10 | cardTypeName | Representa el nombre del tipo de marca de la tarjeta, Visa, Master Card, etc. | VARCHAR2(250 BYTE) |
11 | cityName | Ciudad con la que se dio de alta el comercio. | VARCHAR2(150 BYTE) |
12 | responseCode | Contiene un código de dos posiciones que indica si una transacción fue autorizada o declinada, si el valor es 00 la transacción fue autorizada, cualquier otro valor diferente de 00 se considera como una transacción declinada. | VARCHAR2(2 BYTE) |
13 | folioNumber | Número identificador de transacción que puede ser enviado en la solicitud de venta. | VARCHAR2(250 BYTE) |
14 | hasPin | Regresa un valor booleano el cual indica si requiere firma o es por pin. | false o true |
15 | hexSign | Firma autógrafa encriptada solo en el caso de que la tarjeta no cuente con NIP. | VARCHAR2(4000 BYTE) |
16 | internalNumber | Folio interno NetPay. | VARCHAR2(20 BYTE) |
17 | isQps | Indica el monto cobrado por quick payment service | VARCHAR2(1 BYTE) |
18 | message | Mensaje que indica el estatus de la transacción. Puede indicar si esta fue aceptada o declinada y por qué motivo. Ejemplo: Aprobada, Declinada, Fondos Insuficientes. | VARCHAR2(200 BYTE) |
19 | moduleCharge | Identificador interno. | VARCHAR2(20 BYTE) |
20 | moduleLote | Identificador interno. | NUMBER (9) |
21 | customerName | Nombre del tarjeta habiente. | VARCHAR2(100 BYTE) |
22 | terminalId | Número de serie de la terminal. | VARCHAR2(20 BYTE) |
23 | orderId | Identificador de número de transacción. Puede ser utilizado posteriormente en reimpresión y cancelación. | VARCHAR2(36 BYTE) |
24 | preAuth | Pre-autorización. | NUMBER (9) |
25 | preStatus | Pre-autorización. | NUMBER(15,2) |
26 | promotion | Indica el número de meses sin intereses en que una transacción fue parcializada. | VARCHAR2(20 BYTE) |
27 | rePrintDate | Indica la versión de la aplicación. | VARCHAR2(100 BYTE) |
28 | rePrintMark | Identificador interno. | VARCHAR2(100 BYTE) |
29 | reprintModule | Identificador interno. | VARCHAR2(1 BYTE) |
30 | cardNumber | Contiene los últimos cuatro dígitos de la tarjeta que deben de ser desplegados en el recibo del cliente. | VARCHAR2(50 BYTE) |
31 | storeName | Nombre del comercio dado de alta. | VARCHAR2(60 BYTE) |
32 | streetName | Dirección del comercio dado de alta. | VARCHAR2(150 BYTE) |
33 | ticketDate | Fecha y hora de la transacción. | VARCHAR2(100 BYTE) |
34 | tipAmount | Indica el monto para propina, en caso de ser enviado. | NUMBER |
35 | tipLessAmount | Indica el monto menos propina. | NUMBER(15,2) |
36 | transDate | Fecha y hora de la transacción. | DATE |
37 | transType | Indica el tipo de operación realizada. Venta (A), Cancelación (V). | VARCHAR2(5 BYTE) |
38 | transactionCertificate | Información sobre la lectura de la tarjeta. | VARCHAR2(50 BYTE) |
4.2 Solicitud de cancelación (Refund) de transacción
Mensaje para cancelar una venta (Auth) realizada el mismo día. Solo se ocupa el parámetro orderId y se manda a llamar el método sendCancel()
Dim conector As NetPayConnect.Operator
Set conector = New NetPayConnect.Operator
conector.sendCancel(orderId)
4.3 Solicitud de Reimpresión de transacción.
Mensaje para reimprimir una venta solo se ocupa el parámetro orderId y se manda a llamar el método *sendPrint():
Dim conector As NetPayConnect.Operator
Set conector = New NetPayConnect.Operator
conector.sendPrint(orderId)
4.4 Despliegue de Puerto disponible
Se puede solicitar a dll en qué puerto está conectada la pinpad.
Dim conector As NetPayConnect.Operator
Set conector = New NetPayConnect.Operator
Dim texto As String
Texto = conector.findPortByDescription()
4.5 Mensaje de solicitud de versión
Mensaje que solicita la versión de la dll.
Dim conector As NetPayConnect.Operator
Set conector = New NetPayConnect.Operator
Dim texto As String
Texto = conector.Version()
4.6 Recibiendo Respuesta.
Forma de recibir la respuesta: Extraer información del objeto de forma manual.
textBox4.Text += System.Environment.NewLine + "Afiliacion: " + connectorPAX.getAffiliation();
textBox4.Text += System.Environment.NewLine + "ApplicationLabel: " + connectorPAX.getApplicationLabel();
textBox4.Text += System.Environment.NewLine + "ARQC: " + connectorPAX.getARQC();
textBox4.Text += System.Environment.NewLine + "AID: " + connectorPAX.getAID();
textBox4.Text += System.Environment.NewLine + "Amount: " + connectorPAX.getAmount();
textBox4.Text += System.Environment.NewLine + "AuthCode: " + connectorPAX.getAuthCode();
textBox4.Text += System.Environment.NewLine + "BankName: " + connectorPAX.getBankName();
textBox4.Text += System.Environment.NewLine + "CardExpDate: " + connectorPAX.getCardExpDate();
textBox4.Text += System.Environment.NewLine + "CardType: " + connectorPAX.getCardType();
textBox4.Text += System.Environment.NewLine + "CardTypeName: " + connectorPAX.getCardTypeName();
textBox4.Text += System.Environment.NewLine + "CityName: " + connectorPAX.getCityName();
textBox4.Text += System.Environment.NewLine + "ResponseCode: " + connectorPAX.getResponseCode();
textBox4.Text += System.Environment.NewLine + "HasPin: " + connectorPAX.getHasPin();
textBox4.Text += System.Environment.NewLine + "HexSign: " + connectorPAX.getHexSign();
textBox4.Text += System.Environment.NewLine + "IsQps: " + connectorPAX.getIsQPS();
textBox4.Text += System.Environment.NewLine + "Message: " + connectorPAX.getMessage();
textBox4.Text += System.Environment.NewLine + "ModuleCharge: " + connectorPAX.getModuleCharge();
textBox4.Text += System.Environment.NewLine + "ModuleLote: " + connectorPAX.getModuleLote();
textBox4.Text += System.Environment.NewLine + "CustomerName: " + connectorPAX.getCustomerName();
textBox4.Text += System.Environment.NewLine + "TerminalId: " + connectorPAX.getTerminalId();
textBox4.Text += System.Environment.NewLine + "OrderId: " + connectorPAX.getOrderId();
textBox4.Text += System.Environment.NewLine + "PreAuth: " + connectorPAX.getPreAuth();
textBox4.Text += System.Environment.NewLine + "PreStatus: " + connectorPAX.getPreStatus();
textBox4.Text += System.Environment.NewLine + "Promotion: " + connectorPAX.getPromotion();
textBox4.Text += System.Environment.NewLine + "RePrintDate: " + connectorPAX.getRePrintDate();
textBox4.Text += System.Environment.NewLine + "RePrintMark: " + connectorPAX.getRePrintMark();
textBox4.Text += System.Environment.NewLine + "ReprintModule: " + connectorPAX.getReprintModule();
textBox4.Text += System.Environment.NewLine + "CardNumber: " + connectorPAX.getCardNumber();
textBox4.Text += System.Environment.NewLine + "StoreName: " + connectorPAX.getStoreName();
textBox4.Text += System.Environment.NewLine + "StreetName: " + connectorPAX.getStreetName();
textBox4.Text += System.Environment.NewLine + "TicketDate: " + connectorPAX.getTicketDate();
textBox4.Text += System.Environment.NewLine + "TipAmount: " + connectorPAX.getTipAmount();
textBox4.Text += System.Environment.NewLine + "TipLessAmount: " + connectorPAX.getTipLessAmount();
textBox4.Text += System.Environment.NewLine + "TransDate: " + connectorPAX.getTransDate();
textBox4.Text += System.Environment.NewLine + "TransType: " + connectorPAX.getTransType();
textBox4.Text += System.Environment.NewLine + "TransactionCertificate: " + connectorPAX.getTransactionCertificate();
textBox4.Text += System.Environment.NewLine + "FolioId: " + connectorPAX.getFolioNumber();
Ejemplo:
Afiliacion: 7389108
ApplicationLabel: VISA CREDITO
ARQC: 103426BD75921F19
AID: A0000000031010
Amount: 10.0
AuthCode: 222222
BankName: BANORTE
CardExpDate: 01/21
CardType: C
CardTypeName: VISA
CityName: Guadalupe NUEVO LEON
ResponseCode: 00
HasPin: False
HexSign: 00000100000001DA0000009E000000040800031CFF02FF02D300A765326D2D0CBD4D9EDC98BA66222EA38BE00018815E50F59690AD9333263380FF021DF3C9146D3985ACCC16DE2FFB173F34E1A1655AEF8F1B10F2C9E5AEE831827C42DB2284F64D87CE62FF020583DCA4E7C4BD12FB3AFDFF0018647662396A7BD59338D300BBF6FCFF0083DD89FF02FF02BE8680FF02FF027CFF02C980FF02FF02FF02FF02D44BD5210821BAD6436612BCE2A5A1D47833E91135BECB91FF00A23DA163F76063C7FE139DC7A4EB00D3B60440FF024426EEF94C927D83DAE60B2F9F47682E46D1E369F3BABDE3C482E8FF022454EACA221BB3E133FCA4F7784A23FF0033BE4FB1BFF8BE6DAA84D08655C16196F452FF02FF02FF02E43E60FF02FF02E4D4FF0248FF02DE40FF02D9C680FF02B7D7E5E1DDDC393446BF26CACF9072B562F9578CDC735212BC38116AE744F32913000582A1B66919DF3BCF9009F464C60A4A4C86530280FF02307B9C9D73621860874A5065B5744EB87DEF2121F161FA96C8DFF10FDD99D354FF024B6B7D20133A6DA9F20C4EE33C88C91950043BDAB4393413F8FF02FF02FF02FF02FF02FF02FF02FF02FF02F9BE3DB62932870EC93902F01F921CDD0747E110BE1ED8A229800C8843E5C90B5FFDEEE350B7DB2C8E3FD699BC5B7D0016D316173176FF026CFD6CE500486F49A3FAFE377B717706D3CF158B7EB9D2678ED9A81E58FC2232AAC8FF0200DAC008EAAEDD90FF02FF02FF02
IsQps: 0
Message: Transacción exitosa
ModuleCharge: 37
ModuleLote: 1
CustomerName: TREJO PECINA/AGUSTIN
TerminalId: 1490293930
OrderId: 201011080753-1490293930
PreAuth: 0
PreStatus: 0
Promotion: 00
RePrintDate: 1.2.4_20201008
RePrintMark: VISA
ReprintModule: C
CardNumber: 8425
StoreName: CICAP
StreetName: AVE PABLO LIVAS 7200
TicketDate: OCT. 11, 20 08:07:53
TipAmount: 0.0
TipLessAmount: 10.0
TransDate: 2020-10-11 08:07:54.CDT
TransType: A
TransactionCertificate: B50599631D57FC5D
FolioId: 1
Updated over 3 years ago