Mostrando postagens com marcador webservcies. Mostrar todas as postagens
Mostrando postagens com marcador webservcies. Mostrar todas as postagens

sábado, 25 de fevereiro de 2012

Importando self-certificate para o servidor

Nesse post eu ensinei como configurar um certificado SSL no PSE, mas quando estamos trabalhando no ambiente de testes os servidores podem utilizar certificados selfssl, para economizar grana é claro. Como o certificado não foi emitido por AC autorizada, são necessários alguns passos adicionais para importá-lo para o PSE.
Volte ao post anterior e após clicar em confirmar na tela de importação do certificado e antes de clicar no botão incluir faça o seguinte.
Certifique se que os dados do certificado estão visíveis no quadro certificados.

Clique no botão exportar ao lado do botão importar.
Na tela de exportação clique na guia BD, informe um nome breve começando com Z, selecione CA usuário, informe uma descrição e confirme.

Agora você pode clicar em incluir e continuar com as demais etapas do post anterior.

Importando um certificado SSL para o servidor

Nesse post eu ensinei como consumir um webservices através de http_client, na ocasião o endpoint estava acessível através de http, mas e se fosse https?
Nesse post vou mostrar como importar um certificado SSL para que você possa fazer uma conexão através de HTTPS.
Antes de mais nada é preciso que a biblioteca SAP Cryptographic Library esteja instalada no servidor, converse com o BASIS a respeito.

Exportando o certificado do servidor
Primeiro precisamos exportar o certificado ssl do servidor para X509 codificado em Base64, se você estiver utilizando windows faça o seguinte:
  • Execute o internet explorer como adimistrador
  • Acesse o endereço do servidor que você você pretende acessar pelo SAP
  • Clique no cadeado da barra de endereços, em seguida em exibir certificados
  • Clique na guia detalhes e em seguida copiar para arquivo
  • Clique em avançar e na proxima tela selecione X509 codificado na base 64 e clique em avançar novamente.
  • Indique onde deseja salvar o arquivo.

 Configurando o PSE e o ICM
Acesse a transação STRUST e clique em Cliente SSL (standard)

No quadro certificado clique no botão importar certificado

Na tela de importação de certificado, clique em Base64 e informe o caminho para o arquivo exportado na primeira etapa e confirme.

Será exibido os dados do certificado, verifique se está tudo ok e clique no botão incluir

Acesse o menu PSE, em seguida distribuir todos ou pressione F6

Agora o certificado foi importado para o PSE, precisamos reiniciar o ICM antes de poder utilizar o certificado. Para isso acesse a transação SMICM, clique no menu Administração, ICM e encerrar soft.

Aguarde o ICM ser reiniciado e a configuração SSL estará ok.



Conectando um http_client através de um destino http externo

Nesse post eu mostrei como consumir um webservice usando http_client, no exemplo eu instanciei o http_client a partir do endpoint do webservice, mas é possível fazer isso a partir de um destino http, dessa forma você não precisa se preocupar com atualização do endpoint, ssl e proxy.

A primeira coisa a fazer é acessar a transação SM59 e definir um novo destino http externo.



As configurações SSL estão inativas porque o endpoint não utiliza https.

Agora precisamos substituir o método create pelo método create_by_destination para instanciar o http_client.

segunda-feira, 23 de janeiro de 2012

Assinando o RPS da NFS-e de São Paulo

Há algum tempo atrás eu tive de implementar uma interface para emissão de NFS-e na prefeitura de São Paulo, e na época pesquisando em alguns forums vi que bastante gente tinha problema para gerar a assinatura do RPS que vai dentro da tag assinatura.
Após algumas pesquisas na internet e no manual da prefeitura eu consegui gerar essa assinatura, abaixo vou mostrar como fazer isso em java utilizando um certificado A1. O que veremos nesse post é como gerar o hash de assinatura de RPS (conteúdo da tag assinatura) e não como assinar o XML para envio.
Antes de mais nada você precisa ter a sequencia de caracateres ASCII a ser assinada, se não sabe como gerá-la consulte o manual NFe-Web-Service-v2-2 da prefeitura da página 23 a 25, pois lá explica detalhadamente como montar essa sequencia.

Primeiro importe as classes  Signature e BASE64Encoder


Agora inclua o método que faz a assinatura da sequencia ASCII


Primeiro é obtida uma instância do algorítimo RSA-SHA1, em seguida é informada a chave privada do certificado, a sequencia é convertida para bytes e finalmente o HASH é gerado.
O método getPrivateKey pode ser substituido pelo seu próprio método que obtem a chave privada do certificado, ou se preferir pode utilizar o exemplo abaixo:

Espero que isso ajude vocês em seus projetos de NFS-e para São Paulo. Valeu!!!

quinta-feira, 27 de outubro de 2011

Consumindo webservice em ABAP com HTTP_CLIENT

Uma coisa que aprendi a fazer em ABAP há alguns anos atrás foi utilizar a classe HTTP_CLIENT e programas XSLT para consumir webservices no R3, já que essa versão não conta com todos os recursos para webservices disponíveis no netweaver.
Nesse post nós iremos consumir o webservice CurrencyConvertor do site WebserviceX, que permite obter a cotação de uma determinada moeda com relação a outra.

Antes de iniciar vamos precisar informações com relação ao serviço que iremos consumir:

Endpoint: http://www.webservicex.net/CurrencyConvertor.asmx (Certifique-se de que o servidor SAP é capaz de acessar esse endereço)

SoapAction: http://www.webserviceX.NET/ConversionRate (Define qual método do serviço está sendo chamado)

Um Exemplo de request:


Primeiro utilizamos os parâmetro de tela para montar um string em formato XML SOAP:


Em seguida o objeto http_client é instanciado com base nas informações do endpoint:


O host nada mais que o endereço do servidor, pode ser url ou IP.
O service é a porta utilizada no endpoint normalmente 80 para HTTP e 443 para HTTPS.
Em scheme podemos utilizar cl_http_client=>schemetype_http ou cl_http_client=>schemetype_https dependendo do protocolo do endpoint.
Se o servidor acessa o endpoint através de proxy você deve especificar o endereço e a porta do servidor proxy. Mas atenção nesse caso será necessário fazer a autenticação no servidor proxy, informando o usuário e a senha, em outro post vou ensinar a fazer a autenticação via ABAP.

Em seguida são configurados alguns campos do cabeçalho da request utilizando o form f_set_header_field. Atenção especial aos campos SOAPAction e ~request_uri pois obviamente eles irão variar de acordo com o serviço e método.


Em seguida o XML montando no início é passado para o corpo da request (juntamente com o tamanho calculado para o mesmo), ela é enviada e a resposta é lida.


Agora nós temos um XML com o valor que nós precisamos, podemos utilizar substring, as classes de XML do ABAP, ou qualquer outro meio para obter valor, nesse exemplo estou utilizando um programa XSLT, mas obviamente exigem um certo conhecimento da linguagem XSLT. Em outro post vou falar mais desse tipo de programa.

Para esse exemplo foi criado o programa XSLT ZCURRENCY_CONVERTOR com o código abaixo:


Para executar um programa XSLT devemos utilizar o comando CALL TRANSFORMATION passado o XML e o(s) campo(s) e/ou estrutura(s) a serem preenchidas.


O comando foi circundado com try catch genérico para evitar possíveis DUMPs durante a transformação.Em outro post vou falar mais sobre tratamento de excessões com try. catch.

Testando o programa


Tela de Seleção










Resultado











Exemplo Completo: