Enviando mensajes de WhatsApp

Re: Enviando mensajes de WhatsApp

Postby Antonio Linares » Thu Aug 16, 2012 1:32 pm

Manuel,

Escribo desde el iphone, has podido probar el metodo Message() ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Enviando mensajes de WhatsApp

Postby mastintin » Thu Aug 16, 2012 2:00 pm

No solo es un "prototipo" , para ir quitando código , nos faltan algunas funciones como la funcion pack() , unpack() , hex2str() ,etc.
He encontrado el codigo fuente de las funciones pack y unpack de php , pero me pierdo un poco ...
He añadido algunas funciones que nos faltaban pero aun falta las principales.
Saludos.
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Enviando mensajes de WhatsApp

Postby Daniel Garcia-Gil » Thu Aug 16, 2012 4:02 pm

Aqui tengo una actualizacion que incluye informcion de la cuenta y el metodo Message, el problema es que no envia mensajes, no se porque, igual me sucede con el codigo original de PHP

Code: Select all  Expand view

#include "FiveWin.ch"
#include "hbsocket.ch"


function Main()

   local oWA := HB_WhatsApp():New( "tu codigo de pais y tu numero", hb_md5( StrRev( "tu IMEI" ) ), "tu nickname" )

   oWA:Connect()
   oWA:Login()
   ? oWA:cAccount_status, oWA:cAccount_kind, oWA:cAccount_creation, oWA:cAccount_expiration
   oWA:Message( Str( TS2Num() ), "codigo de pais y numero a enviar", "testing" )

return nil


CLASS HB_WhatsApp
   DATA  cAccount_status, cAccount_kind, cAccount_creation, cAccount_expiration
   DATA  cNumber, cPassword, cNickname
   DATA  pSocket
   DATA  cServer INIT "s.whatsapp.net"
   DATA  cHost   INIT "bin-short.whatsapp.net"
   DATA  cRealm  INIT "s.whatsapp.net"
   DATA  nPort   INIT 5222
   DATA  cIP
   DATA  cQop    INIT "auth"
   DATA  cDigest_Uri INIT "xmpp/s.whatsapp.net"
   DATA  aResArray
   DATA  cMsg
   DATA  _Incomplete_message

   METHOD New( cNumber, cPassword, cNickname )
   METHOD Connect()
   METHOD Login()
   METHOD Message(cMmsgid,cTo,cTtxt)
   METHOD Read()
   METHOD Send( cData )

   METHOD _Authenticate( cNonce, cNC )
   METHOD _Identify( cStr )
   METHOD _Is_Full_Msg( cStr )
   METHOD parse_account_info( msg )

   DESTRUCTOR Destroy()

ENDCLASS

METHOD New( cNumber, cPassword, cNickname ) CLASS HB_WhatsApp

   ::cIP = hb_socketGetHosts( ::cHost )[ 1 ]
   ::pSocket = hb_socketOpen()

   ::cNumber   = cNumber
   ::cPassword = cPassword
   ::cNickname = cNickname

return self

METHOD Connect() CLASS HB_WhatsApp

return hb_socketConnect( ::pSocket, { HB_SOCKET_AF_INET, ::cIP, ::nPort } )

static function StrToHex( cStr )

   local n, cHex := ""
   
   for n = 1 to Len( cStr )
      cHex += "0x" + PadL( hb_NumToHex( Asc( SubStr( cStr, n, 1 ) ) ), "0", 2 )
      if n < Len( cStr )
         cHex += ", "
      endif  
   next
   
return cHex        

static function random_uuid()

return hb_strformat( "%04x%04x-%04x-%04x-%04x-%04x%04x%04x",;
                     hb_Random( 0, 0xffff ), hb_Random( 0, 0xffff ),;
                     hb_Random( 0, 0xffff ),;
                     hb_BitOr( hb_Random( 0, 0x0fff ), 0x4000 ),;
                     hb_BitOr( hb_Random( 0, 0x3fff ), 0x8000 ),;
                     hb_Random( 0, 0xffff ), hb_Random( 0, 0xffff ), hb_Random( 0, 0xffff ) )
             
METHOD Login() CLASS HB_WhatsApp

   local cBuffer, cResponse, aArrResponse, hAuthData, cValue, aResData, cResData

   ::Send( "WA" + Chr( 0x01 ) + Chr( 0 ) + Chr( 0 ) + ;
             Chr( 0x19 ) + Chr( 0xF8 ) + Chr( 0x05 ) + Chr( 0x01 ) + ;
             Chr( 0xA0 ) + Chr( 0x8A ) + Chr( 0x84 ) + Chr( 0xFC ) + ;
             Chr( 0x11 ) + "iPhone-2.6.9-5222" + ;
             Chr( 0 ) + Chr( 0x08 ) + Chr( 0xF8 ) + Chr( 0x02 ) + ;
             Chr( 0x96 ) + Chr( 0xF8 ) + Chr( 0x01 ) + Chr( 0xF8 ) + ;
             Chr( 0x01 ) + Chr( 0x7E ) + Chr( 0 ) + Chr( 0x07 ) + Chr( 0xF8 ) + ;
             Chr( 0x05 ) + Chr( 0x0F ) + Chr( 0x5A ) + Chr( 0x2A ) + ;
             Chr( 0xBD ) + Chr( 0xA7 ) )

   cBuffer = ::Read()
   cResponse = hb_base64decode( SubStr( cBuffer, 27 ) )
   aArrResponse = HB_ATokens( cResponse, "," )
   hAuthData = {=>}
   
   for each cValue in aArrResponse
      aResData = hb_ATokens( cValue, "=" )
      hAuthData[ aResData[ 1 ] ] = StrTran( aResData[ 2 ], '"', "" )
   next    
   
   cResData = ::_Authenticate( hAuthData[ "nonce" ] )
   cResponse = Chr( 0x01 ) + Chr( 0x31 ) + Chr( 0xF8 ) + Chr( 0x04 ) + Chr( 0x86 ) + ;
               Chr( 0xBD ) + Chr( 0xA7 ) + Chr( 0xFD ) + Chr( 0 ) + Chr( 1 ) + Chr( 0x28 ) + ;
               hb_base64encode( cResData )
   ::Send( cResponse )
   cBuffer = ::Read()
   ::Read()
   cResponse = Chr( 0 ) + Chr( 8 + Len( ::cNickname ) ) + Chr( 0xF8 ) + Chr( 5 ) + Chr( 0x74 ) + ;
               Chr( 0xA2 ) + Chr( 0xA3 ) + Chr( 0x61 ) + Chr( 0xFC ) + Chr( Len( ::cNickName ) ) + ;
               ::cNickName + Chr( 0 ) + Chr( 0x15 ) + Chr( 0xF8 ) + Chr( 6 ) + Chr( 0x48 ) + ;
               Chr( 0x43 ) + Chr( 5 ) + Chr( 0xA2 ) + Chr( 0x3A ) + Chr( 0xF8 ) + Chr( 1 ) + ;
               Chr( 0xF8 ) + Chr( 4 ) + Chr( 0x7B ) + Chr( 0xBD ) + Chr( 0x4D ) + Chr( 0xF8 ) + ;
               Chr( 1 ) + Chr( 0xF8 ) + Chr( 3 ) + Chr( 0x55 ) + Chr( 0x61 ) + Chr( 0x24 ) + ;
               Chr( 0 ) + Chr( 0x12 ) + Chr( 0xF8 ) + Chr( 8 ) + Chr( 0x48 ) + Chr( 0x43 ) + ;
               Chr( 0xFC ) + Chr( 1 ) + Chr( 0x32 ) + Chr( 0xA2 ) + Chr( 0x3A ) + Chr( 0xA0 ) + ;
               Chr( 0x8A ) + Chr( 0xF8 ) + Chr( 1 ) + Chr( 0xF8 ) + Chr( 3 ) + Chr( 0x1F ) + ;
               Chr( 0xBD ) + Chr( 0xB1 )
        ::Send( cResponse )
        ::Read()    
   
return nil

METHOD _Authenticate( cNonce, cNC ) CLASS HB_WhatsApp

   local cCNonce := random_uuid()
   local cA1 := hb_StrFormat( "%s:%s:%s", ::cNumber, ::cServer, ::cPassword )
   local cA2, cPassword

   if cNC == nil
      cNC = "00000001"
   endif
   
   cA1 = pack_h32( hb_md5( cA1 ) ) + ":" + cNonce + ":" + cCNonce  
   cA2 = "AUTHENTICATE:" + ::cDigest_Uri
   cPassword = hb_md5( cA1 ) + ":" + cNonce + ":" + cNC + ":" + cCNonce + ":" + ::cQop + ;
               ":" + hb_md5( cA2 )
   cPassword = hb_md5( cPassword )            
   
return hb_StrFormat( 'username="%s",realm="%s",nonce="%s",cnonce="%s",nc=%s,qop=%s,digest-uri="%s",response=%s,charset=utf-8',;
                     ::cNumber, ::cRealm, cNonce, cCnonce, cNC, ::cQop, ::cDigest_Uri, cPassword )  
 
 


METHOD Message( cMsgid, cTo, cTxt ) CLASS HB_WhatsApp
   local lLong_txt_bool := isShort( cTxt )
   local cStream , cMsg
   local cTo_length
   local cMsgid_length
   local cTotal_length
   
   cTo_length = Chr( Len( cTo ) )
   cMsgid_length = Chr( Len( cMsgid ) )
   cTxt_length = Chr( Len( cTxt ) )
   
   cContent = Chr( 0xF8 ) + Chr( 0x08 ) + Chr( 0x5D ) + Chr( 0xA0 ) + Chr( 0xFA ) + Chr( 0xFC ) + cTo_length
   cContent += cTo
   cContent += Chr( 0x8A ) + Chr( 0xA2 ) + Chr( 0x1B ) + Chr( 0x43 ) + Chr( 0xFC ) + cMsgid_length
   cContent += cMsgid
   cContent += Chr( 0xF8 ) + Chr( 0x02 ) + Chr( 0xF8 ) + Chr( 0x04 ) + Chr( 0xBA ) + Chr( 0xBD ) + Chr( 0x4F) + ;
               Chr( 0xF8 ) + Chr( 0x01 ) + Chr( 0xF8 ) + Chr( 0x01 ) + Chr( 0x8C ) + Chr( 0xF8 ) + Chr( 0x02 ) + Chr( 0x16 )


   if ! lLong_txt_bool
      cContent += Chr( 0xFD ) + Chr( 0 ) + cTxt_length
   else
      cContent += Chr( 0xFC ) + cTxt_length
   endif
 
   cContent += cTxt
 
   cTotal_length = Chr( Len( cContent ) )
   
   if Len( cTotal_length ) == 1
      cTotal_length = Chr( 0 ) + cTotal_length
   endif
   
   cMsg := cTotal_length + cContent
   
   cStream := ::Send(cMsg)
   ::Read()
   ::Read()
   ::Read()
       
Return nil
 
       
METHOD Read() CLASS HB_WhatsApp

   local cBuffer := Space( 1024 ), cV, cRcvdType
   local nLen := hb_socketRecv( ::pSocket, @cBuffer )

   cBuffer = SubStr( cBuffer, 1, nLen )
   ::aResArray = HB_ATokens( cBuffer, Chr( 0 ) )
   // ? StrToHex( cBuffer )
   
   for each cV in ::aResArray
      cRcvdType = ::_Identify( cV )

      // ? cRcvdType
      // ? StrToHex( cV )

      do case
         case cRcvdType == "incomplete_msg"
              ::_incomplete_message = cV

         case cRcvdType == "msg"
              ::cMsg = ::parse_received_message( cV )
         
         case cRcvdType == "account_info"
              ::parse_account_info( cV )

         case cRcvdType == "last_seen"
              ::lastseen = ::parse_last_seen( cV )
      endcase
   next

return cBuffer
   
METHOD parse_account_info( cMsg )
   local nAcst, nActkind
   local x := { => }
   local nCreation_timstamp_len, nExpr_length
   
    cMsg = SubStr( cMsg, 4 )        // Remove Length,F8,second length
    cMsg = SubStr( cMsg, 5 )        // Remove Success XML
    // Next should be status
    nAcst = Asc( SubStr( cMsg, 1, 1 ) ) 
    if nAcst == 0x09
       ::cAccount_status = 'active'
    else
       ::cAccount_status = 'inactive'
    endif
    cMsg = SubStr( cMsg, 3 )        // Remove status & KIND XML
    nActkind = Asc( SubStr( cMsg, 1, 1 ) )
    if nActkind == 0x37
       ::cAccount_kind = 'free'
    else
       ::cAccount_kind = 'paid'
    endif
    cMsg = SubStr( cMsg, 4 )        // Remove XML
    nCreation_timstamp_len = Asc( SubStr( cMsg, 1, 1 ) ) // Should return 10 for the next few thousdands years
    cMsg = SubStr( cMsg, 2 )        // Remove Length
    ::cAccount_creation := Num2TS( Val( SubStr( cMsg, 1, nCreation_timstamp_len ) ) )
    cMsg = SubStr( cMsg, nCreation_timstamp_len + 1 )       // Remove Timestamp
    cMsg = SubStr( cMsg, 3 )        // Remove Expiration XML
    nExpr_length = Asc( SubStr( cMsg, 1, 1 ) ) // Should also be 10
    cMsg = SubStr( cMsg, 2 )        // Remove Length
    ::cAccount_expiration := Num2TS( Val( SubStr( cMsg, 1, nExpr_length ) ) )

return nil


METHOD Send( cData ) CLASS HB_WhatsApp

return hb_socketSend( ::pSocket, cData )

static function StartsWith( cStr, cCompare, nPos )

return SubStr( cStr, nPos, Len( cCompare ) ) == cCompare

static function EndsWith( cStr, cCompare )

return Right( cStr, Len( cCompare ) ) == cCompare

METHOD _Identify( cStr ) CLASS HB_WhatsApp

   local cMsg_identifier := Chr( 0x5D ) + Chr( 0x38 ) + Chr( 0xFA ) + Chr( 0xFC )
   local cServer_delivery_identifier := Chr( 0x8C ) 
   local cClient_delivery_identifier := Chr( 0x7F ) + Chr( 0xBD ) + Chr( 0xAD )
   local cAcc_info_iden := Chr( 0x99 ) + Chr( 0xBD ) + Chr( 0xA7 ) + Chr( 0x94 )   
   local cLast_seen_ident := Chr( 0x48 ) + Chr( 0x38 ) + Chr( 0xFA ) + Chr( 0xFC )
   local cLast_seen_ident2 := Chr( 0x7B ) + Chr( 0xBD ) + Chr( 0x4C ) + Chr( 0x8B )
   
   if ! ::_is_full_msg( cStr )
      return "incomplete_msg"

   elseif StartsWith( cStr, cMsg_identifier, 4 )

      if EndsWith( cStr, cServer_delivery_identifier )
         return "server_delivery_report"

      elseif EndsWith( cStr, cClient_delivery_identifier )
         return "client_delivery_report"

      else
         return "msg"

      endif

   elseif StartsWith( cStr, cAcc_info_iden, 4 )
      return "account_info"

   elseif StartsWith( cStr, cLast_seen_ident, 4 ) .and. cLast_seen_ident2 $ cStr
      return "last_seen"
   
   else
      return "other"

   endif

return nil

METHOD _Is_Full_Msg( cStr ) CLASS HB_WhatsApp

return Len( cStr ) == Asc( Left( cStr, 1 ) ) + 1

METHOD Destroy() CLASS HB_WhatsApp

   HB_SocketShutDown( ::pSocket )
   HB_SocketClose( ::pSocket )

   ::pSocket = nil

return nil

static function pack_h32( cString )
   
   local c := "", cLeter
   local nibbleshift := 4
   local n
   local nPos   := 0
   local aOut   := {}

   for each cLeter in cString
      n = asc( cLeter )
      if n >= asc( "0" ) .and. n <= asc( "9" )
         n -= asc( "0" )
      elseif n >= asc( "a" ) .and. n <= asc( "f" )
         n -= ( asc( "a" ) - 10 )
      elseif n >= asc( "F" ) .and. n <= asc( "F" )
         n -= ( asc( "A" ) - 10 )
      endif
     
      if cLeter:__enumindex() % 2 != 0
         AAdd( aOut, 0 )        
         nPos++
      endif
     
        aOut[ nPos ] = hb_BitOr( aOut[ nPos ], hb_BitShift( n, nibbleshift ) )
     
      nibbleshift = hb_BitAnd( ( nibbleshift + 4 ), 7 )

      if cLeter:__enumindex() % 2 == 0
         c += Chr( aOut[ nPos ] )
      endif      
     
   next

return c

static function  Num2Days( timet )
return  (timet) / (24.0 * 60.0 * 60.0)

static function  Num2TS( n )
   local fecha, hour, min, sec, time, datetime
   local t2d := Num2Days( n )
   
   fecha = Num2Date( n )
   hour  = ( t2d - int( t2d ) ) * 24
   min   = ( hour - int( hour ) ) * 60
   sec   = ( min - int( min ) ) * 60
   time  = strzero( int( hour ), 2 ) + strzero( int( min ), 2 ) + strzero( int( sec ), 2 )
   datetime = dtos( fecha ) + time
   
return hb_tstostr( hb_stot( datetime ) )


static function Num2Date( n )
   local fecha
   local t2d := Num2Days( n )
   
   fecha := SToD( "19700101" ) + int( t2d )
   
return fecha

static function TS2Num( dt )

   local fecha  
   local nNum
   
   DEFAULT dt := hb_DateTime()
   
   nNum = ( hb_Hour( dt ) * 24 + hb_Minute( dt ) * 60 + hb_sec( dt ) * 60 ) / 86400
     
   nNum += ( hb_TToD( dt ) - SToD( "19700101" ) )
   
   nNum *= 86400
   
   nNum = Int( nNum )
   
return nNum

static function isShort( str )
return Len( str ) < 256


#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STRREV )
{
   int iLen = hb_parclen( 1 ), i;
   char * buffer = ( char * ) hb_xgrab( iLen );
   
   for( i = 0; i < iLen; i++ )
      buffer[ i ] = hb_parc( 1 )[ iLen - i - 1 ];
     
   hb_retclen( buffer, iLen );
   hb_xfree( buffer );
}

#pragma ENDDUMP      
 
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Enviando mensajes de WhatsApp

Postby mastintin » Thu Aug 16, 2012 8:28 pm

Daniel : Usas datos de Whatsapp de un Iphone ? . Me he encontrado esto:
http://lukasklein.com/blog/custom-ios-w ... -password/
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Enviando mensajes de WhatsApp

Postby Daniel Garcia-Gil » Thu Aug 16, 2012 9:04 pm

Hola

No, yo uso el whatsapp desde un Galaxys SII
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Enviando mensajes de WhatsApp

Postby Antonio Linares » Fri Aug 17, 2012 9:01 am

Daniel,

Te llega a mostrar esta información ?

? oWA:cAccount_status, oWA:cAccount_kind, oWA:cAccount_creation, oWA:cAccount_expiration
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Enviando mensajes de WhatsApp

Postby Antonio Linares » Fri Aug 17, 2012 10:52 am

Con un whatsapp registrado en un teléfono Android muestra esa información correctamente! :-)

Image
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Enviando mensajes de WhatsApp

Postby Antonio Linares » Fri Aug 17, 2012 10:57 am

F U N C I O N A !!!!!!!! :-D

Code: Select all  Expand view
  oWA:Message( Str( TS2Num() ), "34670463032", "si te llega esto llamame please!" )
 


Image
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Enviando mensajes de WhatsApp

Postby Antonio Linares » Fri Aug 17, 2012 11:21 am

These three lines of Method Message can be changed into:

Code: Select all  Expand view
  cStream := ::Send(cMsg)
   ::Read()
   ::Read()
   ::Read()
       
Return nil


into:
Code: Select all  Expand view
  cStream := ::Send(cMsg)
   ? cStream
   ::Read()
   // ::Read()
   // ::Read()
       
Return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Enviando mensajes de WhatsApp

Postby pcordonet » Fri Aug 17, 2012 12:15 pm

Aqui dejo el parse de la recepción de un mensaje!!!

Code: Select all  Expand view

METHOD parse_received_message( cMsg ) CLASS HB_WhatsApp
Local message:= { => },nLength

ALTD()

// RCVD MSG IN STRING
nLength:= Asc(Substr(cMsg,1,1))
message['length']:= nlength      // PACKET EXCLUDING 00 AND FIRST HEX SHOULD EQUAL THIS NUMBER
cMsg:= Substr(cMsg,3)       // Remove Length & F8
message['sec_length']:= Asc(substr(cMsg,1,1))       // Length of something i dont know excatly what  
cMsg:= Substr(cMsg,6)       // Remove Second Length ( 1 HEX ) , Remove XML Chrs ( 4 HEX )
message['from_number_length']:= Asc(substr(cMsg,1,1))
cMsg:= Substr(cMsg,2)       // Remove Length
message['from_number']:= Substr(cMsg,1,message['from_number_length'])
cMsg:= Substr(cMsg,message['from_number_length']+1)             // Remove NUMBER
cMsg:= Substr(cMsg,4)       // Remove F8 & XML ( 2 HEX )
message['message_id_length']:= Asc(Substr(cMsg,1,1))
cMsg:= Substr(cMsg,2)       // Remove Length
message['message_id']:= Substr(cMsg,1,message['message_id_length'])
cmsg:= substr(cmsg,message['message_id_length']+1)
cmsg:= substr(cmsg,5)       // Remove XML ( 4 HEX )
message['timestamp_length']:= Asc(substr(cmsg,1,1))
cmsg:= substr(cmsg,2)       // Remove Length
message['timestamp']:= Num2TS( Val(  substr(cmsg,1,message['timestamp_length']) ) )
cmsg:= Substr(cmsg,message['timestamp_length']+1)               // Remove Timestamp
// Check for Retry header
If StrToHex(Substr(cmsg,1,1)) == "\x88"
    cmsg:= substr(cmsg,4)       // Remove Retry Length , i dont think i will need it
EndIf
cmsg:= Substr(cmsg,10)      // Remove XMPP XML and Name XML Headers
message['sender_name_length']:= Asc(Substr(cmsg,1,1))
cmsg:= substr(cmsg,2)       // Remove Length
message['sender_name']:= substr(cmsg,1,message['sender_name_length'])
cmsg:= substr(cmsg,message['sender_name_length'])            // Remove sender from msg
cmsg:= substr(cmsg,10)      // Remove body headers
message['body_txt_length'] = Asc(substr(cmsg,1,1))
cmsg:= substr(cmsg,2)       // Remove Length
message['body_txt']:= substr(cmsg,1,message['body_txt_length'])

cmsg:= substr(cmsg,message['body_txt_length'])      // Remove body txt
cmsg:= substr(cmsg,10)      // Remove XMPP XML and Name XML Headers
message['time_length'] = Asc(substr(cmsg,1,1))
cmsg:= substr(cmsg,2)       // Remove Length
message['time'] = substr(cmsg,1,message['time_length'])        
cmsg:= substr(cmsg,message['time_length'])

return message
       
 
pcordonet
 
Posts: 111
Joined: Sat Jan 30, 2010 8:35 am
Location: Girona

Re: Enviando mensajes de WhatsApp

Postby Antonio Linares » Fri Aug 17, 2012 1:39 pm

Gracias!!! :-)

Te llegan bien los mensajes recibidos ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Enviando mensajes de WhatsApp

Postby José Vicente Beltrán » Fri Aug 17, 2012 1:56 pm

Hola a todos,

Después de añadir el metodo MESSAGE y colaterales y compilar con xHB (hay que modificar el nombre de algunas funciones), y correr el EXE no consigo pasar de:
? oWA:cAccount_status, oWA:cAccount_kind, oWA:cAccount_creation, oWA:cAccount_expiration
pues siempre se pinta vacio, así que no puedo enviar el mensaje.

Intento hacerlo desde mi movil Androide a otro Androide

¿Sería posible poner en el foro el código completo que funciona?
Gracias :shock: :shock:
User avatar
José Vicente Beltrán
 
Posts: 282
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España

Re: Enviando mensajes de WhatsApp

Postby Antonio Linares » Fri Aug 17, 2012 2:02 pm

Pere,

Esta linea:

If StrToHex(Substr(cmsg,1,1)) == "\x88"

la he cambiado asi:

If Substr(cmsg,1,1)) == Chr( 0x88 )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Enviando mensajes de WhatsApp

Postby Antonio Linares » Fri Aug 17, 2012 2:03 pm

Jose Vicente,

Has puesto tu codigo de pais (34 para España) y tu numero, y tu IMEI ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Enviando mensajes de WhatsApp

Postby Antonio Linares » Fri Aug 17, 2012 2:06 pm

Pere,

La siguiente linea tambien require un pequeño cambio:

Code: Select all  Expand view
  if Substr( cMsg, 1, 1 ) == Chr( 0x88 )
      cMsg = SubStr( cMsg, 5 )       // Remove Retry Length , i dont think i will need it
   endif
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

PreviousNext

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 31 guests