webForumDet fria alternativet

Betaltjänsten Samport

PHP

26 svar · 1 502 visningar · startad av Ann-Sofie

Medlem sedan mars 2003136 inlägg
Frågan#1

Jag ska implementera en betaltjänst åt en kund som valt Samport. Jag har fått ok hjälp från supporten men nu har jag kört fast på en ganska väsentlig del, nämligen hur jag får över produkterna till php-filen där hela ordern räknas samman....

1. Det finns en html fil där besökare fyller i sina personuppgifter samt kryssar i vad han/hon beställer. T.ex. ett medlemskap i en månad för 200kr.

2. Via en php-fil skickas kunden till Samports betal-sida där uppgifterna kunden fyllde i html-filen syns. Jag har lyckats med medlemsnummer, namn, adress o.s.v. men inte med i det här fallet medlemskapet.

Nån som gjort detta och som hajar vad jag pratar om?

All annan info som jag fört över har jag använt:

$Name = $_GET["realname"];

När det gäller produkterna har jag i html-filen ett formulär där man väljer med radioknappar. I php-filen har jag gjort som ovan med Name men även enligt Samports instruktioner:

"Sedan ser du till att "produkterna" ser ut enligt följande:
Artikelnr:Description:Quantity:Price;
1:Middag:1:250;
Om man har flera produkter separeras dessa med kommatecken.

Nu har min kund inte så många produkter (tjänster) men om man har en webbshop med flera hundra produkter kan väl inte meningen vara att man ska fylla i alla? Dessutom funkar det inte när jag gör det eftersom alla produkter visas hela tiden.... Det registreras inte att jag väljer en produkt.

Så här har jag gjort i min php-fil och det är här jag förstår att det är något fel:

$Data = "1:Medlemsavg. 2 mån för 1:1:20000,2:Medlemsavgift 1 mån:1:20000,3:Medlemsavgift 3 mån:1:45000,4:Middag singlar:1:35000,5:Middag vänner:1:35000,6:Aktivitet singelföräldrar:1:30000,7:Annan aktivitet:1:40000";

Jag blir snart galen... hoppas verkligen någon här på forumet har klurat ut hur man gör detta.... Det enda jag ska få att fungera nu är att när kunden gör ett val i formuläret så ska det valet registreras som en order i orderlistan.

Trött och konfys.

Medlem sedan juni 20034 013 inlägg
#2

Artikelnr:Description:Quantity:Price låter ju som att det är ordern de vill ha, inte hela listan med alla produkter.

Normalt har man ju en databas, men eftersom det i ditt fall inte är så många produkter kan du ju lägga dem i arrayer i php-koden:

$description[1] = "Medlemsavg. 2 mån för 1";
$description[2] = "Medlemsavgift 1 mån";
$description[3] = "Medlemsavgift 3 mån";
osv...

$price[1] = 20000;
$price[2] = 20000;
$price[3] = 45000;
osv...

I html-koden har du då:

2 månader för 1 månad: <input type="radio" name="artikelnr" value="1">
1 månad: <input type="radio" name="artikelnr" value="2">
3 månader: <input type="radio" name="artikelnr" value="3">

osv...

Då hittar du ju valt artikelnummer i $_GET['artikelnr']...

$artikelnr = $_GET['artikelnr'];

och $Data blir då:

$Data = $artikelnr . ":" . $description[$artikelnr] . ":1:" . $price[$artikelnr];

Medlem sedan mars 2003136 inlägg
#3

Fantastiskt - det funkar!! Stort mega-space-tack till dig Tydal som hjälpte mig så snabbt mot vad supporten har gjort under en månads tid!!!

Finns inte ord att tacka!!
ann-sofie

Medlem sedan mars 2003136 inlägg
#4

Nu drar jag upp den här tråden igen då jag behöver ändra förutsättningarna. Som koden är idag kan kunden välja ett alternativ (en artikel , description) men hur ändrar jag om kunden ska kunna välja flera?

Medlem sedan jan. 2003296 inlägg
#5

Såhär kanske?

2 månader för 1 månad: <input type="checkbox" name="artikelnr[]" value="1">
1 månad: <input type="checkbox" name="artikelnr[]" value="2">
3 månader: <input type="checkbox" name="artikelnr[]" value="3">
$artikelnr = $_GET['artikelnr'];

$artArr = array();
foreach ($artikelnr as $art)
{
	$artArr[] = $art . ":" . $description[$art] . ":1:" . $price[$art];
}

$Data = implode(',', $artArr);
Medlem sedan mars 2003136 inlägg
#6

Fånga upp värde från html-formuläret

Jag drar all kod tror jag för när jag inte själv förstår så är det svårt att veta exakt vilka utdrag ni som förstår behöver se...
(fick ingen hjälp av Samport, förstår inte varför vi fick infon att man inte behöver kunna PHP för att få igång betaltjänsten...)

Jag vill alltså att kunden ska kunna välja mer än ett alternativ i formuläret och sedan ska detta plockas upp i php-filen. Som det är nu kan man fylla i flera alternativ men det är bara det sista som förs över till php-filen.

<form method="get"  action="http://www.domänen.se/filename.php">
<br/>
<table width="780" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="34">&nbsp;</td>
    <td colspan="2" class="rubrik">Betala</td>
    <td width="123">&nbsp;</td>
    <td width="18">&nbsp;</td>
    <td width="71">&nbsp;</td>
    <td width="225">&nbsp;</td>
    <td width="19">&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td colspan="2" class="rubrik">&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td colspan="6" class="bread">H&auml;r fyller du i dina val och kontaktuppgifter, n&auml;r du v&auml;ljer <em>betala</em> slussas du vidare till v&aring;r betaltj&auml;nst som drivs av Samport. Med den kan du tryggt anv&auml;nda ditt kontokort! </td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td colspan="6" class="bread">&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td colspan="6" class="bread">&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td width="32"><input type="checkbox" name="artikelnummer" value="1"/></td>
    <td width="258" class="bread">Medlemsavgift 200 kr (2 m&aring;n f&ouml;r 1) </td>
    <td class="red">Starterbjudande!</td>
    <td>&nbsp;</td>
    <td class="bread">F&ouml;rnamn:</td>
    <td><input type="text" size="30" name="fornamn"/></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td width="32"><input type="checkbox" name="artikelnummer" value="2"/></td>
    <td width="258" class="bread">Medlemsavgift 200 kr (1 m&aring;n) </td>
  
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td class="bread">Efternamn:</td>
    <td><input type="text" size="30" name="efternamn"/></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
   <td width="32"><input type="checkbox" name="artikelnummer" value="3"/></td>
    <td width="258" class="bread">Medlemsavgift 450 kr (3 m&aring;n) </td>
  
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td class="bread">Gatuadress:</td>
    <td><input type="text" size="30" name="adress"/></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>Postnr:</td>
    <td><input type="text" size="30" name="postnummer"/></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td width="32"><input type="checkbox" name="artikelnummer" value="4"/></td>
    <td width="258" class="bread">Middag singlar  350 kr </td>
  
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td class="bread">Ort:</td>
    <td><input type="text" size="30" name="ort"/></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td width="32"><input type="checkbox" name="artikelnummer" value="5"/></td>
    <td width="258" class="bread">Middag v&auml;nner  350 kr </td>
  
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>Land:</td>
    <td><select name="select" id="select">
        <option selected>v&auml;lj h&auml;r</option>
        <option value="25">Sverige</option>
      </select>    </td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
   <td width="32"><input type="checkbox" name="artikelnummer" value="6"/></td>
    <td width="258" class="bread">Aktivitet singelf&ouml;r&auml;ldrar 170 kr </td>
  
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td width="32">&nbsp;</td>
    <td colspan="2" class="bread">&nbsp;</td>
  
    <td>&nbsp;</td>
    <td>Medlemsnr:<br/>
      (personnr)</td>
    <td><input type="text" size="30" name="medlemsnummer"/></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td class="bread">&nbsp;</td>
    <td>&nbsp;
      <input name="submit" type="submit" value="Betala" /></td>
    <td>&nbsp;</td>
  </tr>
</table>
</form>

och här är den delen av php-filen som tar upp värde från html-filen:

$description[1] = "Medlemsavgiften 2 mån. för en";
$description[2] = "Medlemsavgiften 1 mån.";
$description[3] = "Medlemsavgiften 3 mån.";
$description[4] = "Middag singlar";
$description[5] = "Middag vänner";
$description[6] = "Aktivitet singelföräldrar";

$price[1] = 20000;
$price[2] = 20000;
$price[3] = 45000;
$price[4] = 35000;
$price[5] = 35000;
$price[6] = 17000;

$OrderNo = $_GET["medlemsnummer"];
$Data = $artikelnummer.":".$description[$artikelnummer].":1:".$price[$artikelnummer];
$ExtraData = "#PHPSessionID=XXXXXXX#CustomerID=XXXXX";
$TransactionType = "1";
$ISOLanguage = "SE";
$ISOCurrency = "752";
$DirectCapture = $_GET["att betala"];

$FirstName = $_GET["fornamn"];
$LastName = $_GET["efternamn"];
$Address = $_GET["adress"];
$ZipCode = $_GET["postnummer"];
$City = $_GET["ort"];
$Country = $_GET["land"];
$ID = "XXXXXXX";
$IP = "XXXXXXX";

$Medlavg2for1 = $_GET["medlemsavgift 200 kr (2 m&aring;n f&ouml;r 1)"];
$Medlavg1man = $_GET["medlemsavgift 200 kr (1 m&aring;n)"];
$Medlavg3man = $_GET["Medlemsavgift 450 kr (3 m&aring;n)"];
$Middagsinglar350kr = $_GET["Middag singlar  350 kr"];
$Middagvenner350kr = $_GET["Middag v&auml;nner  350 kr"];
$Aktivitetsingelforaldrar = $_GET["Aktivitet singelf&ouml;r&auml;ldrar"];

// Check the technical manual for additional data types / flags
 

?>
Medlem sedan jan. 2003296 inlägg
#7

Du får nog byta namn från artikelnummer till artikelnummer[] på dina checkboxar.
Alltså

<input type="checkbox" name="artikelnummer[]" value="1"/>

och sen likadant på alla övriga artikelnummer-checkboxar.

Och i PHP-koden:

$OrderNo = $_GET["medlemsnummer"];
$artikelnr = $_GET["artikelnummer"];
$artArr = array();
foreach ($artikelnr as $art)
{
	$artArr[] = $art . ":" . $description[$art] . ":1:" . $price[$art];
}
$Data = implode(",", $artArr);
$ExtraData = "#PHPSessionID=XXXXXXX#CustomerID=XXXXX";

Och så har du en del konstigheter i din PHP-kod i övrigt... Till exempel

$DirectCapture = $_GET["att betala"];

$Medlavg2for1 = $_GET["medlemsavgift 200 kr (2 m&aring;n f&ouml;r 1)"]; 
$Medlavg1man = $_GET["medlemsavgift 200 kr (1 m&aring;n)"]; 
$Medlavg3man = $_GET["Medlemsavgift 450 kr (3 m&aring;n)"]; 
$Middagsinglar350kr = $_GET["Middag singlar  350 kr"]; 
$Middagvenner350kr = $_GET["Middag v&auml;nner  350 kr"]; 
$Aktivitetsingelforaldrar = $_GET["Aktivitet singelf&ouml;r&auml;ldrar"];

förstår jag inte riktigt vad du vill göra med.

Medlem sedan mars 2003136 inlägg
#8

Tack för hjälpen men tyvärr får jag felmeddelande. Den känner inte av att jag har gjort något artikelval alls nu...

Jag förstår inte heller riktigt koden kan jag ju säga då jag är otroligt novis på just PHP men de har vissa kriterier på hur det ska se ut och ett är ang. just beställningen av artiklar att det ska vara:

$Data = $artikelnummer.":".$description[$artikelnummer].":1:".$price[$artikelnummer];

Det sista citatet du klistrade in från min kod trodde jag var att det är det som efter GET som kunden ser att de har beställt?!?

Fler idéer?

Medlem sedan jan. 2003296 inlägg
#9

Nja, så blir koden om du bara har en artikel. Men om du har flera artiklar så ska alla komma efter varandra, separerade med kommatecken (om jag förstår dina tidigare inlägg rätt). Min kod borde göra så att $Data-variabeln innehåller alla produkter som valts, separerade med just kommatecken.

Vad exakt får du för felmeddelande? Och hur ser ändringarna i PHP-koden ut?

Medlem sedan mars 2003136 inlägg
#10

Felmeddelandet lyder:
Format Error, missing product name, please try again or contact shop administrator

Men om man måste separera de olika artiklarna med kommatecken, kan jag inte på något sätt göra det i
$Data = $artikelnummer.":".$description[$artikelnummer].":1:".$price[$artikelnummer];

Hur tror du att det skulle se ut isåfall?

Medlem sedan jan. 2003296 inlägg
#11

Det är det jag gjorde i min kod tidigare. Testade du den?

$artikelnr = $_GET["artikelnummer"]; 
$artArr = array(); 
foreach ($artikelnr as $art) 
{ 
    $artArr[] = $art . ":" . $description[$art] . ":1:" . $price[$art]; 
} 
$Data = implode(",", $artArr);
Medlem sedan mars 2003136 inlägg
#12

Ja jag försökte men det var då jag fick felkoden ovan, precis som den inte känner av några artiklar.

Du kan dubbelkolla om du vill, så här såg koderna ut efter att jag testade dina ändringar:

$description[1] = "Medlemsavgiften 2 mån. för en";
$description[2] = "Medlemsavgiften 1 mån.";
$description[3] = "Medlemsavgiften 3 mån.";
$description[4] = "Middag singlar";
$description[5] = "Middag vänner";
$description[6] = "Aktivitet singelföräldrar";

$price[1] = 20000;
$price[2] = 20000;
$price[3] = 45000;
$price[4] = 35000;
$price[5] = 35000;
$price[6] = 17000;

$OrderNo = $_GET["medlemsnummer"]; 
$artikelnr = $_GET["artikelnummer"]; 
$artArr = array(); 
foreach ($artikelnr as $art) 
{ 
    $artArr[] = $art . ":" . $description[$art] . ":1:" . $price[$art]; 
} 
$Data = implode(",", $artArr); 

$ExtraData = "#PHPSessionID=xxx#CustomerID=xxx";
$TransactionType = "1";
$ISOLanguage = "SE";
$ISOCurrency = "752";
$DirectCapture = $_GET["att betala"];

$FirstName = $_GET["fornamn"];
$LastName = $_GET["efternamn"];
$Address = $_GET["adress"];
$ZipCode = $_GET["postnummer"];
$City = $_GET["ort"];
$Country = $_GET["land"];
$ID = "xxx";
$IP = "xxx";

$Medlavg2for1 = $_GET["medlemsavgift 200 kr (2 m&aring;n f&ouml;r 1)"];
$Medlavg1man = $_GET["medlemsavgift 200 kr (1 m&aring;n)"];
$Medlavg3man = $_GET["Medlemsavgift 450 kr (3 m&aring;n)"];
$Middagsinglar350kr = $_GET["Middag singlar  350 kr"];
$Middagvenner350kr = $_GET["Middag v&auml;nner  350 kr"];
$Aktivitetsingelforaldrar = $_GET["Aktivitet singelf&ouml;r&auml;ldrar"];
<td width="32"><input type="checkbox" name="artikelnummer[]" value="4"/></td>
Medlem sedan jan. 2003296 inlägg
#13

Jag tycker det ser rätt ut faktiskt.
Om du lägger till

die($Data);

direkt efter

$Data = implode(",", $artArr);

så borde programmet avbryta och skriva ut vad $Data innehåller. Kan du testa och se vad som skrivs ut?

Medlem sedan mars 2003136 inlägg
#14

..suck då är jag tillbaka till att den sista artikeln jag kryssar i kommer upp i php-filen men inte de första.

Medlem sedan jan. 2003296 inlägg
#15

Innehåller $Data bara en artikel alltså? Och alla checkboxar heter artikelnummer[] i HTML-koden, så det ligger inte kvar någon/några som heter artikelnummer (utan [] på slutet)?

Medlem sedan mars 2003136 inlägg
#16

Nu har jag gått igenomn koden supernoga och alla checkboxar heter verkligen bara artikelnummer[]

(är bara 6 artiklar så det är inte så svårt att kolla heller)

När jag väljer betala så kommer felmeddelandet upp. när jag tar bort [] så det bara står artikelnummer kommer endast en artikel upp oavsett hur många jag har klickat i.

Medlem sedan jan. 2003296 inlägg
#17

Jo, namnet måste sluta med [], annars tar PHP bara emot ett värde. Men varför det blir fel vet jag inte riktigt då.
Testade du att lägga till die($Data); ? Och vad exakt skrevs i så fall ut av programmet?

Medlem sedan mars 2003136 inlägg
#18

Felmeddelandet:
Format Error, missing product name, please try again or contact shop administrator!

Du tror inte att man ska lägga upp alla 6 artiklarna separerade med kommatecken i $Data?

Medlem sedan mars 2003136 inlägg
#19

Så här skrev supporten om det kan hjälpa till, jag förstod inte vad hon menade:

"Du kan tex ha en variabel som heter Producter. Sedan får du ha en if-sats eller liknande som gör så att om ett fält eller en radiobutton inte är ifylld så ska inte denna tas med, men om det är något i fältet ska denna data läggas i variablen. Du får lägga in kolon emellan produktnummer och beskrivning precis som innan och separera de olika produkterna med kommatecken. Tillslut kommer strängen att se ut precis som du ”hårdkodade” i php-filen och du skickar iväg denna sträng till php-filen (…. + "&strProducter=" + Producter +) och hämtar den med hjälp av tex Request.QueryString("strProducter")"

Medlem sedan jan. 2003296 inlägg
#20

Skrivs det där felmeddelandet verkligen ut om du lägger till die($Data); direkt efter raden med implode..? Det låter väldigt konstigt... Det borde skrivas ut vad variabeln i sig innehåller.

275 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)