Newsgroup: it.comp.www.asp
Titolo: Rilevamento di dati XML via POST

Salve a tutti.
Attualmente sto lavorando ad un sito di commercio elettronico che
reindirizza l'utente sul server sicuro di una banca per il pagamento. Nel
caso in cui il pagamento sia andato a buon fine lo stesso server della banca
rilancia verso una pagina del mio sito inviando delle informazioni sulla
transazione. Il problema (grave) è che queste informazioni sono mandate in
'formato XML', quindi tipicamente una cosa come:
<?xm version="1.0" encoding="UTF-8">
    <message ...parametri...>
    ecc. ecc.
    </message>
</xml>
Qualcuno di voi può suggerirmi come recuperare questi dati da ASP ? Ho
provato a guardare la documentazione dell'oggetto XMLHTTP ma ho notato che
bisogna indicare ad esempio l'URL della pagina con la quale si comunica,
cosa che invece io non devo affatto fare (devo solo RICEVERE il codice XML e
interpretarlo).
Mi servirebbe insomma l'equivalente di un semplicissimo Request.Form fatto
per l'XML.
Grazie in anticipo se potrete aiutarmi.
Newcomsas

Non ho esperienza diretta in merito quindi ti do una panoramica a grandi
linee. Spero aiuti.
Istanzi uno dei tanti oggetti XML di Microsoft e gli "carichi" il sorgente
che ricevi via POST. Dico "carchi" poiché il metodo di solito si chiama
"load".
Poi, se tutto va bene, lo tratti nella maniera che preferisci.
Alex.
-- 
___________________________________________________________
a p bertolini
(Tribů Digitale Blackmambo: 
www.blackmambo.it
)

 che ricevi via POST.
Già ma come si fa ad estrarre il sorgente che ricevo via POST ? Reitero la
domanda a chi è in grado di rispondere: esiste un equivalente a Request.Form
per ricevere contenuto XML. Da quel che ho inteso, il server della società
di pagamento 'attacca' l'XML nelle intestazioni HTTP POST della pagina sul
mio sito: è come se eseguisse un submit di un form che abbia come 'action'
la mia pagina; qui però non vengono passati i valori di caselle di testo o
combo box ma questo benedetto codice XML.
Newcomsas

 Già ma come si fa ad estrarre il sorgente che ricevo via POST ?
Ah. Sei bloccato "a monte".
Con ASP Classico devi usare il metodo BinaryRead che però legge in binario.
Dovresti poi convertirlo in testo. Se necessario ti posto una funzioncina
pure ASP che effettua la conversione al volo senza ritardi.
Alex.
-- 
___________________________________________________________
a p bertolini
(Tribù Digitale Blackmambo: 
www.blackmambo.it
)

 pure ASP che effettua la conversione al volo senza ritardi.
Grazie, per curiositŕ mi piacerebbe vederla. Dico per curiositŕ perché ho
contattato il servizio di terze parti e mi hanno detto di usare
Request.Form... cosě senza parametri. Ho fatto un test ma ovviamente non
viene fuori nulla. Probabilmente il problema č lato del loro server (quello
che fa la chiamata con l'XML).
Newcomsas

 del loro server (quello che fa la chiamata con l'XML).
Request.form dovrebbe invece funzionare... ad ogni modo tentar non nuoce:
================
function ANSIToUnicode(ByRef pbinBinaryData)
 Dim lbinData ' Binary Data (ANSI)
 Dim llngLength ' Length of binary data (byte count)
 Dim lobjRs  ' Recordset
 Dim lstrData ' Unicode Data
 ' VarType Reference
 '    8 = Integer (this is expected var type)
 '   17 = Byte Subtype
 ' 8192 = Array
 ' 8209 = Byte Subtype + Array
 Set lobjRs = Server.CreateObject("ADODB.Recordset")
 if VarType(pbinBinaryData) = 8 Then
 ' Convert integers(4 bytes) To Byte Subtype Array (1 byte)
 llngLength = LenB(pbinBinaryData)
 if llngLength = 0 Then
  lbinData = ChrB(0)
 Else
  Call lobjRs.Fields.Append("BinaryData", 205, llngLength)
  Call lobjRs.Open()
  Call lobjRs.AddNew()
  Call lobjRs.Fields("BinaryData").AppendChunk(pbinBinaryData & ChrB(0))
' + Null terminator
  Call lobjRs.Update()
  lbinData = lobjRs.Fields("BinaryData").GetChunk(llngLength)
  Call lobjRs.Close()
 End if
 Else
 lbinData = pbinBinaryData
 End if
 ' Do REAL conversion now!
 llngLength = LenB(lbinData)
 if llngLength = 0 Then
 lstrData = ""
 Else
 Call lobjRs.Fields.Append("BinaryData", 201, llngLength)
 Call lobjRs.Open()
 Call lobjRs.AddNew()
 Call lobjRs.Fields("BinaryData").AppendChunk(lbinData)
 Call lobjRs.Update()
 lstrData = lobjRs.Fields("BinaryData").Value
 Call lobjRs.Close()
 End if
 Set lobjRs = Nothing
 ANSIToUnicode = lstrData
End function
=======================
Spero che la formattazione del NewsServer non faccia troppi guai.
Sulla pagina "ricevente" prova a mettere questa istruzione nel body:
<%=ANSIToUnicode(Request.BinaryRead(Request.TotalBytes))%>
NB: eseguire un binaryRead, in ASP classico, preclude l'uso degli oggetti
Request.form, quindi non si possono mischiare


 per l'XML.
Set objXML =Server.CreateObject("msxml2.DOMDocument.3.0")
objXML.async = false
objXML.LoadXML (request.form("xxxxxx"))
Se hai la certezza che arrivano tramite un riquest.form. Comunque con
questo sistema basta che dentro .loadXML () ci metti il valore della
variabile in formato XML.