web services - ¿Recibiendo notificaciones SOAP de la API de eBay en la variable ASP?
web-services asp-classic (2)
Esto es lo que tengo hasta ahora en mis notificaciones.asp. Cuando intento enviar una publicación básica de SOAP a través de Postman, no ocurre nada. ¿Esto parece que debería funcionar?
Probé esto sin las declaraciones If que buscaban encabezados SOAP, y publiqué solo datos de cadenas regulares y funciona. Entonces, la conversión de binario a cadena y salida a archivo está bien. Ahora solo necesito probarlo con las notificaciones de api de eBay. ;-)
<%
Function BytesToStr(bytes)
Dim Stream
Set Stream = Server.CreateObject("Adodb.Stream")
Stream.Type = 1 ''adTypeBinary
Stream.Open
Stream.Write bytes
Stream.Position = 0
Stream.Type = 2 ''adTypeText
Stream.Charset = "iso-8859-1"
BytesToStr = Stream.ReadText
Stream.Close
Set Stream = Nothing
End Function
Dim isPost: isPost = (UCase(Request.ServerVariables("REQUEST_METHOD") & "") = "POST")
Dim hasSoapAction
''Is it a HTTP POST?
If isPost Then
''Do we have a SOAPACTION header?
hasSoapAction = (Len(Request.ServerVariables("HEADER_SOAPACTION") & "") > 0)
If hasSoapAction Then
''Process the notification here.
''Use Request.BinaryRead to read the SOAP
If Request.TotalBytes > 0 Then
Dim lngBytesCount, text
lngBytesCount = Request.TotalBytes
text = BytesToStr(Request.BinaryRead(lngBytesCount))
dim fs, tfile
set fs=Server.CreateObject("Scripting.FileSystemObject")
set tfile=fs.CreateTextFile("C:/inetpub/wwwroot/ASPtest/notifications.txt")
tfile.WriteLine(text)
tfile.Close
set tfile=nothing
set fs=nothing
End If
End If
''Let eBay know we have received and processing the message.
Response.Status = "200 OK"
Else
''Return method not allowed
Response.Status = "405 Method Not Allowed"
End If
Response.End
%>
Estoy tratando de recibir notificaciones de transacción api de eBay en una ASP alojada en un servidor web. Las notificaciones se envían como mensajes SOAP y se pueden enviar a una URL con una cadena de consulta. Las notificaciones deben responderse con HTTP 200 OK. Me gustaría que la notificación llegue a una variable para poder analizarla y enviarla a la siguiente parte del sistema.
En la documentación mencionan que esto es posible, pero la muestra que brindan es la ruta de suscripción a un servidor de correo electrónico. Esta ASP no necesariamente necesitaría realizar solicitudes SOAP, solo aceptar mensajes SOAP de los servidores de eBay.
Estoy estudiando ASP, SOAP y cadenas de consulta, pero una pequeña guía sería realmente apreciada. ¡Gracias!
Esto debería ser bastante directo, su página ASP clásica se convierte en el punto final de la API de notificaciones de eBay (siempre que la haya configurado para enviar notificaciones y a qué URL enviarlas) .
Debería poder probar esto con una simple página Classic ASP
<%
Dim isPost: isPost = (UCase(Request.ServerVariables("REQUEST_METHOD") & "") = "POST")
Dim hasSoapAction
''Is it a HTTP POST?
If isPost Then
''Do we have a SOAPACTION header (check both because
''it can be either HTTP_ or HEADER_ depending on IIS version)?
hasSoapAction = ( _
Len(Request.ServerVariables("HEADER_SOAPACTION") & "") > 0 Or _
Len(Request.ServerVariables("HTTP_SOAPACTION") & "") > 0 _
)
If hasSoapAction Then
''Process the notification here.
''Use Request.BinaryRead to read the SOAP
End If
''Let eBay know we have received and processing the message.
Response.Status = "200 OK"
Else
''Return method not allowed
Response.Status = "405 Method Not Allowed"
End If
Response.End
%>
También es posible que desee verificar REMOTE_HOST
para asegurarse de que solo REMOTE_HOST
mensajes para la fuente esperada (aunque esto no es a prueba de balas ya que la información puede ser falsificada ) .
Enlaces útiles
Accediendo al cuerpo de una solicitud (gran respuesta existente que explica cómo usar
Request.BinaryRead()
para leer el contenido y convertirlo en una cadena que luego puede usar en una variable o para analizar conXMLDocument.LoadXML()
).¿Cómo generar MD5 usando VBScript en ASP clásico? (Si desea ver una forma de verificar la firma MD5)