Inquiridor
Consumir Web services NFS-e Prefeitura de SP - DICA

Discussão Geral
-
Boa tarde Pessoal, quero compartilhar com vocês a resolução de um problema pelo qual passei e resolvi hoje.
Ao tentar adicionar um web reference (https://nfe.prefeitura.sp.gov.br/ws/lotenfe.asmx)no VS2010,
me pedia o certificado digital, eu apontava o certificado, tudo ok, mas dava um erro de HTTP 403: Forbidden , não conseguia referenciar e assim criar a classe para utilizar os métodos do webservice.
Li o post http://social.msdn.microsoft.com/Forums/pt-BR/webservicespt/thread/ecd6123e-8bf8-417b-aa54-0cd0bf3d5b9a e mesmo assim não adiantou para mim.
Li em outra thread que um cara setou a versão do .NET 3.5 para .NET 2.0 e conseguiu adicionar a referência. Fiz o mesmo e consegui. Porém fiz o mesmo processo em outra aplicação minha e voltaram os mesmo erros.
Resolvi o problema criando a classe não mão , claro copiei e alterei com base á classe criada do outro projeto que consegui adicionar a web referencia.
Depois adicionei uma setting na properties do projeto assim:
Name: nome da propriedade (vai ser referenciada na classe da NFse)
type:web service URL
Scope: Application
Value : https://nfe.prefeitura.sp.gov.br/ws/lotenfe.asmx
Adicionei a referencia : .NET/System.Web.Services
pastebin da classe : http://pastebin.com/3sH59jmF
pastebin do code do form que eu testei o consumo : http://pastebin.com/bRP1rt4K
quem quiser baixar o projeto , aqui :http://sdrv.ms/SzhSk9
Abraços.
Todas as Respostas
-
-
Obrigado pelo exemplo, estou tendo o mesmo problema para criar um web reference. fiz download de seu projeto para testar mas ainda estou tendo um problema com http 403 forbidden durante o envio.
MessageBox.Show(n.EnvioRPS(1, ""));
Estou usando um certificado tipo A3, vejo que em seu projeto você acessa os certificados gravados na maquina.
copiei a mensagem de erro aqui caso ajude em algo.
System.Net.WebException was unhandled
Message=The request failed with HTTP status 403: Forbidden.
Source=System.Web.Services
StackTrace:
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at TesteWS.LoteNFe.TesteEnvioLoteRPS(Int32 VersaoSchema, String MensagemXML) in C:\Users\eduardo.fortes\Downloads\skydrive-2013-07-22\TesteWS\TesteWS\TesteWS\LoteNFe.cs:line 200
at TesteWS.Form1.button1_Click(Object sender, EventArgs e) in C:\Users\eduardo.fortes\Downloads\skydrive-2013-07-22\TesteWS\TesteWS\TesteWS\Form1.cs:line 27
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at TesteWS.Program.Main() in C:\Users\eduardo.fortes\Downloads\skydrive-2013-07-22\TesteWS\TesteWS\TesteWS\Program.cs:line 18
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
-
Cara eu estava tendo o mesmo problema a solução foi antes de fazer
MessageBox.Show(n.EnvioRPS(1, ""));
vc deve adicionar o certificado digital na chamada do método.
o meu esta assim :
X509Certificate2 cert = new X509Certificate2();
Certificado certificado = new Certificado();
cert = certificado.BuscaNome("");
Rps.ClientCertificates.Add(cert);
MessageBox.Show(Rps.TesteEnvioLoteRPS(1, XmlNota)); -
-
-
Boa Tarde Hugo, gostaria de saber se pode me ajudar, baixei seu exemplo de consulta no webservice da Prf SP, porem não estou conseguindo fazer a pesquisa, baixei os schema e os exemplos da propria prefeitura mas nao vai.
Criei o modelo da MensagemXML com base no exemplo simples de consulta de cnpj e acusa o seguinte erro Versao do XML Incorreto .
estou usando o seguinte parametro:
MessageBox.Show(n.ConsultaCNPJ(02,"<?xml version=\"1.0\" encoding=\"UTF-8\"?> <p1:PedidoConsultaCNPJ xmlns:p1=\"http://www.prefeitura.sp.gov.br/nfe\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"> <Cabecalho Versao=\"1\"> <CPFCNPJRemetente> <CNPJ>0294527200190</CNPJ> </CPFCNPJRemetente> </Cabecalho> <CNPJContribuinte> <CNPJ>04071190000199</CNPJ> </CNPJContribuinte> </p1:PedidoConsultaCNPJ>"));
Resolvi utilizar esse mas na verdade preciso usar a baixa de notas recebidas que nao funciona
Valeu
Marcos
-
-
-
-