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).

1206

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.

1175

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.

532 517 525

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):

CampoDescripció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:

  1. El punto de venta asigna los parámetros necesarios, SetAmount.
  2. El punto de venta ejecuta el método SendData().
  3. 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.
  4. Al recibir los datos de la tarjeta del PinPad procesa la transacción.
  5. El punto de venta lee las variables de retorno de la transacción activando el método RecieveData().
  6. 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

IdNombre campoDescripciónTipo de dato
1affiliationContiene 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)
2applicationLabelInformación sobre la lectura de la tarjeta.VARCHAR2(100 BYTE)
3arqcContiene 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)
4aidInformación sobre la lectura de la tarjeta.VARCHAR2(50 BYTE)
5amountMonto total de la transacción con todo y propina.NUMBER(15,2)
6authCodeValor generado por la autoridad de autorización para una transacción aprobada.VARCHAR2(7 BYTE)
7bankNameNombre de la institución financiera emisora de la tarjeta.VARCHAR2(250 BYTE)
8cardExpDateFecha de expiración de la tarjeta en formato MM/YY.VARCHAR2(5 BYTE)
9cardTypeIdentificador de tipo de tarjeta. Débito (D), crédito (C).VARCHAR2(20 BYTE)
10cardTypeNameRepresenta el nombre del tipo de marca de la tarjeta, Visa, Master Card, etc.VARCHAR2(250 BYTE)
11cityNameCiudad con la que se dio de alta el comercio.VARCHAR2(150 BYTE)
12responseCodeContiene 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)
13folioNumberNúmero identificador de transacción que puede ser enviado en la solicitud de venta.VARCHAR2(250 BYTE)
14hasPinRegresa un valor booleano el cual indica si requiere firma o es por pin.false o true
15hexSignFirma autógrafa encriptada solo en el caso de que la tarjeta no cuente con NIP.VARCHAR2(4000 BYTE)
16internalNumberFolio interno NetPay.VARCHAR2(20 BYTE)
17isQpsIndica el monto cobrado por quick payment serviceVARCHAR2(1 BYTE)
18messageMensaje 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)
19moduleChargeIdentificador interno.VARCHAR2(20 BYTE)
20moduleLoteIdentificador interno.NUMBER (9)
21customerNameNombre del tarjeta habiente.VARCHAR2(100 BYTE)
22terminalIdNúmero de serie de la terminal.VARCHAR2(20 BYTE)
23orderIdIdentificador de número de transacción. Puede ser utilizado posteriormente en reimpresión y cancelación.VARCHAR2(36 BYTE)
24preAuthPre-autorización.NUMBER (9)
25preStatusPre-autorización.NUMBER(15,2)
26promotionIndica el número de meses sin intereses en que una transacción fue parcializada.VARCHAR2(20 BYTE)
27rePrintDateIndica la versión de la aplicación.VARCHAR2(100 BYTE)
28rePrintMarkIdentificador interno.VARCHAR2(100 BYTE)
29reprintModuleIdentificador interno.VARCHAR2(1 BYTE)
30cardNumberContiene los últimos cuatro dígitos de la tarjeta que deben de ser desplegados en el recibo del cliente.VARCHAR2(50 BYTE)
31storeNameNombre del comercio dado de alta.VARCHAR2(60 BYTE)
32streetNameDirección del comercio dado de alta.VARCHAR2(150 BYTE)
33ticketDateFecha y hora de la transacción.VARCHAR2(100 BYTE)
34tipAmountIndica el monto para propina, en caso de ser enviado.NUMBER
35tipLessAmountIndica el monto menos propina.NUMBER(15,2)
36transDateFecha y hora de la transacción.DATE
37transTypeIndica el tipo de operación realizada. Venta (A), Cancelación (V).VARCHAR2(5 BYTE)
38transactionCertificateInformació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