// http://fivewin.com.br/index.php?/topic/28283-integra%C3%A7%C3%A3o-com-web/
// http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=19989&start=15
/*
Function Main()
Local oShell
oShell := CreateObject( "WScript.Shell" )
oShell:run("chrome.exe https://api.whatsapp.com/send?phone=34666666666" )
Sleep(1500)
oShell:sendkeys("{tab}{tab}")
oShell:SendKeys("~")
Sleep(5000)
oShell:sendkeys("Mensaje de prueba")
oShell:SendKeys("~")
Return nil
*/
// ó:
#Include "FiveWin.ch"
FUNCTION EXEMPLO_API_WHATS()
LOCAL oWhats := TWhatsappAPI_WTS():New()
oWhats:Situacao()
oWhats:NivelBateria()
oWhats:NrConectado()
oWhats:EnviarMsg( '5567992354872', 'Teste *mensagem*' )
oWhats:EnviarMsg( '5567992354872', NIL, 'd:\documento.pdf' ) ; Inkey( 2 ) // PAUSAR UNS 2 SEGUNDOS ENTRE UMA MENSAGEM E OUTRA
oWhats:EnviarMsg( '5567992354872', NIL, 'd:\imagem.png' ) ; Inkey( 2 )
oWhats:End()
Quit()
RETURN NIL
// *******************************************************************************
#define httpGet 1
#define httpPost 2
// *******************************************************************************
CLASS TWhatsappAPI_WTS
DATA sToken INIT 'O TOKEN Q VC ADQUIRIR OU PEDE PRO HENDELL PRA TESTES'
DATA sEndPoint INIT 'URL DO ENDPOINT Q ELE FORNECE PRA TESTES QDO VC TIVER O SEU SERA O SEU URL, VC NAO USA ESTRUTURA DELE E SIM A SUA'
DATA sRet INIT ''
DATA hHash INIT hb_Hash()
DATA nMetodo INIT 0 // 1 GET 2 POST
METHOD ComunicaAPI()
METHOD Situacao()
METHOD Obter_QRCode()
METHOD NrConectado()
METHOD NivelBateria()
METHOD EnviarMsg()
METHOD MostraRetorno() INLINE PTAlert( 'Codigo..:;' + PadC( hb_CStr( ::hHash[ 'codigo' ], 70 ) ) + ';' + ;
'Mensagem:;' + PadC( Upper( AllTrim( hb_UTF8ToStr( hb_CStr( ::hHash[ 'mensagem' ] ) ) ) ), 70 ) + ';' + ;
'Retorno.:;' + PadC( hb_CStr( ::hHash[ 'retorno' ], 70 ) ), aOk, vcroxo )
// METHOD WhatsAPI_SetarWebhook() // PRA LER O RETORNO DAS MENSAGENS, ESSA PARTE NAO FIZ AINDA.
METHOD End() INLINE Self := Nil
ENDCLASS
// ******************************************************************************
METHOD Situacao() CLASS TWhatsappAPI_WTS
Mensag( "Consultando situacao da API..." )
::ComunicaAPI( "/whatsapp/situacao", httpGet )
IF 'false' $ ::hHash[ 'retorno' ]
MsgInfo( "Nao conectado. Obtenha QRCode", 'Atenção' )
ELSE
MsgInfo( "Whatsapp ja esta conectado.", 'Atenção' )
ENDIF
RETURN
// ******************************************************************************
METHOD NivelBateria() CLASS TWhatsappAPI_WTS
Mensag( "Consultando nivel bateria" )
::ComunicaAPI( "/whatsapp/bateria", httpGet )
::MostraRetorno()
// ******************************************************************************
METHOD NrConectado() CLASS TWhatsappAPI_WTS
Mensag( "Consultando Nr Conectado API..." )
::ComunicaAPI( "/whatsapp/meunumero", httpGet )
::MostraRetorno()
RETURN
// *******************************************************************************
METHOD EnviarMsg( sContato, sMsg, sFilename ) CLASS TWhatsappAPI_WTS
LOCAL sURL
DEFAULT sMsg TO ''
DEFAULT sFilename TO ''
IF Empty( sFilename ) .AND. Empty( sMsg )
Alert( 'falta parametro' )
RETURN
ENDIF
IF Empty( sFilename )
Mensag( "Enviando mensagem de texto..." )
sURL := "/whatsapp/msg"
ELSE
Mensag( "Enviando arquivo..." )
sURL := "/whatsapp/arquivo"
ENDIF
::ComunicaAPI( sURL, httpPost, sContato, sMsg, sFilename )
::MostraRetorno()
// *******************************************************************************
PROCEDURE Obter_QRCode() CLASS TWhatsappAPI_WTS
Mensag( "Obtendo QRCode..." )
::ComunicaAPIWhats( '/whatsapp/qrcode', httpGet )
// ATENۂO O RETORNO AKI RETORNADO O QRCODE EM Q VC TEM Q CARREGAR UM OBJETO GRAFICO ATRAVES DE UMA LIB GRAFICA FIVEWIN, XAILER, MINIGUI, HWGUI ETC
// If 'obtido com sucesso' $ ::hHash['mensagem']
// AKI CARREGA O OBJETO GRAFICO NA LIB Q VC USAR ::hHash['retorno'], { 20,20,-20,-20 }, "QR-CODE"
// Else
// MsgInfo( "O Whatsapp esta reiniciando. Favor repetir a operação.", 'Atenção' )
// EndIf
RETURN
// ------------------------------------------------------------------------------*
METHOD ComunicaAPI( sURL, nMetodo, sContato, sMsg, sFilename ) CLASS TWhatsappAPI_WTS
LOCAL cMetodo, oWeb, sContent := ''
TRY
oWeb := CreateObject( 'MSXML2.ServerXMLHTTP.6.0' )
CATCH
oWeb := CreateObject( 'MSXML2.XMLHTTP' )
END
IF Empty( sContato ) .AND. nMetodo = httpPost
Alert( "Falta telefone" )
RETURN NIL
ENDIF
sURL := ::sEndPoint + sURL
cMetodo := iif( nMetodo == httpGet, 'GET', 'POST' )
oWeb:Open( cMetodo, sUrl, .F. ) // True = pra vir o ResponseBody
oWeb:SetRequestHeader( 'token', ::sToken )
IF nMetodo = httpPost
oWeb:setRequestHeader( "contato", sContato )
IF ! Empty( sFilename )
oWeb:setRequestHeader( "filename", SubStr( AllTrim( CharRem( "[<(-)>]*&@:", sFileName ) ), 2 ) )
oWeb:setRequestHeader( "caption", SubStr( AllTrim( CharRem( "[<(-)>]*&@:", sFileName ) ), 2 ) )
sContent = hb_MemoRead( sFileName )
sContent = hb_base64Encode( sContent )
sContent = hb_StrToUTF8( sContent )
sContent = AllTrim( CharRem( CRLF, sContent ) )
ELSE
IF .NOT. EMPTY(sMsg)
sContent = sMsg
ENDIF
END
oWeb:setRequestHeader( "Content-Type", "text/plain; charset=UTF-8" )
END
TRY
IF EMPTY(sContent)
oWeb:Send( )
ELSE
oWeb:Send( sContent )
ENDIF
::sRet := oWeb:ResponseBody()
hb_jsondecode( ::sRet, @::hHash )
CATCH ; END
RETURN NIL
Regards, saludos.