Avatar billede dalixam Nybegynder
16. december 2005 - 13:28 Der er 2 kommentarer

Opsæt eDankort betaling på dandomain.dk

Jeg har oprettet en side med dankort-betaling, som er hostet ved dandomain.dk og alt virker fint, men nu skal jeg tilføje muligheden for at brugeren kan vælge at betale med eDankort i stedet og her går det alt. Jeg har taget dandomain's PHP eksempel og kun ændret enkle ting, såsom url til ok/fejl sider og sådan.

Problemet er, at betalingen altid bliver afvist af PBS. Efter indtastning af koder osv. i min netbank bliver jeg sendt til den angivne fejlside med errorcode 4 (afvist). Jeg kan ikke se, hvad der er galt. Jeg har snakket med dandomain og de kan ikke se hvad der er galt. Jeg har også ringet til PBS og snakkede med en meget flink mand, der ville undersøge det og ringe tilbage - det har han så ikke gjort.

Nedenunder er scriptet, er der nogen der kan se, hvad der kunne være galt?

<?php

$bDebug = true; // Skal sættes til false ved normal brug. Hvis den er true. Bruges kun i testmode.

// Link til EDankort logo
$sLogoURI = "/images/edankort.gif"; //Læg Deres eDankort logo i f.eks. /images på Deres webhotel.
// Evt. stylesheet ( $sStylesheet = "/styles.css";)

$sPurchaseDate = date("ymd H:i:s");



// Setup order-specific details
//  Sætter session for ordrenummer og beløb
  session_start();
  session_register( "Orderid", "Amountp" );
  $HTTP_SESSION_VARS["OrderID"] = "Test01";
  $HTTP_SESSION_VARS["Amount"] = "20"; //Decimal separator, brug "," f.eks. 1,00


$sInputType = "hidden"; // Standard input felter sættes "hidden"
if($bDebug) {
  $sInputType = "text"; // Text felter sættes til "Text" ved test
}



if($MerchantContinue == '1'  || $MerchantContinue > '0' || isset($_REQUEST["MerchantContinue"])) {
   
       
   
    // Tager højde for "l" og "L" i AuthlifeCycle
    if (isset($HTTP_POST_VARS["AuthlifeCycle"]))        $AuthLifeCycle = $HTTP_POST_VARS["AuthlifeCycle"];
    if (isset($HTTP_POST_VARS["AuthLifeCycle"]))        $AuthLifeCycle = $HTTP_POST_VARS["AuthLifeCycle"];
       
   
    ?>
      <form method="POST" action="https://pay.dandomain.dk/securecapture.asp" name="Form1">
        <input type="<?= $sInputType ?>" name="MerchantNumber" title="MerchantNumber" value="1111111" > <!-- Indsæt forretningsnummer -->
          <input type="<?= $sInputType ?>" name="OrderID" title="OrderID" value="<?= $HTTP_POST_VARS[OrderNo]; ?>" >
        <input type="<?= $sInputType ?>" name="Amount" title="Amount" value="<?= $HTTP_SESSION_VARS["Amount"]; ?>" >
        <input type="<?= $sInputType ?>" name="CardNumber" title="CardNumber" value="<?= $HTTP_POST_VARS["PAN"]; ?>" >
        <input type="<?= $sInputType ?>" name="CurrencyID" title="CurrencyID" value="208" >
        <input type="<?= $sInputType ?>" name="OKURL" title="OKURL" value="<?=$baseDir;?>/pages/e_ok.php" > <!-- Returnere hvis indbetalingen gik godt -->
        <input type="<?= $sInputType ?>" name="FAILURL" title="FAILURL" value="<?=$baseDir;?>/pages/e_fejl.php" > <!-- Returnere hvis inbetalingen fejlede -->
        <input type="<?= $sInputType ?>" name="ExpireMonth"  value="00" >
        <input type="<?= $sInputType ?>" name="ExpireYear" title="ExpireYear" value="00" >
        <input type="<?= $sInputType ?>" name="PostingID"  title="PostingID" value="<?= $HTTP_POST_VARS["PostingID"]; ?>" >
        <input type="<?= $sInputType ?>" name="KeyLabel"  title="KeyLabel" value="<?= $HTTP_POST_VARS["KeyLabel"]; ?>" >
        <input type="<?= $sInputType ?>" name="SigISO9796"  title="SigISO9796" value="<?= $HTTP_POST_VARS["SignatureISO9796"]; ?>" >
        <input type="<?= $sInputType ?>" name="AuthlifeCycle" title="AuthlifeCycle" value="<?= $AuthLifeCycle; ?>" >
        <input type="<?= $sInputType ?>" name="PayType"  title="PayType" value="1" >
        <input type="submit" value="send" />
      </form>
     
      <script type="text/javascript">
        document.Form1.submit();
      </script>
     
      <?
      exit();
      ?>
<?
}

if (!isset($_REQUEST["MerchantContinue"]) || isset($_REQUEST["MerchantDecline"])) {
 
?>
      <script type="text/javascript">
     
        function eDankortRouter(form) {
          var oHeight = 0;
          var oWidth = 0;
          var iHeight = 300;
          var iWidth = 350;
          var iLeft = 0
          var iTop = 0;
          oHeight = top.window.screen.availHeight;
          oWidth = top.window.screen.availWidth;
          if(oHeight > 3*iHeight)    iHeight = oHeight/3;
          if(oWidth > 3*iWidth)    iWidth = oWidth/3;
          if(oWidth > iWidth)        iLeft = (oWidth - iWidth)/2;
          if(oHeight > iHeight)    iTop = (oHeight - iHeight)/2;
         
          var oWindow = window.open('','router','scrollbars=yes,toolbar=no,directories=no,menubar=no,resizable=no,status=yes,width=' + iWidth + ',height=' + iHeight + ',left='+ iLeft + ',top=' +iTop +'dependent=yes');
          form.target = 'router';
          form.submit();
          oWindow.focus();
      }
      </script>
    <form method="POST" action="https://www.authentication-router.pbs.dk/RouterWebApp/servlet/EDKTransfer" name="Form1" target="_top">
      <input type="<?= $sInputType ?>" name="MerchantContinueURL" title="MerchantContinueURL" value="<?=$baseDir;?>/pages/e_betaling.php?MerchantContinue=1" >
      <input type="<?= $sInputType ?>" name="MerchantDeclineURL" title="MerchantDeclineURL" value="<?=$baseDir;?>/pages/e_betaling.php?MerchantDecline=1" >
      <input type="<?= $sInputType ?>" name="MerchantTitle" title="MerchantTitle" value="Nem Skolemad" /> <!-- Indtast Deres Firmanavn her -->
      <input type="<?= $sInputType ?>" name="OrderNo" title="OrderNo" value="<?= $HTTP_SESSION_VARS["OrderID"]; ?>" >
      <input type="<?= $sInputType ?>" name="MerchantAccount" title="MerhcantAccount" value="1111111" > <!-- Indsæt forretningsnummer -->
      <input type="<?= $sInputType ?>" name="AmountTrn" title="AmountTrn" value="<?= FormatTrn($HTTP_SESSION_VARS["Amount"]); ?>" >
      <input type="<?= $sInputType ?>" name="CurrencyTrn" title="CurrencyTrn" value="DKK" >
      <input type="<?= $sInputType ?>" name="TestFlg" title="TestFlg" value="P" >
      <input type="<?= $sInputType ?>" name="MerchantCountry" title="MerchantCountry" value="208" >
      <input type="<?= $sInputType ?>" name="MerchantUrl" title="MerchantUrl" value="http://www.nemskolemad.dk" > <!-- Indsæt Deres www adresse -->
      <input type="<?= $sInputType ?>" name="MerchantGmtOffset" title="MerchantGmtOffset" value="1" >
      <input type="<?= $sInputType ?>" name="MerchantBrands" title="MerchantBrands" value="" >
      <input type="<?= $sInputType ?>" name="PurchaseDate" title="PurchaseDate" value="<?= $sPurchaseDate; ?>" >
      <input type="<?= $sInputType ?>" name="PurchaseAmount" title="PurchaseAmount" value="DKK <?= $HTTP_SESSION_VARS["Amount"];?>" >
      <input type="<?= $sInputType ?>" name="AuthLifeCycle" title="AuthLifeCycle" value="114" >
    </form>
    <p>
      <a href="java script:return false;" onclick="eDankortRouter(document.Form1);" >
        <img src="<?= $sLogoURI ?>" title="Forsøg eDankort-betaling igen" border="0" /></a>
    </p>
    <p>
      E-dankort betalingsvinduet åbnes i et nyt browser vindue.
      Hvis De ikke kan se dette vindue kan de trykke på E-dankort logoet.
    </p>
    <p>
      Bemærk! Hvis De benytter en pop-up stopper skal De holde CTRL-tasten nede mens De trykker på logoet.
    </p>
<? if (isset($_REQUEST["MerchantDecline"])) { ?>
  <p>
    <b>FEJL! E-Dankort transaktionen blev ikke godkendt eller annulleret!</b>
  </p>
  <p>
      <a href="java script:return false;" onclick="eDankortRouter(document.Form1);" >
        Tryk her for at forsøge igen</a>.
    </p>
<? } else { ?>
      <script type="text/javascript">
        eDankortRouter(document.Form1);
      </script>
<? }
}

/**
* @return string
* @param string $sAmount
* @desc Format amount as twelve digits, with the last two being decimals (no decimal separator)
*/
function FormatTrn($sAmount) {
        $tempAmount = str_pad(str_replace(".", "", $sAmount), 12, "0", STR_PAD_LEFT);
        $tempAmount = str_pad(str_replace(",", "", $tempAmount), 12, "0", STR_PAD_LEFT);
  return $tempAmount;
}

?>
Avatar billede brego Nybegynder
16. december 2005 - 20:48 #1
De lange $HTTP_*_VARS er deprecated, og kan være sat til ikke at være der - og de vil forsvinde i de kommende versioner af PHP - brug hellere $_POST, $_GET osv.
Du behøver ikke at bruge session_register().
Brug ikke $_REQUEST - den kan føre til XSS angreb.

Ellers kan jeg ikke se noget galt med din kode (ud over uoverskueligheden).
Avatar billede dalixam Nybegynder
18. december 2005 - 16:30 #2
Jeg ville heller aldrig selv bruge HTTP_VARS eller HTTP_POST, men som sagt er dette dandomains PHP eksempel og ikke mig eget script :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Capgemini Danmark A/S

Cloud Architect

Capgemini Danmark A/S

SAP Project Manager

TOPdesk Danmark A/S

Support Specialist