Hello again Fiwinners;
Can anyone here read QR Codes?
This squared dot matrix dots and squares can store a lot of information. Given a QR code storing text, can we read it with fw or harbour? Is anyone here reading QR Codes?
Thank you.
Hello again Fiwinners;
Can anyone here read QR Codes?
This squared dot matrix dots and squares can store a lot of information. Given a QR code storing text, can we read it with fw or harbour? Is anyone here reading QR Codes?
Thank you.
Reinaldo, sorry for off-topic, some time ago you share in this forum an class to twillio, to send sms, whatsapp, you still using this class? do you make updates to this? can you share?
best regards
#define ACCOUNT_SID "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" //assigned by Twilio
#define AUTH_TOKEN "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" //assigned by Twilio
#define TEL_FROM "xxxxxxxxxxx" //Your Twilio number
#INCLUDE "hbClass.ch"
#include "hbcurl.ch"
CLASS TTwilioSMS
DATA hCurl
DATA httpcode
DATA cLogFile INIT "Twilio.log"
DATA cResponse
DATA cDestinationNum
DATA cSMSText
DATA cSMSStatusCallBackURL INIT '' //Webhook address where to receive SMS status updates
DATA cUrl INIT "https://api.twilio.com/2010-04-01/Accounts/" + ACCOUNT_SID + "/Messages.json"
DATA cVoiceUrl INIT "https://api.twilio.com/2010-04-01/Accounts/" + ACCOUNT_SID + "/Calls.json"
DATA cSayVoice INIT '<Say voice="alice" language="es-MX">'
DATA cCallSubject INIT 'Recorded Message'
DATA nError INIT 0
DATA nMaxLogSize INIT 32768
DATA cDateStart, cDateEnd
DATA cvoiceMail, cReplyEmail
DATA lDebug INIT .F.
METHOD New()
METHOD End()
METHOD Send()
METHOD Reset()
METHOD MakePhoneCall()
METHOD GetMessagesLog()
ENDCLASS
//------------------------------------------------------------------------------------------------
METHOD New() CLASS TTwilioSMS
::hCurl := curl_easy_init()
RETURN Self
//------------------------------------------------------------------------------------------------
METHOD Send() CLASS TTwilioSMS
Local cPostFields
Local httpcode
curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, 1 )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl )
curl_easy_setopt( ::hCurl, HB_CURLOPT_USERPWD, ACCOUNT_SID + ':' + AUTH_TOKEN )
curl_easy_setopt( ::hCurl, HB_CURLOPT_DL_BUFF_SETUP )
curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
cPostFields := 'To=' + ::cDestinationNum + ;
'&From=' + TEL_FROM +;
'&Body=' + curl_easy_escape( ::hCurl, AllTrim( ::cSMSText ) )
IF !Empty( ::cSMSStatusCallBackURL )
cPostFields += "&statusCallback="+ ::cSMSStatusCallBackURL
ENDIF
If ::lDebug
LogData( ::cLogFile, { cPostFields }, ::nMaxLogSize )
endif
curl_easy_setopt( ::hcurl, HB_CURLOPT_POSTFIELDS, cPostFields )
::nError := curl_easy_perform( ::hCurl )
curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @httpcode )
::httpcode := httpcode
IF ::nError == HB_CURLE_OK
::cResponse = curl_easy_dl_buff_get( ::hCurl )
IF ::lDebug
LogData( ::cLogFile, ::cResponse, ::nMaxLogSize )
ENDIF
Else
LogData( ::cLogFile, { "Twilio error sending SMS. Details below:" }, ::nMaxLogSize )
LogData( ::cLogFile, { "To", ::cDestinationNum, "SMS Text:", ::cSMSText }, ::nMaxLogSize )
LogData( ::cLogFile, { "Error Num:", ::nError, "Httpcode:", ::httpcode }, ::nMaxLogSize )
LogData( ::cLogFile, { "Response:", ::cResponse }, ::nMaxLogSize )
LogData( ::cLogFile, curl_easy_strerror( ::nError ), ::nMaxLogSize )
ENDIF
return NIL
//------------------------------------------------------------------------------------------------
METHOD Reset() CLASS TTwilioSMS
curl_easy_reset( ::hCurl )
::nError := HB_CURLE_OK
return NIL
//------------------------------------------------------------------------------------------------
METHOD End() CLASS TTwilioSMS
curl_easy_cleanup( ::hCurl )
::hCurl := Nil
hb_gcAll( .t. )
return NIL
//------------------------------------------------------------------------------------------------
//must define ::cDateStart and ::cDateEnd before calling this method.
METHOD GetMessagesLog() CLASS TTwilioSMS
Local cparms := '?DateSent%3E=' + ::cDateStart + "&DateSent%3C=" + ::cDateEnd + "&PageSize=600"
Local httpcode
curl_easy_setopt( ::hCurl, HB_CURLOPT_HTTPGET, 1 )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl + cParms )
curl_easy_setopt( ::hCurl, HB_CURLOPT_USERPWD, ACCOUNT_SID + ':' + AUTH_TOKEN )
curl_easy_setopt( ::hCurl, HB_CURLOPT_DL_BUFF_SETUP )
curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
::nError := curl_easy_perform( ::hCurl )
curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @httpcode )
::httpcode := httpcode
IF ::nError = HB_CURLE_OK
::cResponse = curl_easy_dl_buff_get( ::hCurl )
::cResponse := StrTran( ::cResponse, Chr(10), "" )
Else
LogData( ::cLogFile, { "Twilio error sending SMS. Details below:" }, ::nMaxLogSize )
LogData( ::cLogFile, { "To", ::cDestinationNum, "SMS Text:", ::cSMSText }, ::nMaxLogSize )
LogData( ::cLogFile, { "Error Num:", ::nError, "Httpcode:", ::httpcode }, ::nMaxLogSize )
LogData( ::cLogFile, curl_easy_strerror( ::nError ), ::nMaxLogSize )
ENDIF
//MemoWrit( "Twilio.log", ::cResponse )
RETURN NIL
//------------------------------------------------------------------------------------------------
/*sample makeing a call using url to fetch parameters
https://www.twilio.com/docs/voice/api/call-resource
EXCLAMATION_MARK='!'
curl -X POST https://api.twilio.com/2010-04-01/Accounts/$TWILIO_ACCOUNT_SID/Calls.json \
--data-urlencode "Twiml=<Response><Say>Ahoy there$EXCLAMATION_MARK</Say></Response>" \
--data-urlencode "To=+15558675310" \
--data-urlencode "From=+15552223214" \
-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN
*/
//Twilml sample parameter "Twiml=<Response><Say>Ahoy there$EXCLAMATION_MARK</Say></Response>"
METHOD MakePhoneCall() CLASS TTwilioSMS
Local cPostFields
Local httpcode
curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, 1 )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cVoiceUrl )
curl_easy_setopt( ::hCurl, HB_CURLOPT_USERPWD, ACCOUNT_SID + ':' + AUTH_TOKEN )
curl_easy_setopt( ::hCurl, HB_CURLOPT_DL_BUFF_SETUP )
curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
cPostFields := 'To=' + ::cDestinationNum + ; // Line[ 3 ] +;
'&From=' + TEL_FROM +;
'&CallReason=' + ::cCallSubject +;
'&Twiml=' + ::cSayVoice + ::cVoiceMail + '</Say>' +;
'&CallerId=' + ::cReplyEmail
curl_easy_setopt( ::hcurl, HB_CURLOPT_POSTFIELDS, cPostFields )
::nError := curl_easy_perform( ::hCurl )
curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @httpcode )
::httpcode := httpcode
IF ::nError = HB_CURLE_OK
::cResponse = curl_easy_dl_buff_get( ::hCurl )
Else
LogData( ::cLogFile, { "Twilio error making voice call. Details below:" }, ::nMaxLogSize )
LogData( ::cLogFile, { "To", ::cDestinationNum, "Message:", ::cVoiceMail }, ::nMaxLogSize )
LogData( ::cLogFile, { "Error Num:", ::nError, "Httpcode:", ::httpcode }, ::nMaxLogSize )
LogData( ::cLogFile, curl_easy_strerror( ::nError ), ::nMaxLogSize )
ENDIF
RETURN NILOtto wrote:Dear Reinaldo,zbarimg is fantastic!
have you senn this:
https://forums.fivetechsupport.com/viewtopic.php?f=3&t=41320&p=247534&hilit=ZBarImg&sid=713f358b47cdd5ad8fb5dee0ef707169#p247534
Best regards,
Otto
c:\Program Files (x86)\ZBar\bin\zbarimg QRCODE.JPG > TEXT.TXTMarco,
>zbarimg is fantastic!
can you show an example how to use?
Thank you and best regards,
Otto
cComando := '"c:\Program Files (x86)\ZBar\bin\zbarimg" ' + '"' + cFileJpg + '"' + + " > " + '"' + cFileTxt + '"'
cComando := cComando + crlf + "EXIT" + crlf
MEMOWRIT( "do_scan.bat" , cComando )
__RUN ( "START /MIN do_scan.bat" )IF FILE( cFileTxt )
cLettura := MemoRead( cFileTxt )
ENDIF