Jag står inför uppgiften att utveckla ett ehandel system som ska validera kreditkort mot en betalväxel. Kreditkortsuppgifterna ska skickas till en säker https sida hos betalföretaget med metoden post. Denna ska innehålla en rad variabler (Merchant_id, Customer_id, Response_URL etc). Fortsättningsvis så har jag kollat på detta kodexempel. Någon som har lust att förklara hur det är tänkt att fungera? Vad menar de med "Here typically you should accept the form elements"? Ska jag ta emot något när jag postar? Hej! Svaret kommer väl tillbaka som en vanlig QueryString och bör i så fall tas emot och behandlas som en vanlig QueryString. I din stringPost bygger du helt enkelt upp formulärvariablerna som skall postas in enligt:Skicka https post till betalväxel
Dessa parametrar ska sedan läggas på anropsadressen enligt: https://betalforetagsadress.se/betalmodul?Merchant_id=432&Customer_id=123&Response_URL=https://www.varanbutik.se/sidaSomTarEmotSvar.aspx
Nu är det så att jag har svårt att förstå hur man ska gå till väga. Har läst lite om HttpWebRequest och misstänker att man kan göra ett "post" anrop med denna klass. Typ:
<code>
string paymentProviderUrl="https://betalforetagsadress.se/betalmodul";
HttpWebRequest objHttpWebRequest = (HttpWebRequest)WebRequest.Create(paymentProviderUrl);
</code>
Frågan är då, nån som vet hur man gör? Och vart ska parametrarna läggas in?
Kan man göra som nedan?
<code>
string paymentProviderUrl="https://betalforetagsadress.se/betalmodul?Merchant_id=432&Customer_id=123&Response_URL=https://www.varanbutik.se/sidaSomTarEmotSvar.aspx
";
</code>
Och hur skickar man det hela sen? Och hur tar man emot svaret? Med HttpWebResponse? Eller kan jag läsa som vanlig Request.Querystring?
Mitt alternativ om jag inte får till det här blir nog till att testa att lägga ett vanligt formulär, populera det med gömda <input> textboxar och få det att postas vid någon event. Inser att jag inte kan använd standard <form runat="server"> eftersom denna inte går att posta till en annan sida. Så det får bli ett nytt formulär under.
<code>
<form action="https://betalforetagsadress.se/betalmodul" method="post">
<input type="hidden" name="Merchant_id" value="432">
<input type="hidden" name="Customer_id" value="321">
<input type="hidden" name="Response_URL" value="https://www.varanbutik.se/sidaSomTarEmotSvar.aspx">
</form>
</code>
All info om detta skulle uppskattas oerhört mycket! Jag återkommer om när jag har testat lite för att berätta hur det gått. Det blir nog en hel del hinder på vägen känns det som.
/JeppeSv: Skicka https post till betalväxel
<code>
string stringPost = Request.Form.ToString(); // remember a post is essentially a string delimited in a special way
...
// Here typically you should accept the form elements (e.g., Request.Form.Get("txn_id")) and store them in local variables.
...
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://betalforetagsadress.se/betalmodul");
httpWebRequest.Method = "POST";
httpWebRequest.ContentLength = stringPost.Length + 21; // length plus 21 because &cmd=_notify-validate is 21 chars long
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
StreamWriter streamWriter = null;
streamWriter = new StreamWriter(httpWebRequest.GetRequestStream());
stringPost = stringPost + "&cmd=_notify-validate";
streamWriter.Write(stringPost);
streamWriter.Close();
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream()))
{
stringResult = streamReader.ReadToEnd();
streamReader.Close();
}
</code>Sv: Skicka https post till betalväxel
Har kört fast på precis samma problem. Har också provat HttpwebRequest men då redirectas jo aldrig användaren till sidan, utan din webbläsare läser in den.
hittade en 3e parts komponent som skall kunna göra detta.
http://www.xrmsystems.com/Desktopdefault.aspx?tabindex=2&tabid=59
Har dock inte provat ännu.
peterSv:Skicka https post till betalväxel
Så gör jag i kommunikationen med Postens Betalväxel (visserligen med ASP/VBScript).Sv:Skicka https post till betalväxel
var1=value1&var2=value2
Kom ihåg att varje värde måste UrlEncodeas.
För att klara https behöver du denna klass
Public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy
{
public TrustAllCertificatePolicy() {}
public bool CheckValidationResult(ServicePoint sp,
X509Certificate cert,
WebRequest req,
int problem)
{
return true;
}
}
innan du postar:
System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();