Just nu i M3-nätverket
Jump to content

POST mellan fönster


Kevinr

Recommended Posts

Hej!

 

Jag har tampats med ett till synes enklet problem. Min applikation postar data till ett popup-fönster för kortbetalning som tillhör en tredjepart. Om transaktionen går vägen kallar denna på en ASP-fil (accept.ASP) denna postar i sin tur tillbaka detaljer om transaktionen till min sida. Tanken är då att man ska komma tillbaka till SAMMA fönster. Men icke sa nicke. Av någon anledning så i Explorer så öppnas ett helt nytt fönster och i Firefox så öppnas min mottagarsida i popupsidan.

 

För att hålla koll på vilket fönstret var så namnger jag det innan jag öpppnar popup-fönstret:

 

<script type=[GRÅ]"text/javascript"[/GRÅ]>
var newwin = [color="#0000ff"]Null[/color];
[color="#0000ff"]Function[/color] doPopup_tbar() {
  window.name=[color="#006400"]'shopwin';[/color]
  newwin = window.open([color="#006400"]'', 'paywin', 'status,scrollbars,width=550,height=600,top=300,left=200');[/color]
  newwin.focus();
  return [color="#0000ff"]True[/color];
}
</script>

 

För att komma tillbaka så kör accept.asp följande:

 

[log]

[b]Response[/b].write [GRÅ]"<form method="[/GRÅ][GRÅ]"post"[/GRÅ][GRÅ]" name="[/GRÅ][GRÅ]"ReturnFromDIBSForm"[/GRÅ][GRÅ]" action="[/GRÅ][GRÅ]"http://www.xxxxx.se/orderlagd.asp"[/GRÅ][GRÅ]" target="[/GRÅ][GRÅ]"shopwin"[/GRÅ][GRÅ]">"[/GRÅ] & VbCrLf
[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] inputField [color="#0000ff"]In[/color] [b]Request[/b].[color="#0000ff"]For[/color]m
	[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] inputValue [color="#0000ff"]In[/color] [b]Request[/b].Form(inputField)
		[b]Response[/b].write [GRÅ]"<input type="[/GRÅ][GRÅ]"hidden"[/GRÅ][GRÅ]" name="[/GRÅ][GRÅ]""[/GRÅ] & inputField & [GRÅ]""[/GRÅ][GRÅ]" value="[/GRÅ][GRÅ]""[/GRÅ] & inputValue & [GRÅ]""[/GRÅ][GRÅ]"/>"[/GRÅ] & VbCrLf
	[color="#0000ff"]Next[/color]
[color="#0000ff"]Next[/color]
[b]Response[/b].write [GRÅ]"<input type="[/GRÅ][GRÅ]"button"[/GRÅ][GRÅ]" value="[/GRÅ][GRÅ]"Posta och Stäng"[/GRÅ][GRÅ]" onClick="[/GRÅ][GRÅ]"document.ReturnFromDIBSForm.submit(); self.close()"[/GRÅ][GRÅ]">"[/GRÅ] & VbCrLf 
[b]Response[/b].write [GRÅ]"</form>"[/GRÅ] & VbCrLf

[/log]

 

På något sätt så känns det som att window.name har försvunnit.

 

Är det någon med mycket erfarenhet som kan ge mig tips om vad som kan spöka här? Känner någon igen beteendet? Jag har sökt hjälp på lite olika ställen, men än har jag inte hittat någon som knäckt detta!

 

Mvh,

 

/Kevinr

 

[inlägget ändrat 2007-03-07 10:42:43 av Kevinr]

[inlägget ändrat 2007-03-07 10:43:28 av Kevinr]

Link to comment
Share on other sites

Om jag fattar det rätt så skickar du formuläret fel:

 

I ditt första skript så anger du namnet på aktuellt fönster, alltså det fönster där javascriptet ligger, till "shopwin".

 

Sen öppnar du ett nytt fönster som du kallar "paywin", men som inte får någon fil att bearbeta. Du öppnar alltså ett tomt fönster om jag förstår det rätt.

 

Formuläret i accept.asp skickar du sedan till "shopwin" varefter du stänger det fönster som accept.asp ligger i.

 

Av den information du givit, kan jag dock inte säga om det är något fel, för jag vet inte i vilken fil och vilket fönster som ditt javascript ligger, och inte vet jag i vilket fönster accept.asp körs i.

 

Link to comment
Share on other sites

Ok, jag ska försöka förtydliga mig lite.

 

Processen består av i princip av fyra steg:

 

1. Från mitt shoppningfönster shop.asp så öppnar jag ett popupfönster. Popupfönstret får namnet 'paywin' och shoppingfönstret 'shopwin'. I popupfönstret öppnas initpay.asp

 

[log]

<a onclick=[GRÅ]"return doPopup();"[/GRÅ] href=[GRÅ]"initpay.asp"[/GRÅ] target=[GRÅ]"paywin"[/GRÅ]>Öppna betalfönster</a>

<script type=[GRÅ]"text/javascript"[/GRÅ]>
var newwin = [color="#0000ff"]Null[/color];
[color="#0000ff"]Function[/color] doPopup_tbar() {
  window.name=[color="#006400"]'shopwin';[/color]
  newwin = window.open([color="#006400"]'', 'paywin', 'status,scrollbars,width=550,height=600,top=300,left=200');[/color]
  newwin.focus();
  return [color="#0000ff"]True[/color];
}
</script>

[/log]

 

2. Initpay.asp postar detaljer om betlningen till https://payment.architrade.com/payment/start.pml, en tredje part lev.

 

[log]

<form method=[GRÅ]"post"[/GRÅ] name=[GRÅ]"HF"[/GRÅ] action=[GRÅ]"https://payment.architrade.com/payment/start.pml"[/GRÅ]> 
<input type=[GRÅ]"hidden"[/GRÅ] name=[GRÅ]"merchant"[/GRÅ] value=[GRÅ]"4209060"[/GRÅ]>
<input type=[GRÅ]"hidden"[/GRÅ] name=[GRÅ]"currency"[/GRÅ] value=[GRÅ]"752"[/GRÅ]> 
<input type=[GRÅ]"hidden"[/GRÅ] name=[GRÅ]"accepturl"[/GRÅ] value=[GRÅ]"http://www.xxx.se/accept.asp"[/GRÅ]>
<input type=[GRÅ]"hidden"[/GRÅ] name=[GRÅ]"callbackurl"[/GRÅ] value=[GRÅ]"http://www.xxx.se/callback.asp"[/GRÅ]>
<input type=[GRÅ]"hidden"[/GRÅ] name=[GRÅ]"cancelurl"[/GRÅ] value=[GRÅ]"http://www.xxx.se/cancel.asp"[/GRÅ]>

<br><br><input type=[GRÅ]"submit"[/GRÅ] value=[GRÅ]"Starta betalningen"[/GRÅ]>
</form>

[/log]

 

3. När betalningen har godkännts så öppnas accept.asp i popup-fönstret.

accept.asp gör följande:

 

[log]

[b]Response[/b].write [GRÅ]"<form method="[/GRÅ][GRÅ]"post"[/GRÅ][GRÅ]" name="[/GRÅ][GRÅ]"ReturnFromDIBSForm"[/GRÅ][GRÅ]" action="[/GRÅ][GRÅ]"http://www.xxxa.se/orderlagd.asp"[/GRÅ][GRÅ]" target="[/GRÅ][GRÅ]"shopwin"[/GRÅ][GRÅ]">"[/GRÅ] & VbCrLf
[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] inputField [color="#0000ff"]In[/color] [b]Request[/b].[color="#0000ff"]For[/color]m
	[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] inputValue [color="#0000ff"]In[/color] [b]Request[/b].Form(inputField)
		[b]Response[/b].write [GRÅ]"<input type="[/GRÅ][GRÅ]"hidden"[/GRÅ][GRÅ]" name="[/GRÅ][GRÅ]""[/GRÅ] & inputField & [GRÅ]""[/GRÅ][GRÅ]" value="[/GRÅ][GRÅ]""[/GRÅ] & inputValue & [GRÅ]""[/GRÅ][GRÅ]"/>"[/GRÅ] & VbCrLf
	[color="#0000ff"]Next[/color]
[color="#0000ff"]Next[/color]
[b]Response[/b].write [GRÅ]"<input type="[/GRÅ][GRÅ]"button"[/GRÅ][GRÅ]" value="[/GRÅ][GRÅ]"Posta och Stäng"[/GRÅ][GRÅ]" onClick="[/GRÅ][GRÅ]"document.ReturnFromDIBSForm.submit(); self.close()"[/GRÅ][GRÅ]">"[/GRÅ] & VbCrLf 
[b]Response[/b].write [GRÅ]"</form>"[/GRÅ] & VbCrLf

[/log]

 

4. Tanken är att jag ska kunna komma tillbaka till fönstret där shop.asp är öppet och istället ladda orderlagd.asp enligt kodsnutten ovan.

 

 

Det är just sista steget som går snett. i Explorer så öppnas helt enkelt ett nytt fönster och i Firefox öppnas orderlagd.asp i betalfönstret ('paywin'). Koden ovan kommenderar ju dessutom self.close() vilket inte händer i Firefox-fallet.

 

Hoppas det gav en tydligare bild, annars förtydligar jag gärna ytterligare. Tacksam för hjälp!

 

Mvh,

Kevinr

 

 

 

 

 

 

[inlägget ändrat 2007-03-07 11:59:59 av Kevinr]

[inlägget ändrat 2007-03-07 12:02:41 av Kevinr]

Link to comment
Share on other sites

Har också liknande lösningar med iDeb/Dibs och hade samma trassel, främst med tanke på att det var beroende av popups (brrr). Bytte därför till API Integration-metoden istället...

 

Nåja, när jag kollar på gammal kod jag har liggandes så vet jag att jag fick jag till det någorlunda på detta sätt (anpassat så gått det går för att passa ditt exempel).

 

[log]

cashier.asp Både öppnar popupen och "byter" sida till resultatsidan.

<script type="text/javascript">
<!--
 var newPayWin = null;
 function doPopup() {
   newPayWin = window.open('', 'paywin', 'scrollbars,status,width=550,height=600');
   newPayWin.focus();
   return true;
}
//-->
</script>
<form name="payForm" action="https://payment.architrade.com/payment/start.pml" onSubmit="doPopup(this); self.location.href='result.asp?paystat=wait';" target="paywin" method="post">
<!-- massa (hidden) fält -->
<input type="hidden" name="accepturl" value="http://xxxx.xxx/resultWin.asp?paystat=completed">
<input type="hidden" name="cancelurl" value="http://xxxx.xxx/resultWin.asp?paystat=aborted">
<!-- massa andra hidden fält -->
<input name="submit"type="submit" value="Öppna betalfönstret">
</form>

 

result.asp Är den sida som visar besökaren hur det gick.

Extremt förenklad:

<%
' Ta emot order id och resultatsstatus och lägg i lämpliga variabler
IF transactionStatus="wait" THEN
  ' Visa bild/text som informerar om att vi väntar på betalfönstret
ELSE
     IF transactionStatus="failed" THEN
        ' Visa felmeddelande
     END IF 

     IF transactionStatus="denied" THEN
        ' Visa nekat köp meddelande
     END IF

     IF transactionStatus="completed" THEN
        ' Visa kvitto
     END IF

     IF transactionStatus="aborted" THEN 
        ' Visa köp avbrutet
     END IF
END IF
%>

 

resultWin.asp Är det skript som tar emot resultat från betlningsleverantören.

OBS! ej callback-sidan (utan enbart för att visa besökaren).

<% 
nextPage = "http://xxxx.xxx/result.asp?paystat="&Request("paystat")&"&orderid="&Request("orderid")
%>
<script type="text/javascript">
 opener.location.href = '<%=nextPage%>'; 
 self.close();
</script>

[/log]

 

Hoppas du får ihop något utav detta, annars är det bara fråga på.

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

 

Link to comment
Share on other sites

Skönt att höra att det inte bara är jag som tycker denna metod/lösning är knölig! Inte ens supporten på DIBS har kunnat hjälpa mig, så ett stort tack, verkligen!! Poäng!

 

En fråga bara, så här långt. I din kod så kör du doPopup(this), men funktionen tar inga argument?

 

Efter sju svåra år och tretton bedrövelser så hittade jag troligen orsaken till att jag inte fick det hela att fungera. Skulle vilja höra din synpunkt på det. I koden nedan så anger jag window.name inuti en funktion. Räckvidden för denna "variabel" är väl enbart inom den funktionen? Flyttar jag ut namngivningen och lägger den i grundsidan, så funkar det.

 

[log]

<a onclick="return doPopup();" href="initpay.asp" target="paywin">Öppna betalfönster</a>

<script type="text/javascript">
var newwin = Null;
Function doPopup_tbar() {
 window.name='shopwin';
 newwin = window.open('', 'paywin', 'status,scrollbars,width=550,height=600,top=300,left=200');
 newwin.focus();
 return True;
}
</script>

[/log]

 

Däremot så dyker ett annat intressant fenomen upp, för en testanvändare som kör Firefox. När han återvänder från DIBS fönster så har sessionsvariblerna nollats och SessionID förnyats. Har du någon aning om vad det kan tänkas bero på? Jag använder en sessionsvariabel för att hålla koll på huruvida en användare är inloggad eller ej. Ännu märkligare är att jag själv inte får detta beteende när jag kör Firefox.

 

Återigen stort tack!!

/Kevin

 

 

Link to comment
Share on other sites

Javaskript är inte riktigt min grej måste jag erkänna...

window.name='shopwin'; sätter som du säger namn på det fönster som du "är" i. Men det är väl inget problem att sätta namnet på onLoad istället om så skulle behövas. Då vet du ju när och var det sätts.

Vad gäller doPopup(this) så är nog this bara en kvarleva från olika tester.

 

Har för mig att jag också hade problem med sessionerna och tror att det bland annat var därför som jag tog den väg beskrivs ovan.

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...