Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Post data not working when executed through code C#

Îåêßíçóå áðü ôï ìÝëïò KroDevelop. Τελευταία δημοσίευση από το μέλος KroDevelop στις 17-01-2011, 21:54. Υπάρχουν 10 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  08-01-2011, 16:45 62175

    Post data not working when executed through code C#

    Καλησπέρα σε όλους,

    Αυτή είναι η πρώτη μου δημοσίευση - ερώτηση. Να σας πω την αλήθεια με έπεισε το ITPRODEVCONNECTIONS 2010 , για να κάνω πιο ενεργεί τη συμμετοχή μου στην κοινότητα.

    Ορίστε λοιπόν το πρόβλημα μου.

    Φτιάχνω μία υλοποίηση ενός πολύ απλού ηλεκτρονικού καταστήματος που να δέχεται πληρωμές με κάρτες μέσω λογαριασμών merchant.

    Ενώ όταν κάνω το POST με απλή form και HTML μέσω submit χωρίς κώδικα από την "~/checkout.aspx" όλα δουλεύουν και μου εμφανίζει τη σελίδα success/NoSuccess (π.χ. ~/NotOK.aspx).

    Όταν κάνω το POST μέσω κώδικα δε μου δουλεύει.

    Παρακάτω είναι ο κώδικας που χρησιμοποιώ. H sendPayment() καλείται μέσα σε έναν event handler ενός asp:button.

     private bool sendPayment()
    {     
      //Εάν έχει επιλεγεί πληρωμή μέσω κάρτας, τότε αποστολή των στοιχείων της παραγγελίας στη σελίδα της τράπεζας
            //για χρέωση της κάρτας του πελάτη
            string postData = "+APACScommand+=NewPayment&merchantID=" + sMerchantID + "&amount=" + sAmount + "&merchantRef=" + 
            sRef + "&merchantDesc=" + "ThisIsTest" + "&currency=" + sCurrency + "&lang=&Var1=" + 
            "&Var2=" + "Visa" + "&Var3=&Var4=&Var5=&Var6=" + 
            "Andy%40mymail.com" + "&Var7=&Var8=&Var9=&CustomerEmail=" + "Andy%40mymail.com" + "&Offset=0&Period=0";
            string resp = "";
            resp = PerformRequest(WebRequestMethods.Http.Post, "https://eptest.eurocommerce.gr/proxypay/apacs", postData);
    
            //επιτυχής αποθήκευση
            return true;
        }
    
        /// <summary>
        /// Performs requests to urls by sending data using methods "GET" or "POST"
        /// </summary>
        /// <param name="method">Specified method to send data (POST or GET)</param>
        /// <param name="url">The url which the data are submitted</param>
        /// <param name="data">String with the data</param>
        /// <returns>The response of the server</returns>
        public static string PerformRequest(string method, string url, string data)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.ContentType = "application/x-www-form-urlencoded";
                request.Method = method;
                request.ContentLength = data.Length;
                StreamWriter sWriter = new StreamWriter(request.GetRequestStream());
                sWriter.Write(data);
                sWriter.Close();
                WebResponse response = request.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream());
                string responseString = reader.ReadToEnd();
                reader.Close();
                return responseString;
            }
            catch (HttpException hex)
            {
                return hex.Message;
            }
        }


    Δημοσίευση στην κατηγορία: , , ,
  •  09-01-2011, 16:04 62198 σε απάντηση της 62175

    Re: Post data not working when executed through code C#

    Καλησπέρα KroDevelop,

    Θα βοηθούσε να μας δώσεις και τα παρακάτω στοιχεία:

    1. Τι ακριβώς συμβαίνει όταν λες "δεν δουλεύει"; Έχεις κάποιο συγκεκριμένο μήνυμα σφάλματος;
    2. Η απλή HTML σελίδα και το .Net Post γίνονται από το ίδιο μηχάνημα/IP ή υπάρχει μια τοπολογία client/server; Αυτό το ρωτάω διότι στη μια περίπτωση το Post γίνεται απ' ευθείας από τον client σου ενώ στη δεύτερη (αν μιλάμε για hosted application) γίνεται από το μηχάνημα που γίνεται host η εφαρμογή σου.
    2. Μπορείς να παραθέσεις και τον απλό HTML κώδικα ο οποίος δουλεύει;

    Μια ιδέα για debug θα ήταν να χρησιμοποιήσεις το Fiddler για να δεις τα στοιχεία που αποστέλλονται και λαμβάνονται σε κάθε περίπτωση.

    Ευχαριστώ,
    Βασίλης

  •  13-01-2011, 17:00 62315 σε απάντηση της 62198

    Απ: Re: Post data not working when executed through code C#

    Καλησπέρα vlinakis,

    Καταρχάς σε ευχαριστώ για το χρόνο σου και την απάντηση σου.

    Τώρα για το POST. Όταν λέω "δεν δουλεύει μάλλον εννοώ δεν έχει τα επιθυμητά αποτελέσματα". Δηλαδή δεν εμφανίζει τη σελίδα "Ok.aspx" ή "NotOk.aspx", η οποία πρέπει να γίνεται με μια απάντηση από το σύστημα της τράπεζας.

    Η τοπολογία είναι τύπου client/Server.

    Δοκίμασα το Fiddler και το μόνο που έβγαλα άκρη είναι ότι η σύνδεση με το url που κάνω POST γίνεται κανονικά.

    Παρακάτω είναι και ο κώδικας της απλής φόρμας.

        	  <!--BEGINNING OF PAYMENT FORM-->
    	  <form name="PayformVisa" Method="POST" action="https://eptest.eurocommerce.gr/proxypay/apacs">
            <input type="hidden" Name="APACScommand" value="NewPayment">
            <INPUT TYPE="hidden" Name="merchantID" VALUE="1827">
            <INPUT TYPE="hidden" Name="amount" VALUE="1200">
            <INPUT TYPE="hidden" Name="merchantRef" VALUE="2011" >
            <INPUT TYPE="hidden" Name="merchantDesc" VALUE="DemoShop">
            <INPUT TYPE="hidden" Name="currency" VALUE="0978"> <!--0978 equals Euro-->
            <INPUT TYPE="hidden" Name="lang" VALUE="EN">
            <INPUT TYPE="hidden" Name="Var1" VALUE="VAR">
            <INPUT TYPE="hidden" Name="Var2" VALUE="VAR">
            <INPUT TYPE="hidden" Name="Var3" VALUE="VAR">
            <INPUT TYPE="hidden" Name="Var4" VALUE="VAR">
            <INPUT TYPE="hidden" NAME="Var5" VALUE="VAR">
            <INPUT TYPE="hidden" NAME="Var6" VALUE="VAR">
            <INPUT TYPE="hidden" Name="Var7" VALUE="VAR">
            <INPUT TYPE="hidden" Name="Var8" VALUE="VAR">
            <INPUT TYPE="hidden" Name="Var9" VALUE="VAR">
            <INPUT TYPE="hidden" Name="CustomerEmail" VALUE="[email protected]">
            <INPUT TYPE="hidden" Name="Offset"  VALUE="0">
            <INPUT TYPE="hidden" Name="Period"  VALUE="0">
            <INPUT TYPE="button" VALUE="Visa" onClick="document.PayformVisa.submit();"
    		 width="58" height="39" >
          </form>
          <!-- END OF PAYMENT FORM-->		  
  •  14-01-2011, 09:35 62335 σε απάντηση της 62315

    Re: Απ: Re: Post data not working when executed through code C#

    Καλημέρα,

    Παρατηρώ ότι στο αρχικό σου μήνυμα που παραθέτεις το string που χτίζεις για να κάνεις το form Post γράφει:

    string postData = "+APACScommand+=NewPayment&merchantID=" + sMerchantID + "&amount=" + sAmount + "&merchantRef=" + sRef + "&merchantDesc=" + "ThisIsTest" + "¤cy=" + sCurrency + "&lang=&Var1=" + "&Var2=" + "Visa" + "&Var3=&Var4=&Var5=&Var6=" + "Andy%40mymail.com" + "&Var7=&Var8=&Var9=&CustomerEmail=" + "Andy%40mymail.com" + "&Offset=0&Period=0";

    ίσως αυτό να είναι το λάθος. Λογικά θα έπρεπε να είναι:


    string postData = "+APACScommand=NewPayment&merchantID=" + sMerchantID + "&amount=" + sAmount + "&merchantRef=" + sRef + "&merchantDesc=" + "ThisIsTest" + "¤cy=" + sCurrency + "&lang=&Var1=" + "&Var2=" + "Visa" + "&Var3=&Var4=&Var5=&Var6=" + "Andy%40mymail.com" + "&Var7=&Var8=&Var9=&CustomerEmail=" + "Andy%40mymail.com" + "&Offset=0&Period=0";

    Το δοκιμάζεις να δούμε;

    Ευχαριστώ,
    Βασίλης

  •  14-01-2011, 10:37 62342 σε απάντηση της 62335

    Απ: Re: Απ: Re: Post data not working when executed through code C#

    Γιατί δεν βάζεις ενα break-point στο
    string resp = "";
    Ωστε να δείς το url που σχηματίζεται, πιο πριν, ωστε να το κάνεις copy και να το δοκιμάσεις απο browser;

    Επίσης δοκίμασε να κάνεις και http://msdn.microsoft.com/en-us/library/zttxte6w.aspx πανω στο url πριν το στείλεις, όπως επίσης αντι για POST να κάνεις GET

    Αλλα τι νόημα έχουν όλα αυτά... Σύντομα έρχεται ο νιμπίρου.
    www.egrapses.gr www.funnybook.gr

    Μιχάλης
  •  14-01-2011, 10:41 62343 σε απάντηση της 62342

    Απ: Re: Απ: Re: Post data not working when executed through code C#

    Ρε παιδιά, τέτοια μακαρόνια δεν είναι καλύτερα να τα χειριζόμαστε με την string.format ?
    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  16-01-2011, 18:53 62392 σε απάντηση της 62343

    Post data not working when executed through code C#

    Καλησπέρα σε όλους,

    Μπορώ να πω ότι έχω δοκιμάσει όσα μου ήρθαν στο μυαλό μέχρι στιγμής.

    Δοκίμασα το fiddler και δυστυχώς, δε μου δουλεύει ίσως γιατί είναι "https" και η τράπεζα έχει κάποιον επιπλέον μηχανισμό ελέγχου. Δε γνωρίζω.

    Το συγκεκριμένο POST (Δοκίμασα και με GET) μου επιστρέφει μόνο το url αποτυχίας "NotOk.aspx" μέσα από το "HttpWebResponse.ResponseUri.AbsoluteUri".

    Κάτι που σημαίνει ότι το POST δεν είναι σωστό ή κάτι δε κάνω σωστά σε σχέση με το κάνονικό "submit" της απλής "HTML".

     

  •  16-01-2011, 20:31 62396 σε απάντηση της 62392

    Απ: Post data not working when executed through code C#

    Καλησπέρα και από μένα, 

    Βρήκα αυτό το παράδειγμα (http://stackoverflow.com/questions/26857/how-do-you-programmatically-fill-in-a-form-and-post-a-web-page) στο stackoverflow όπου έχει ένα παράδειγμα για http post μέσω C#. 

    Το μόνο σημείο που διαφέρει με το δικό σου κώδικα είναι ότι αλλάζει τα data που γράφεις στο request stream σε byte[]. και γράφει το byte array στο stream και όχι το string. Ίσως αυτό σε βοηθήσει...

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    WebRequest req = WebRequest.Create("http://mysite/myform.aspx");
    string postData = "item1=11111&item2=22222&Item3=33333";
    
    byte[] send = Encoding.Default.GetBytes(postData);
    req.Method = "POST";
    req.ContentType = "application/x-www-form-urlencoded";
    req.ContentLength = send.Length;
    
    Stream sout = req.GetRequestStream();
    sout.Write(send, 0, send.Length);
    sout.Flush();
    sout.Close();
    
    WebResponse res = req.GetResponse();
    StreamReader sr = new StreamReader(res.GetResponseStream());
    string returnvalue = sr.ReadToEnd();


    Τάσος Καραγιάννης

    Baby debugging steps...
  •  16-01-2011, 20:55 62397 σε απάντηση της 62396

    Απ: Post data not working when executed through code C#

    To δοκίμασα και με την κωδικοποίηση των δεδομένων αποστολής αλλά και πάλι τίποτα.
    Μήπως χρειάζεται κάτι επιπλέον για την αποστολή δεδομένων σε https;
  •  16-01-2011, 23:49 62430 σε απάντηση της 62397

    Απ: Post data not working when executed through code C#

    Δεν νομίζω πως χρειάζεται κάτι παραπάνω για το https. Σε ένα Project μου που χρειάστηκε να κάνω post σε https μέσω κώδικα δεν χρειάστηκε κάτι ιδιαίτερο. 

    Φαντάζομαι πως ότι κάνεις είναι οκ, ίσως η άλλη πλευρά έχει κάποια ιδιαιτερότητα και εκεί σκαλώνει η όλη ιστορία. 
    Όταν κάνεις post μέσω κώδικα, ο server που δέχεται το post βλέπει την πληροφορία Request.UserAgent άδεια. Μήπως δεν δέχεται το post επειδή καταλαβαίνει ότι δεν είναι browser αυτός που κάνει το post. Βάλε λοιπόν στο request σου το UserAgent που έχει ο browser του επισκέπτη της σελίδας σου (γραμμή 8):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
        public static string PerformRequest(string method, string url, string data)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.ContentType = "application/x-www-form-urlencoded";
                request.Method = method;
                request.UserAgent = this.Page.Request.UserAgent;
                request.ContentLength = data.Length;
                StreamWriter sWriter = new StreamWriter(request.GetRequestStream());
                sWriter.Write(data);
                sWriter.Close();
                WebResponse response = request.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream());
                string responseString = reader.ReadToEnd();
                reader.Close();
                return responseString;
            }
            catch (HttpException hex)
            {
                return hex.Message;
            }
        }

    Δεν ξέρω κατά πόσο θα δουλέψει, αλλά είναι η μόνη διαφορά που σκέφτηκα που έχει το post μέσω της html φόρμας και του post μέσω του κώδικα. 


    Τάσος Καραγιάννης

    Baby debugging steps...
  •  17-01-2011, 21:54 62451 σε απάντηση της 62430

    Απ: Post data not working when executed through code C#

    Καλησπέρα Τάσο,

    Σε ευχαριστώ για τη βοήθεια σου.

    Δεν ήταν τελικά το Request.UserAgent, αλλά είχες δίκιο λέγοντας ότι "η άλλη πλευρά έχει κάποια ιδιαιτερότητα και εκεί σκαλώνει η όλη ιστορία".

    Όντως η άλλη πλευρά επέτρεπε μόνο αιτήματα "POST" από το absolute path της checkout.aspx ("http://www.domain.com/checkout.aspx). Έπρεπε να οριστεί το request.Refferer με το path της checkout.aspx για να δεχτεί τα αιτήματα.

     

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems