Problema di response con il servizio di pagamento online Setefi

venerdì 12 settembre 2014 - 13.40

serginho78 Profilo | Newbie

Ciao a tutti!
Avrei il seguente problema:
sto cercando di integrare nel mio portale (sviluppo con Visual Studio 2013 .NET con Framework 4.5) il servizio di pagamento online di Setefi. Ho chiesto la loro documentazione e mi hanno dato anche il codice c# da inserire nel mio progetto.
Ho fatto un progetto di test e funziona perfettamente fino al pagamento (che mi reindirizza al loro sito di test). Arriva anche la mail di avvenuta transazione. Il problema è nella response in cui i parametri di risposta ritornano vuoti.
Questo è il codice di response:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class POS_BANCA_response : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string paymentID, result, auth, referer, tranid, trackid, details, responsecode, strQuery;

paymentID = "";
result = "";
auth = "";
referer = "";
tranid = "";
trackid = "";
details = "";
responsecode = "";
strQuery = "";

paymentID = Request.Form["paymentid"];
result = Request.Form["result"];
auth = Request.Form["auth"];
referer = Request.Form["ref"];
tranid = Request.Form["tranid"];
trackid = Request.Form["trackid"];
details = Request.Form["details"];
responsecode = Request.Form["responsecode"];


strQuery = "paymentid=" + paymentID + "&trackid=" + trackid + "&result=" + result + "&auth=" + auth + "&ref=" + referer + "&tranid=" + tranid + "&details=" + details + "&responsecode=" + responsecode;

string VarRedirectURL = "http://www.cralonline.it/esitopagamentocartacredito.aspx?" + strQuery;

ScriptManager.RegisterStartupScript(this, this.GetType(), "Redit", "window.location='" + VarRedirectURL + "';", true);

Response.Redirect(VarRedirectURL);

}
}

In questo codice non entra proprio in quanto mi reindirizza alla pagina di errore che viene impostata nel pagamento. Ma, dopo averla cambiata con la pagina di cui il codice sopra, ho notato che i campi che vengono dalla request:

paymentID = Request.Form["paymentid"];
result = Request.Form["result"];
auth = Request.Form["auth"];
referer = Request.Form["ref"];
tranid = Request.Form["tranid"];
trackid = Request.Form["trackid"];
details = Request.Form["details"];
responsecode = Request.Form["responsecode"];

sono tutti vuoti.
Qualcuno sa il perché e come potrei risolvere il problema?

Grazie!

0v3rCl0ck Profilo | Guru

sinceramente così su due piedi non mi sembra ci sia un errore evidente nel tuo codice, dovresti capire se e come ti arrivano le informazioni nella richiesta, magari potresti loggare su disco la request completa.

per loggare la richiesta ci sono diversi metodi, il metodo più semplice è:

Request.SaveAs(@"C:\temp\request.txt", true);

altrimenti ci sono helper per farti restituire una stringa completa, vedi: http://stackoverflow.com/a/9630999/1082342

...un'altra prova rapida potrebbe essere quella di cambiare le Request.Form["..."] in semplici Request["..."] la differenza è che quest'ultimo legge da diversi container facendo il fallback, partendo da .QueryString, poi .Form, poi .Cookies e in ultimo .ServerVariables, vedi codice sorgente:

public string this[string key] { get { string item = this.QueryString[key]; if (item != null) { return item; } item = this.Form[key]; if (item != null) { return item; } HttpCookie httpCookie = this.Cookies[key]; if (httpCookie != null) { return httpCookie.Value; } item = this.ServerVariables[key]; if (item != null) { return item; } return null; } }


in sostanza il Request["..."] cerca l'elemento non solo dei dati in post, ma anche sulla querystring, perchè forse non te li inviano nel body delle richiesta ma direttamente in query string.



Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

serginho78 Profilo | Newbie

Innanzi tutto ci tengo a ringraziarti per avermi risposto così celermente.

Ho fatto le prove che mi hai suggerito e ciò che ho notato è che il Request.QueryString è vuoto (come anche i cookies). Inoltre il file che mi costruisco (il request.txt) ha il seguente risultato:

14:42 12/09/2014GET /response.aspx HTTP/1.1
Cache-Control: max-age=0
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: __atuvc=312%7C36%2C422%7C37; ASPSESSIONIDQSASQBBT=BNDFOBHBKBBGHEEPGFFPPPBC
Host: localhost:11047
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36

Giusto per far capire meglio la mia situazione posto anche il codice di pagamento (con ovvie modifiche di qualche dato sensibile):

ResponseURL = "http://localhost:11047/response.aspx";
ResponseURLError = "http://localhost:11047/error.asp";
string responseString = null;
using (var wb = new WebClient())
{
var data = new NameValueCollection();
data["id"] = "xxxxxxx";
data["password"] = "xxxxxxx";
data["action"] = "4";
data["amt"] = "12.00";
data["currencycode"] = "xxx";
data["langid"] = "ITA";
data["responseURL"] = ResponseURL;
data["errorURL"] = ResponseURLError;
data["trackid"] = "TRCK00001";
data["udf1"] = "Pagamento";

URL = "https://test.monetaonline.it/monetaweb/hosted/init/http";

// Metodo che mi restituisce l'URL del pagamento online + l'id della transazione
var response = wb.UploadValues(URL, "POST", data);
responseString = Encoding.Default.GetString(response);

}
// Metodo che separa il contenuto della stringa ricevuta
separa(responseString, ref varPaymentID, ref varRedirectURL);

//Creo l'URL di redirezione
varRedirectURL = varRedirectURL + "?PaymentID=" + varPaymentID;
Response.Redirect(varRedirectURL);

public void separa(string stringa, ref string pid, ref string url)
{

pid = "";
url = "";

string[] separati = stringa.Split(new char[] { ':' });

pid = separati[0];
url = stringa.Replace(pid + ":", "");

}

Il Response.Redirect(varRedirectURL) mi va bene e mi ritrovo sulla pagina di pagamento, effettuo il pagamento (mi arriva anche la mail di conferma di avvenuto pagamento), ma poi mi va in errore. Resto perplesso.....

0v3rCl0ck Profilo | Guru

penso tu debba contattare il fornitore, perchè dalla request che stai loggando, non ricevi alcuna informazione ne mandata su querystring ne su forms (post), quindi non saprei come aiutarti


Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

djYouri Profilo | Newbie

Ciao,
abbiamo il tuo stesso problema.
Ti dirò di più...scaricando il loro esempio dal sito anche quello non arriva mai alla pagina di notify.

Tu alla fine hai risolto?

Ciao.

Alessandro

Alfmicon45 Profilo | Newbie

Anche io mi trovo nello stesso problema,
vi sarei grato se mi sapreste dire come avete risolto.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5