413 messaggi dal 22 giugno 2007
Ciao a tutti,
sto cercando di implementare PayPal sul mio sito, per l'invio dei dati nessun intoppo, il problema nasce con il return automatico..
Vorrei implementare il IPN! nella mia pagina di return i paramentri del pagamento mi vengono scritti nell'url in tale modo:

http://--/paypal/payment.aspx?tx=74Y42708DV8899058&st=Completed&amt=17.00&cc=EUR&cm=2a30d57b-f9d3-4dfa-86c3-6e2ea7d7b201&item_number=

ma da quanto ho capito questo è sbagliato, io dovrei ricevere, come ad esempio prendo una transazione di aruba, un url così composto:

http://pagamenti.aruba.it/ConfermaPagamentoOrdine.aspx?idordine=MO3915536&idlang=1&token=EC-6RH90361NT577232S&PayerID=ARYBH3349W5WG

Se ho capito male salto la convalida della notifica, è giusto? Qualcuno saprebbe dove sbaglio? Il mio codice è il seguente:

string strFormValues = Encoding.ASCII.GetString(this.Request.BinaryRead(this.Request.ContentLength));
string requestUriString = "https://www.sandbox.paypal.com/cgi-bin

// Create the request back
HttpWebRequest request =(HttpWebRequest)WebRequest.Create(requestUriString);

// Set values for the request back
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
string obj2 = strFormValues + "&cmd=_notify-validate";
request.ContentLength = obj2.Length;

// Write the request back IPN strings
StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.ASCII);
writer.Write(RuntimeHelpers.GetObjectValue(obj2));
writer.Close();

//send the request, read the response
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
Encoding encoding = Encoding.GetEncoding("utf-8");
StreamReader reader = new StreamReader(responseStream, encoding);

// Reads 256 characters at a time.
char[] buffer = new char[0x101];
int length = reader.Read(buffer, 0, 0x100);
while (length > 0)
{
  // Dumps the 256 characters to a string
  string IPNResponse = new string(buffer, 0, length);
  length = reader.Read(buffer, 0, 0x100);
  string pay_stat = Request.QueryString["st"];
  //if (String.Compare(IPNResponse, "VERIFIED", false) == 0)
  if (!string.IsNullOrEmpty(pay_stat) && pay_stat == "Completed")
  {
     resultLabel.Text = "Grazie per aver effettuato il pagamento!"; +
  }
  else
  {
     resultLabel.Text = "Il pagamento tramite PayPal non è andato a buon fine.";}
}
161 messaggi dal 07 settembre 2009
Anche io stò implementando il pagamento con paypal su un sito e per la pagina dell'IPN mi sono basato su questo
https://cms.paypal.com/cgi-bin/marketingweb?cmd=_render-content&content_ID=developer/library_code_ipn_code_samples
il codice che mi riporta è corretto e completo, poi ovviamente vanno aggiunti i controlli per verificare che la transazione sia corretta o meno, a tal proposito ti consiglio di leggere questo pdf https://www.paypalobjects.com/WEBSCR-640-20120302-1/it_IT/IT/pdf/PP_OrderManagement_IntegrationGuide.pdf in particolare pagina 32 ti dice quali controlli effettuare per assicurarsi che la transazione sia stata eseguita correttamente


Davide
119 messaggi dal 10 febbraio 2003
Ciao a tutti, a proposito di tale argomento, sto iniziando ad implementare la pagina per l'elaborazione dell'ipn. Non ho ben chiara una cosa. Per accedere alle variabili, devo effettuare lo split della risposta? In caso affermativo, è corretto splittarla in questo modo?
//split iniziale per separare le varie stringhe in base al carattere '&'
String[] StringArray = strResponse.Split('&');

E poi successivamente effettuare lo split in base al simbolo "=" per accedere ai valori ed effettuare il controllo tramite switch:
 int i;
            for (i = 0; i < StringArray.Length - 1; i++)
            {
                String[] StringArray1 = StringArray[i].Split('=');
                sKey = StringArray1[0];
                sValue = StringArray1[1];
                
                    switch (sKey)
                    {
                        case "first_name":
                            fname = sValue;
                            break;
...
            

Purtroppo non riesco a testare la pagina su sandbox perchè mi dice sempre che l'url non è stato trovato (404)

Grazie a tutti

joshi
Ciao, di recente ho implementato PP sul mio sito, per il return automatico bisogna:
1) Impostarlo nel pannello di controllo del proprio account su PP, sotto la voce Profilo.
2) Inserire un tag hidden nella pagina che chiama il servizio impostando il relativo parametro per l'url.

Per l'ipn invece bisogna sempre abilitare la funzione nel proprio account, poi crearsi una pagina ad hoc (quella del ritorno automatico) dove andare a leggere le informazioni passate da PP.

Stesera mi cerco il codice (ora non me lo ricordo a mente) e ve lo posto.

Ciao!

Creazione Siti Vicenza
Posizionamento Siti - SEO
Ciao! allora nel markup devi inserire questo tag per il ritorno:
<input type="hidden" name="return" value="http://www.tuosito.xx/tuapaginaRicevente.aspx"/> 


Mentre nella pagina che riceve:
 
// See following url for more IPN code samples
        // https://cms.paypal.com/us/cgi-bin/?&cmd=_render-content&content_ID=developer/library_code_ipn_code_samples

        string postUrl = ConfigurationManager.AppSettings["PayPalSubmitUrl"];

        // Step 1a: Modifica la POST string.
        string formPostData = "cmd = _notify-validate";
        foreach (string postKey in Request.Form)
        {
            string postValue = Encode(Request.Form[postKey]);
            formPostData += string.Format("&{0}={1}", postKey, postValue);
            string logPathDir = ResolveUrl("Messages");
            string logPath = string.Format("{0}\\{1}.txt", Server.MapPath(logPathDir), DateTime.Now.Ticks);
            File.WriteAllText(logPath, formPostData);
        }

 WebClient client = new WebClient();
        client.Headers.Add("Content-Type","application/x-www-form-urlencoded");
        byte[] postByteArray = Encoding.ASCII.GetBytes(formPostData);
        byte[] responseArray = client.UploadData(postUrl, "POST", postByteArray);
        string response = Encoding.ASCII.GetString(responseArray);

 if (response == "VERIFIED")
        {
            //esegui le azioni di cui hai bisogno.
            
}
        else if (response == "INVALID")
        {
            //esegui le azioni di cui hai bisogno.
        }


Ecco, spero ti sia d'aiuto!

Creazione Siti Vicenza
Posizionamento Siti - SEO
4 messaggi dal 30 luglio 2005
Salve,
volevo sapere se questa procedura funziona sotto sandbox perchè non mi restituisce nulla a livello di response.
Grazie per la collaborazione.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.