Página 1 de 1

metodo post com json x matriz

Enviado: 16 Ago 2020 17:11
por Abel
ola pessoal, to tentando conectar a uma API para mandar email mas to com dificuldade na parte da matriz
se alguem puder me ajudar.

Exemplo de corpo de solicitação - manual
{
"from": "email address",
"to": "recipient email address",
"subject": "subject in string format",
"content": "plain / text content",
"html_content": "html content",
"attachments": [
{
"name": "test.gif",
"type": "image/gif",
"content": "The Base64 encoded content of the attachment."
},
{
"name": "test.pdf",
"type": "application/pdf",
"content": "The Base64 encoded content of the attachment."
}
]
}


minha rotina - nao consigo anexar o arquivo no email
ahash["from"] := "xxxxx@xxxxx.com.br" // de
ahash["to"] := "destino@gmail.com" // para
ahash["subject"] := "assunto do email "
ahash["content"] := "vamos la"
ahash["html_content"]:= "ola este é um teste "
ahash["attachments"] := {"name:aulas.prn.pdf","type:application/pdf","content:The Base64 encoded content of the attachment."}
//
cJson := hb_jsonEncode(ahash, .t.)

Try
oOle := CreateObject("MSXML2.XMLHTTP")
Catch
oOle := CreateObject("Microsoft.XMLHTTP")
END

oOle:Open( "POST", "https://api.turbo-smtp.com/api/mail/send", .t. )
oOle:SetRequestHeader( "content-type", "application/json; charset=utf-8")
oOle:SetRequestHeader( "Authorization", rA_SMTP )
//
oOle:Send(cJson)

metodo post com json x matriz

Enviado: 16 Ago 2020 18:09
por JoséQuintas
Apenas se descuidou da parte onde entra array numérico, e não por nome.
Usando a cabeça.... anexos são array, ok, fez isso... mas....

Código: Selecionar todos

"attachments": [
Isso significa que x[ "attachments" ] é o hash, e vai conter um array {}

Código: Selecionar todos

aHash[ "attachments" ] := {}

UmAnexo := hb_hash()
UmAnexo[ "name" ] := 
UmAnexo[ "type"  ] :=
UmAnexo[ "content" ] :=

AAdd( aHash[ "attachments" ], UmAnexo )
Aproveitando....
Uma função que postei por aqui, ShowJason() é pra ajudar isso.

metodo post com json x matriz

Enviado: 16 Ago 2020 18:52
por JoséQuintas
showjson.png
Tä mais enxuta agora.

Código: Selecionar todos

PROCEDURE Main

   LOCAL aHash
   LOCAL x := [{ "from": "email address",] + ;
              [ "to": "recipient email address",] + ;
              [ "subject": "subject in string format",] + ;
              [ "content": "plain / text content",] + ;
              [ "html_content": "html content",] + ;
              [ "attachments": ] + ;
              "[" + ;
              [ { "name": "test.gif",] + ;
              [ "type": "image/gif",] + ;
              [ "content": "The Base64 encoded content of the attachment."] + ;
              [ },] + ;
              [ { ] + ;
              [ "name": "test.pdf",] + ;
              [ "type": "application/pdf",] + ;
              [ "content": "The Base64 encoded content of the attachment."] + ;
              [ }] + ;
              "]" + ;
              [ }]

   SetMode( 25, 80 )
   CLS
   aHash := hb_JsonDecode( x )
   ShowJSon( aHash, "" )

   Inkey(0)
   RETURN

FUNCTION ShowJson( aHash, cTxt )

   LOCAL oElement

   IF ValType( aHash ) $ "NCDL" .OR. aHash == NIL
      ? cTxt, aHash
   ELSEIF ValType( aHash ) == "A"
      FOR EACH oElement IN aHash
         ShowJson( oElement, cTxt + "[ " + Ltrim( Str( oElement:__EnumIndex ) ) + " ]" )
      NEXT
   ELSEIF ValType( aHash ) == "H"
      FOR EACH oElement IN aHash
            ShowJson( oElement, cTxt + '[ "' + hb_hKeyAt( aHash, oElement:__EnumIndex ) + '" ]' )
      NEXT
   ELSE
      ? cTxt, "***** nao identificado ***"
   ENDIF

   RETURN NIL

metodo post com json x matriz

Enviado: 16 Ago 2020 20:48
por Abel
Muito obrigado, Quintas !!!
deu certo envio, ainda não entendo muito bem de hash
mas usando a cada dia, vou aos poucos dominando esse assunto.

Att
ABEL

metodo post com json x matriz

Enviado: 16 Ago 2020 22:04
por Abel
pessoal, o arquivo PDF esta chegando corrompido,
como eu converto ele para base64 ?

Obrigado desde já.
Abel

metodo post com json x matriz

Enviado: 16 Ago 2020 22:36
por Vlademiro
Use hb_base64encode

metodo post com json x matriz

Enviado: 22 Ago 2020 15:31
por Abel
Pessoal, continuo com dificuldades de mandar email usando API
agora estou testando smt2go.com

isso esta no exemplo de envio deles, e dizem para usar JSON
{
"api_key": "api-40246460336B11E6AA53F23C91285F72",
"to": ["Test Person <test@example.com>"],
"sender": "Test Persons Friend <test2@example.com>",
"subject": "Hello Test Person",
"text_body": "You're my favorite test person ever",
"html_body": "<h1>You're my favorite test person ever</h1>",
"custom_headers": [
{
"header": "Reply-To",
"value": "Actual Person <test3@example.com>"
}
],
"attachments": [
{
"filename": "test.pdf",
"fileblob": "--base64-data--",
"mimetype": "application/pdf"
},
{
"filename": "test.txt",
"fileblob": "--base64-data--",
"mimetype": "text/plain"
}
]
}
O Email estou conseguindo enviar, nao consigo enviar o anexo.
ele esta acusando erro no conteudo de fileblob, lendo vi que tenho que enviar arquivos codificados base64,
meu pdf abre normal na minha maquina, o que devo colocar nessa variavel ?

Obrigado mais uma vez.
Abel

metodo post com json x matriz

Enviado: 22 Ago 2020 17:11
por Vlademiro
Abel,

Coloca o trecho do seu código de envio para a gente ver se acha a causa do problema.

metodo post com json x matriz

Enviado: 22 Ago 2020 17:43
por Abel
vlademiro, descobri,

como estou usando uma API para enviar email, tenho que criar uma string criptografada pelo hb_base64encode e mandar ela no parametro da API

exemplos:
cString:=memoread("carro.pdf")
cString64:=Hb_base64encode(cString,len(cString))
aHash[ "attachments" ] := {}
UmAnexo := hb_hash()
UmAnexo[ "filename" ] := "carro.pdf" // nao consegui fazer enviar o anexo sem corromper.
UmAnexo[ "mimetype" ] := "application/pdf"
UmAnexo[ "fileblob" ] := "&cString64" // --base64-data--"
AAdd( aHash[ "attachments" ], UmAnexo )
//
cJson := hb_jsonEncode(ahash, .T.)
é como se esse codigo gerado fosse uma criptografia para o arquivo ser enviado por email.
o arquivo enviado é o mesmo que na minha maquina abre normalmente (pdf).

a dica acima serve para alguem que queira usar algo parecido.
Att
ABEL

metodo post com json x matriz

Enviado: 22 Ago 2020 22:39
por Vlademiro
Valeu. Assim já fica aqui a dica.

metodo post com json x matriz

Enviado: 22 Ago 2020 23:54
por JoséQuintas
Porque isto:

Código: Selecionar todos

UmAnexo[ "fileblob" ] := "&cString64" 
e não isto:

Código: Selecionar todos

UmAnexo[ "fileblob" ] := cString64

metodo post com json x matriz

Enviado: 23 Ago 2020 15:05
por Abel
Jose Quintas,
tenho um costume de usar macro,
e sei que nao é aconselhavel,
preciso mudar esse habito.

Obrigado pela dica.
Att
ABEL

metodo post com json x matriz

Enviado: 23 Ago 2020 20:44
por JoséQuintas
Tem muitos casos aonde os parênteses resolvem.

Código: Selecionar todos

use ( cPath + cFileName )
SET ALTERNATE TO ( cFileName )
SET PRINTER TO ( cFileName )
RUN ( "notepad.exe" + " " + "arquivo.txt" )
É questão de ir se acostumando e ver aonde realmente é necessário, ou se tem alternativa.

metodo post com json x matriz

Enviado: 25 Ago 2020 23:38
por Abel
Jose Quintas,

realmente nao tinha esse costume SET PRINTER TO ( cFileName )
é a mesma coisa que SET PRINTER TO &cFileName

e eu usando apenas macro
Valeu pela dica.
obrigado,

att,
ABEL