webForumDet fria alternativet

Betaltjänsten Samport

PHP

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

Frågan, av Ann-Sofie

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\. Vi

Läs frågan i sin helhet →
Medlem sedan mars 2003136 inlägg
#21

jag kopierade koden så får du gärna kolla men jag tycker att jag har gjort som du beskrivit

$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); 
die($Data);

$ExtraData = "#PHPSessionID=xxx#CustomerID=xxx";
$TransactionType = "1";
$ISOLanguage = "SE";
$ISOCurrency = "752";
$DirectCapture = $_GET["att betala"];
Medlem sedan jan. 2003296 inlägg
#22

Det är ett av livets stora mysterier det här ;-)

Nu testade jag att skapa en sida som jag döpte till art.php bara för att försöka testa din kod lite. Jag har i princip kört klipp och klistra från den här tråden.

<?php
$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; 

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

die($Data);

	$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"];
}
?>
<html>
<head>
<title>Test</title>
</head>

<body>
<form method="get"  action="art.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>
</body>
</html>

Jag markerade tre produkter i listan och klickade Betala. Programmet skriver då ut:

1:Medlemsavgiften 2 mån. för en:1:20000,2:Medlemsavgiften 1 mån.:1:20000,4:Middag singlar:1:35000

Medlem sedan mars 2003136 inlägg
#23

ja jag testade också och dina koder funkar ju. Det är troligtvis så att de strider mot någonting annat i php-filen som jag måste ha med från betaltjänstens sida. Tror duatt du skulle se det om du får hela php-filen?

Du kan också gå in och se hur det ska se ut "på riktigt" fast i den här versionen som ligger ute nu är det inte checkboxar utan radioknappar men du ser hur det ser ut när man klickar på betala (du betalar ju inget förrän du har fyllt i kortnummer så det är ju lugnt!!)
Där vill jag ju ha "artiklarna" under varandra och så ska de räknas ihop.

http://www.mingeltraffen.se/betala.html

Medlem sedan jan. 2003296 inlägg
#24

Visst, kan du skicka över hela PHP-filen så kan jag titta på det. Det borde vara något annat som strular, precis som du skriver.

Medlem sedan mars 2003136 inlägg
#25

Hittade inte att man kunde bifoga filer någonstans så jag klistrar väl in hela filen, det får dom bjuda på eller hur? ;)

<?
// ======================================================================================
// Name:     TellusPay Basic / Web
// Author:   Tony Truong 
// Date:     21 Sep 2005
//  
// Requires: PHP
//           
//  
// Copyright © 1999-2005 Samport Payment Services AB, All rights Reserved
// --------------------------------------------------------------------------------------
// Visit Samport Payment Services AB - Payment Service Provider (Int) E-Commerce
// http://www.samport.com or http://www.telluspay.com
// ======================================================================================

// output buffering start
ob_start();
// starter en session
session_start();

// Encrypt function, do not edit!!!

function Encrypt($string, $key)
{
	$result = '';
	for($i=1; $i<=strlen($string); $i++)
	{

		$char = substr($string, $i-1, 1);
		$keychar = substr($key, ($i % strlen($key))-1, 1);
		$temp2 = ord($keychar);
		$temp1 = ord($char);
		$temp3 = $temp1 + $temp2;
		
		if($temp3 > 255)
		{
			$temp3 = $temp3%255;
		}	

		$char = chr($temp3);

		

		$result.=$char;
		
	}
        return asc2hex($result);

}

function asc2hex ($temp) {

   $i = 0;
   $data = '';
   
     
   $len = strlen($temp);
   for ($i=0; $i<$len; $i++) $data.=sprintf("%02x",ord(substr($temp,$i,1)));
   return $data;
}
function hex2asc($temp) {
   $len = strlen($temp);
   for ($i=0;$i<$len;$i+=2) $data.=chr(hexdec(substr($temp,$i,2)));
   return $data;
} 

// Don't forget to URL encode all data types in the message with ISO8859-1.

$TellusPayID = "xxxxx";			// Provided by Samport
$SecretKey = "xxxxxx"; 		// Provided by Samport

$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;

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

$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 = "xxxx";

$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
 
$Data = "TP01=$DirectCapture&TP700=$TellusPayID&TP701=$OrderNo&TP740=$Data&TP901=$TransactionType&TP491=$ISOLanguage&TP490=$ISOCurrency&TP801=$Email&TP8021=$FirstName&TP8022=$LastName&TP803=$Address&TP804=$ZipCode&TP805=$City&TP806=$Country&TP8071=$ID&TP900=$IP&TP950=$ExtraData";
$Data = Encrypt($Data, hex2asc($SecretKey));
$URL = "http://unix.telluspay.com/EncryptedPost/?Data=$Data&TPID=$TellusPayID";
header("Location: $URL");

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

Jadu, några småfel var det i PHP-koden, men jag har ingen aning om vad det är som ger felmeddelandet ärligt talat.

Jag gjorde på nytt en testsida där jag slängde in din PHP-kod, och ändrade lite så att den ser ut enligt följande.

<? 
// ============================================================  ========================== 
// Name:     TellusPay Basic / Web 
// Author:   Tony Truong 
// Date:     21 Sep 2005 
//   
// Requires: PHP 
//            
//   
// Copyright © 1999-2005 Samport Payment Services AB, All rights Reserved 
// -------------------------------------------------------------------------------------- 
// Visit Samport Payment Services AB - Payment Service Provider (Int) E-Commerce 
// http://www.samport.com or http://www.telluspay.com 
// ============================================================  ========================== 

// output buffering start 
ob_start(); 
// starter en session 
session_start(); 

// Encrypt function, do not edit!!! 

function Encrypt($string, $key)
{
    $result = '';
    for($i=1; $i<=strlen($string); $i++)
    {

        $char = substr($string, $i-1, 1);
        $keychar = substr($key, ($i % strlen($key))-1, 1);
        $temp2 = ord($keychar);
        $temp1 = ord($char);
        $temp3 = $temp1 + $temp2;
        
        if($temp3 > 255)
        {
            $temp3 = $temp3%255;
        }    

        $char = chr($temp3);

        

        $result.=$char;
        
    }
        return asc2hex($result);

}

function asc2hex ($temp) {

   $i = 0;
   $data = '';
   
     
   $len = strlen($temp);
   for ($i=0; $i<$len; $i++) $data.=sprintf("%02x",ord(substr($temp,$i,1)));
   return $data;
}
function hex2asc($temp) {
   $data = '';
   $len = strlen($temp);
   for ($i=0;$i<$len;$i+=2) $data.=chr(hexdec(substr($temp,$i,2)));
   return $data;
}

// Don't forget to URL encode all data types in the message with ISO8859-1.

$TellusPayID = "xxxxx";            // Provided by Samport
$SecretKey = "xxxxxx";         // Provided by Samport

$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 = "1";

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

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

$Data = "TP01=$DirectCapture&TP700=$TellusPayID&TP701=$OrderNo&TP740=$Data&TP901=$TransactionType&TP491=$ISOLanguage&TP490=$ISOCurrency&TP8021=$FirstName&TP8022=$LastName&TP803=$Address&TP804=$ZipCode&TP805=$City&TP806=$Country&TP8071=$ID&TP900=$IP&TP950=$ExtraData";
$Data = Encrypt($Data, hex2asc($SecretKey));
$URL = "http://unix.telluspay.com/EncryptedPost/?Data=$Data&TPID=$TellusPayID";
header("Location: $URL");

?>

Jag har testat att skriva ut $Data-variabeln efter att den satts ihop till en jättelång sträng längst ned på sidan, och jag såg inget uppenbart fel. Men då vet jag iofs inte hur den måste se ut för att den ska fungera med Telluspay :-)
Det måste väl vara Telluspay-sidan i sig (den man skickar vidare all data till) som ger felmeddelandet om att något är fel. Den här PHP-koden verkar okej.

Men du måste byta namn på din selectbox som används för att välja land i html-filen förresten. Den hette visst select, men den borde heta land istället.

Medlem sedan mars 2003136 inlägg
#27

Tack för all hjälp - jag lämnade filerna till en kille som löst det via sin firma. Eftersom det första problemet löste sig så markerar jag det som accepterad lösning.
Tack för ditt engagemang!!

299 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
164 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)