PDA

Ver la Versión Completa : [Discusión] Comunicação com maquina de pagamento GLORY


Paulo
15 de julio de 2024, 17:58
Hola a todos.

Alguém tem experiencia de comunicar com as maquinas de receber dinheiro da GLORY ?

https://www.glory-global.com/pt-pt/products-and-services/hardware/retail-point-of-sale/ci-5/

Tenho estado a testar a comunicação com objectos da ChilKat, consigo comunicar mas não consigo obter resposta do pagamento.
A comunicação é por HTTP SOAP POST.
O codigo COBOL é adaptado do original VB.NET

Gracias




ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ReturnValue PIC 9(5).
01 XMLRESP PIC X(8196).
01 WSLOCALFILE PIC X(256).
01 ENDPOINT PIC X(1024).
01 soapAction PIC X(1024).
01 contentType PIC X(1024).
01 SOAPRESP PIC X(1024).
01 sbRequestBody PIC X(1024).
01 ERRO PIC X(1024).
PROCEDURE DIVISION.

MOVE "soapenv:Envelope" TO "Tag" OF ChilkatXml1
INVOKE ChilkatXml1 "AddAttribute" USING "xmlns:soapenv" "http://schemas.xmlsoap.org/soap/envelope/" RETURNING ReturnValue
INVOKE ChilkatXml1 "AddAttribute" USING "xmlns:bru" "http://www.glory.co.jp/bruebox.xsd" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateChildContent" USING "soapenv:Header" " "
INVOKE ChilkatXml1 "UpdateChildContent" USING "soapenv:Body|bru:ChangeRequest|bru:Id" "?"
INVOKE ChilkatXml1 "UpdateChildContent" USING "soapenv:Body|bru:ChangeRequest|bru:SeqNo" "?"
INVOKE ChilkatXml1 "UpdateChildContent" USING "soapenv:Body|bru:ChangeRequest|bru:SessionID" "?"
INVOKE ChilkatXml1 "UpdateChildContent" USING "soapenv:Body|bru:ChangeRequest|bru:Amount" 800 *> valor a pagar em centimos
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Option" 1 "bru:type" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Cash" 1 "bru:type" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Cash" 1 "bru:note_destination" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Cash" 1 "bru:coin_destination" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Cash|Denomination" 1 "bru:cc" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Cash|Denomination" 1 "bru:fv" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Cash|Denomination" 1 "bru:rev" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Cash|Denomination" 1 "bru:devid" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateChildContent" USING "soapenv:Body|bru:ChangeRequest|Cash|Denomination|b ru:Piece" "?"
INVOKE ChilkatXml1 "UpdateChildContent" USING "soapenv:Body|bru:ChangeRequest|Cash|Denomination|b ru:Status" "?"
*
INVOKE ChilkatHttp1 "SetRequestHeader" USING "Connection" "Keep-Alive"
INVOKE ChilkatHttp1 "SetRequestHeader" USING "SOAPAction" '"ChangeOperation"'
INVOKE ChilkatHttp1 "SetRequestHeader" USING "Content-Type" "text/xml;charset=UTF-8"
INVOKE ChilkatHttp1 "SetRequestHeader" USING "Accept-Encoding" "gzip,deflate"
*
INVOKE ChilkatXml1 "GetXml" RETURNING sbRequestBody
DISPLAY sbRequestBody.
*
INVOKE ChilkatStringBuilder1 "Append" USING sbRequestBody RETURNING ReturnValue
* display "Append ReturnValue " ReturnValue.


MOVE 1 TO "VerboseLogging" OF ChilkatHttpResponse1


MOVE 600 TO "ConnectTimeout" OF ChilkatHttp1.
MOVE 600 TO "ReadTimeout" OF ChilkatHttp1.



INVOKE ChilkatHttp1 "PTextSb" USING "POST" "https://192.168.0.25/axis2/services/BrueBoxService" ChilkatStringBuilder1
"utf-8" "text/xml;charset=UTF-8" 0 0 RETURNING ChilkatHttpResponse1.

IF "LastMethodSuccess" OF ChilkatHttp1 = 0
DISPLAY "ChilkatHttp1 ERRO: "
MOVE "LastErrorText" OF ChilkatHttp1 TO ERRO
DISPLAY ERRO
ELSE
DISPLAY "ChilkatHttp1 SEM ERRO"
STOP " ".
*
IF "LastMethodSuccess" OF ChilkatHttpResponse1 = 0
DISPLAY "ChilkatHttpResponse1 ERRO: "
MOVE "LastErrorText" OF ChilkatHttpResponse1 TO ERRO
DISPLAY ERRO
ELSE
DISPLAY "ChilkatHttpResponse1 SEM ERRO"
STOP " ".





stop " fez pedido, resposta :"

* MOVE "TakeResponseBody" TO "UncommonOptions" OF ChilkatHttpResponse1


* INVOKE ChilkatHttpResponse1 "GetBodySb" USING sbRequestBody RETURNING ReturnValue
* INVOKE ChilkatHttpResponse1 "GetBodyXml" USING ChilkatXml1 RETURNING ReturnValue
* display "GetBodyXml ReturnValue " ReturnValue.
* INVOKE ChilkatXml1 "GetXml" RETURNING sbRequestBody
* display "RESPOSTA "
* DISPLAY sbRequestBody.



* MOVE "StatusCode" OF ChilkatHttpResponse1 TO ReturnValue.
* DISPLAY "StatusCode " ReturnValue.



* INVOKE ChilkatHttpResponse1 "SaveBodyText" USING 1 "RESPOSTA.XML" RETURNING ReturnValue
* DISPLAY "StatusCode " ReturnValue.


* MOVE "BodyStr" OF ChilkatHttpResponse1 TO SOAPRESP.
* DISPLAY "BodyStr"
* DISPLAY SOAPRESP.

* IF "LastMethodSuccess" OF ChilkatHttpResponse1 = 0
* DISPLAY "ChilkatHttpResponse1 ERRO: "
* MOVE "LastErrorText" OF ChilkatHttpResponse1 TO XML
* DISPLAY XML
* ELSE
* DISPLAY "ChilkatHttpResponse1 SEM ERRO"
* STOP " ".




*' This example assumes the Chilkat API to have been previously unlocked.
*' See Global Unlock Sample for sample code.

*Dim http As New Chilkat.Http
*Dim success As Boolean

*' Use this online tool to generate code from sample XML: Generate Code to Create XML

*' The following XML is sent in the request body.

*' <?xml version="1.0" encoding="utf-8"?>
*' <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bru="http://www.glory.co.jp/bruebox.xsd">
*' <soapenv:Header/>
*' <soapenv:Body>
*' <bru:ChangeRequest>
*' <bru:Id>?</bru:Id>
*' <bru:SeqNo>?</bru:SeqNo>
*' <bru:SessionID>?</bru:SessionID>
*' <bru:Amount>600</bru:Amount>
*' <Option bru:type="?"/>
*' <Cash bru:type="?" bru:note_destination="?" bru:coin_destination="?">
*' <Denomination bru:cc="?" bru:fv="?" bru:rev="?" bru:devid="?">
*' <bru:Piece>?</bru:Piece>
*' <bru:Status>?</bru:Status>
*' </Denomination>
*' </Cash>
*' </bru:ChangeRequest>
*' </soapenv:Body>
*' </soapenv:Envelope>
*'

*Dim xml As New Chilkat.Xml
*xml.Tag = "soapenv:Envelope"
*xml.AddAttribute("xmlns:soapenv","http://schemas.xmlsoap.org/soap/envelope/")
*xml.AddAttribute("xmlns:bru","http://www.glory.co.jp/bruebox.xsd")
*xml.UpdateChildContent("soapenv:Header","")
*xml.UpdateChildContent("soapenv:Body|bru:ChangeRequest|bru:Id","?")
*xml.UpdateChildContent("soapenv:Body|bru:ChangeRequest|bru:SeqNo","?")
*xml.UpdateChildContent("soapenv:Body|bru:ChangeRequest|bru:SessionID","?")
*xml.UpdateChildContentInt("soapenv:Body|bru:ChangeRequest|bru:Amount",600)
*xml.UpdateAttrAt("soapenv:Body|bru:ChangeRequest|Option",True,"bru:type","?")
*xml.UpdateAttrAt("soapenv:Body|bru:ChangeRequest|Cash",True,"bru:type","?")
*xml.UpdateAttrAt("soapenv:Body|bru:ChangeRequest|Cash",True,"bru:note_destination","?")
*xml.UpdateAttrAt("soapenv:Body|bru:ChangeRequest|Cash",True,"bru:coin_destination","?")
*xml.UpdateAttrAt("soapenv:Body|bru:ChangeRequest|Cash|Denomination",True,"bru:cc","?")
*xml.UpdateAttrAt("soapenv:Body|bru:ChangeRequest|Cash|Denomination",True,"bru:fv","?")
*xml.UpdateAttrAt("soapenv:Body|bru:ChangeRequest|Cash|Denomination",True,"bru:rev","?")
*xml.UpdateAttrAt("soapenv:Body|bru:ChangeRequest|Cash|Denomination",True,"bru:devid","?")
*xml.UpdateChildContent("soapenv:Body|bru:ChangeRequest|Cash|Denomination|b ru:Piece","?")
*xml.UpdateChildContent("soapenv:Body|bru:ChangeRequest|Cash|Denomination|b ru:Status","?")

*http.SetRequestHeader("Host","www.chilkatsoft.com")
*http.SetRequestHeader("Connection","Keep-Alive")
*http.SetRequestHeader("SOAPAction","""ChangeOperation""")
*http.SetRequestHeader("Content-Type","text/xml;charset=UTF-8")
*http.SetRequestHeader("Accept-Encoding","gzip,deflate")
*http.SetRequestHeader("User-Agent","Apache-HttpClient/4.5.5 (Java/16.0.2)")

*Dim sbRequestBody As New Chilkat.StringBuilder
*xml.GetXmlSb(sbRequestBody)

*Dim resp As Chilkat.HttpResponse = http.PTextSb("POST","https://example.com/replace_this_with_actual_path",sbRequestBody,"utf-8","text/xml;charset=UTF-8",False,False)
*If (http.LastMethodSuccess = False) Then
* Debug.WriteLine(http.LastErrorText)
* Exit Sub
*End If


*Debug.WriteLine(resp.StatusCode)
*Debug.WriteLine(resp.BodyStr)

fastpho
15 de julio de 2024, 20:00
Hola @Paulo ChilkatHttp , esa libreria es de pago ... https://www.chilkatsoft.com/refdoc/xChilkatHttpRef.html#prop29
Deberias reemplezar la libreria esa por

01 WINHTTP PIC X ( 128 ) VALOR "WinHttp.WinHttpRequest.5.1" .

y despues si usas ChilkatXml1 que es free
Saludos..

Paulo
15 de julio de 2024, 20:19
Hola fastpho.
Obrigado pela resposta.
Eu tenho a chave da licença para esta library, e no faço o unlock dela logo no inicio.
Consigo comunicar com a maquina e pagar, mas não consigo obter a resposta.
Já tentei com o WinHttp.WinHttpRequest.5.1 mas nem consigo comunicar.
Gracias

Paulo
17 de julio de 2024, 10:37
Hola a todos.
Fiz outra rotina usando comunicação por WinHttp.WinHttpRequest.5.1, não consigo comunicar com o endpoint.
Aparentemente falta a autenticação, mas na verdade não existe qualquer autenticação, por isso algo devo estar a configurar errado.
Anexo o erro e o codigo.
Se alguem me puder ajudar, agradeço.

Gracias


ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WINHTTP PIC X(128) VALUE "WinHttp.WinHttpRequest.5.1".

01 xTraffic-Conditions PIC X(1024).

01 WEBSERVICE USAGE OBJECT REFERENCE COM.

01 METODO PIC X(256) VALUE "POST".
01 ENDPOINT PIC X(256) VALUE "https://192.168.0.25/axis2/services/BrueBoxService".
01 LIGACAO PIC X(256) VALUE "FALSE". *> comunicação -> True = asyn / False = sync
*
01 OP11 PIC X(256) VALUE "Connection" .
01 OP12 PIC X(256) VALUE "Keep-Alive".
01 OP21 PIC X(256) VALUE "SOAPAction" .
01 OP22 PIC X(256) VALUE "ChangeOperation".
01 OP31 PIC X(256) VALUE "Content-Type" .
01 OP32 PIC X(256) VALUE "text/xml;charset=UTF-8".
01 OP41 PIC X(256) VALUE "Accept-Encoding" .
01 OP42 PIC X(256) VALUE "gzip,deflate".
* 01 OP51 PIC X(256) VALUE "Authorization" .
* 01 OP52 PIC X(256) VALUE "Basic user:123".
01 OP99 PIC X(256) VALUE SPACES.

01 RESPOSTA PIC X(8192).

01 resultado1 PIC X(5).
01 resultado2 PIC X(5).

01 long pic 9(5).

01 WSVALOR PIC 9(06).
01 wsvaleur pic 9(4)v99.
01 wsvalcent pic 9(6).

PROCEDURE DIVISION.
MAIN SECTION.
MAIN-00.

MOVE "TEXT" OF CmPrcVenda TO wsvaleur.
IF wsvaleur = ZERO
MOVE 8 TO "TEXT" OF CmPrcVenda
MOVE 8 TO wsvaleur.
compute wsvalcent = wsvaleur * 100.
MOVE wsvalcent TO "CAPTION" OF CmFrValLinha.

MOVE wsvalcent TO WSVALOR.

MOVE POW-TRUE TO "EmitCompact" OF ChilkatXml1. *> PARA NÃO TER CR/LF NO XML

MOVE "soapenv:Envelope" TO "Tag" OF ChilkatXml1
INVOKE ChilkatXml1 "AddAttribute" USING "xmlns:soapenv" "http://schemas.xmlsoap.org/soap/envelope/" RETURNING ReturnValue
INVOKE ChilkatXml1 "AddAttribute" USING "xmlns:bru" "http://www.glory.co.jp/bruebox.xsd" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateChildContent" USING "soapenv:Header" " "
INVOKE ChilkatXml1 "UpdateChildContent" USING "soapenv:Body|bru:ChangeRequest|bru:Id" "?"
INVOKE ChilkatXml1 "UpdateChildContent" USING "soapenv:Body|bru:ChangeRequest|bru:SeqNo" "?"
INVOKE ChilkatXml1 "UpdateChildContent" USING "soapenv:Body|bru:ChangeRequest|bru:SessionID" "?"
INVOKE ChilkatXml1 "UpdateChildContent" USING "soapenv:Body|bru:ChangeRequest|bru:Amount" WSVALOR *> valor a pagar em centimos
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Option" 1 "bru:type" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Cash" 1 "bru:type" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Cash" 1 "bru:note_destination" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Cash" 1 "bru:coin_destination" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Cash|Denomination" 1 "bru:cc" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Cash|Denomination" 1 "bru:fv" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Cash|Denomination" 1 "bru:rev" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateAttrAt" USING "soapenv:Body|bru:ChangeRequest|Cash|Denomination" 1 "bru:devid" "?" RETURNING ReturnValue
INVOKE ChilkatXml1 "UpdateChildContent" USING "soapenv:Body|bru:ChangeRequest|Cash|Denomination|b ru:Piece" "?"
INVOKE ChilkatXml1 "UpdateChildContent" USING "soapenv:Body|bru:ChangeRequest|Cash|Denomination|b ru:Status" "?"


INVOKE ChilkatXml1 "GetXml" RETURNING xTraffic-Conditions

display xTraffic-Conditions


STOP " VAI FAZER CREATE OBJECT"

INVOKE COM "CREATE-OBJECT" USING WINHTTP RETURNING WEBSERVICE.


STOP " VAI FAZER WEBSERVICE OPEN"

INVOKE WEBSERVICE "OPEN" USING METODO ENDPOINT LIGACAO.
*
INVOKE WEBSERVICE "SetRequestHeader" USING OP11 OP12
INVOKE WEBSERVICE "SetRequestHeader" USING OP21 OP22
INVOKE WEBSERVICE "SetRequestHeader" USING OP31 OP32
INVOKE WEBSERVICE "SetRequestHeader" USING OP41 OP42
* INVOKE WEBSERVICE "SetRequestHeader" USING OP51 OP52
*

STOP " VAI FAZER WEBSERVICE send".

INVOKE WEBSERVICE "send" USING xTraffic-Conditions.



STOP " VAI FAZER WEBSERVICE get-Responsetext"

INVOKE WEBSERVICE "get-Responsetext" RETURNING RESPOSTA.

display RESPOSTA.



EXIT PROGRAM

Fito
17 de julio de 2024, 19:35
Hola:

Deberías probar primero con Postman para ir viendo paso a paso las respuestas. Una vez que lograste tu cometido, recién pasar a Cobol.

He estado renegando con Apis y Webservice y fue la única manera de poder encontrar las soluciones.

Saludos...

Fito...

--- Tradutor do Google ---
Olá:

Você deve experimentar o Postman primeiro para ver as respostas passo a passo. Depois de atingir seu objetivo, basta passar para o Cobol.

Tenho reclamado da Apis e do Webservice e era a única forma de encontrar soluções.

Saudações...

Fito...

Paulo
17 de julio de 2024, 20:19
Gracias Fito.
Vou tentar.