为什么这个php语句不起作用?无法使用网址发送数据

时间:2013-11-20 11:41:56

标签: php html url tripledes

<?php

function generateToken($encrypted_data)
{
    $_id = "7639945321063574";
    $api_key = "0za2fOfdWU5OKYwMBnTH";
    // CC data to tokenize..

    //Payload to be sent to
    $data = array(
        'ID' => _id,
        'APIKey' => $api_key,
        'EcryptedData' => $encrypted_data,
        'TokenScheme' => 4 
    );
    //convert to JSON
    $json = json_encode($data);
    //curl config
       $ch = curl_init("https://test-api..com:8081/TokenServices.svc/REST/TokenizeFromEncryptedValue");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                                    'Content-Type: application/json', //we are using json in this example, you could use xml as well
                                    'Content-Length: '.strlen($json),
                                    'Accept: application/json')       //we are using json in this example, you could use xml as well
                                    );
       curl_setopt($ch, CURLOPT_POST, 1);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
       curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

       $outputjson = curl_exec($ch);       

       //echo "URL error: ",curl_error($ch),PHP_EOL; 
       if(curl_errno($ch)){
        $output = curl_error($ch);
       } else {
        $outputobj = json_decode($outputjson);
        $output = $outputobj->{'Token'};
       }           

       curl_close($ch);
       return $output; 
}

function encryptText_3des($plainText, $key) {
    $key = hash("md5", $key, TRUE); 
    for ($x=0;$x<8;$x++) {
        $key = $key.substr($key, $x, 1);
    }
    $padded = pkcs5_pad($plainText,
        mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC));
    $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $padded, MCRYPT_MODE_CBC));
    return $encrypted;
}

function makePayment() {
    $checksum = $_POST['merchantId']."|".$_POST['amount']."|".$_POST['customerReferenceNo'];    
    echo "<b>Checksum </b>".$checksum."<br>";
    $checksum = hash('sha256', $checksum);  
    echo "<b>Hash Checksum </b>".$checksum."<br>";
    $data = http_build_query(array('cardProvider' => $_POST['cardProvider'],'cardType' => $_POST['cardType'],'cardNumber' => $_POST['cardNumber'],'securityCode' => $_POST['securityCode'],'cardExpiryMonth' => $_POST['cardExpiryMonth'],'cardExpiryYear' => $_POST['cardExpiryYear'],'cardHolderName' => $_POST['cardHolderName'],'currencyCode' => $_POST['currencyCode'],'customerReferenceNo' => $_POST['customerReferenceNo'],'name' => $_POST['name'],'mobileNo' => $_POST['mobileNo'],'email' => $_POST['email'],'password' => $_POST['password'],'remoteIP' => $_POST['remoteIP'],'checkSum' => $checksum));
    echo "<b>Data </b>".$data."<br>";
    $encryption_key = "HG58YZ3CR9";
    $desEncryptedData = encryptText_3des($data, $encryption_key);
    $desEncryptedData = urlencode($desEncryptedData);
    echo "<b>3DES Encrypted Data </b>".$desEncryptedData."<br>";

/*  $ch = curl_init("https://cellpay.essecom.com/PGCCDCToken/TokenPayment.jsp");
    //$ch = curl_init("http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_body_onload");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
    //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('merchantId' => $_POST['merchantId'],'data' => $desEncryptedData)));
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    $output = curl_exec($ch);       
    echo "<b>URL error: </b>",curl_error($ch)."<br>"; 
    curl_close($ch);
    //echo "<b>Output: </b>",$output."<br>"; */
       $merchantid=$_POST['merchantId'];
       $url='https://cellpay.essecom.com/PGCCDCToken/TokenPayment.jsp?merchantId='.$merchantid.'&data='.$desEncryptedData;    //$encrypted_data;
大家一切都很完美,直到下面的这一行,echo语句。我想要的是通过使用下面的代码在同一个窗口中将两个值传递给上面的url。但是它没有被重定向。为什么这样做发生?

    echo "<script type='text/javascript'> window.open('$url');</script>";




}

    $strHeading = "<h1>Hello </h1>";

    if(empty($_POST['name'])){
          $name = 'Anonymous';
        }      
    else $name = $_POST['name'];
    if(empty($_POST[_cipherText'])){
          $encrypted = 'none';
        $token = 'no token';    
        }      
    else  {_cipherText'];
        $token = generateToken($encrypted); 
    }
    if(empty($_POST['cardNumber'])){
        }      
    else  {
        makePayment();  
    }

?>
<html>
<head>
<script type="text/javascript" src="https://test-api..com:8081/inpage/js-client-2.1.2.min.js"></script>
</head>
<body>
<!--
<input type="text" name="name" value="<?php echo htmlentities($username); ?>" />
Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?>
CipherText is: <?php echo $_POST["_cipherText"]; ?>
    <input type="text" name="name" value="<?php echo htmlentities($username); ?>" />
-->
    <?php echo $strHeading; ?>
    <h2>Step1. Enter the customer details and submit</h2>
    <form action="TokenProcess.php" method="post">
        <input id="txtEncryptionKey" name="txtEncryptionKey" class=_encryptionkey"
        type="hidden" value="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvWpIQFjQQCPpaIlJKpeg
        irp5kLkzLB1AxHmnLk73D3TJbAGqr1QmlsWDBtMPMRpdzzUM7ZwX3kzhIuATV4Pe
        7RKp3nZlVmcrT0YCQXBrTwqZNh775z58GP2kZs+gVfNqBampJPzSB/hB62KkByhE
        Cn6grrRjiAVwJyZVEvs/2vrxaEpO+aE16emtX12RgI5JdzdOiNyZEQteU6zRBRJE
        ocPWVxExaOpVVVJ5+UnW0LcalzA+lRGRTrQJ5JguAPiAOzRPTK/lYFFpCAl/F8wt
        oAVG1c8zO2NcQ0Pko+fmeidRFxJ/did2btV+9Mkze3mBphwFmvnxa35LF+Cs/XJH
        DwIDAQAB" />
        <table>
        <tr>
        <th>Name: </th><td><input type="text" name="name" value="<?php echo htmlentities($name); ?>"></td>
        </tr>
        <tr>
        <th>CardNumber: </th><td><input type="text" name="ccnumber" id="ccnumber" class=_data"></td>
        </tr>
        </table>
        <input type="submit" name="btn_process" value="Submit" id="btn_process" class="_submit btn btn-success">
    </form>
    <h2>Step2. Submit when encrypted data is available</h2>
    <form action="TokenProcess.php" method="post">
        <table>
        <tr>
        <th>Encrypted CardNumber: </th><td><input type="text" name="_cipherText" value="<?php echo htmlentities($encrypted); ?>" /></td>
        </tr>
        <tr>        
        <th>Merchant ID: </th><td><input type="text" name="merchantId" value="iZwipe1"></td>        
        </tr>
        <tr>
        <th>Password : </th><td><input type="text" name="password" value="iZwipe"></td>
        </tr>
        <tr>
        <th>customerReferenceNo : </th><td><input type="text" name="customerReferenceNo" value="iZwipe"></td>       
        </tr>
        <tr>
        <th>remoteIP : </th><td><input type="text" name="remoteIP" value="10.10.10.80"></td>
        </tr>
        <tr>
        <th>amount : </th><td><input type="text" name="amount" value="10"></td>
        </tr>
        <tr>
        <th>currencyCode : </th><td><input type="text" name="currencyCode" value="356"></td>
        </tr>
        <tr>
        <th>cardNumber : </th><td><input type="text" name="cardNumber" value="<?php echo htmlentities($token); ?>"></td>
        </tr>
        <tr>
        <th>cardExpiryMonth : </th><td><input type="text" name="cardExpiryMonth" value="12"></td>
        </tr>
        <tr>
        <th>cardExpiryYear : </th><td><input type="text" name="cardExpiryYear" value="2014"></td>
        </tr>
        <tr>
        <th>securityCode: </th><td><input type="text" name="securityCode" value="123"></td>
        </tr>
        <tr>
        <th>cardHolderName : </th><td><input type="text" name="cardHolderName" value="<?php echo htmlentities($name); ?>"></td>
        </tr>
        <tr>
        <th>cardType : </th><td><input type="text" name="cardType" value="CC"></td>
        </tr>
        <tr>
        <th>cardProvider: </th><td><input type="text" name="cardProvider" value="VISA"></td>
        </tr>
        <tr>
        <th>name: </th><td><input type="text" name="name" value="<?php echo htmlentities($name); ?>"></td>
        </tr>
        <tr>
        <th>mobileNo : </th><td><input type="text" name="mobileNo" value="9008032751"></td>
        </tr>
        <tr>
        <th>email : </th><td><input type="text" name="email" value="9008032751"></td>
        </tr>
        </table>
        <input type="submit" name="token_process" value="Make Payment" id="token_process" class="btn btn-success"/>
    </form>

</body>
</html>

1 个答案:

答案 0 :(得分:1)

附上您的</script>标记,未正确附上,

 echo "<script type='text/javascript'> window.open('$url');</script>";

function encryptText_3des()中没有function pkcs5_pad()

您的代码中缺少

pkcs5_pad()。

 function pkcs5_pad ($text, $blocksize)
{
    $pad = $blocksize - (strlen($text) % $blocksize);
    return $text . str_repeat(chr($pad), $pad);
}

然后,

从代码中删除此行 // echo "<script type='text/javascript'> window.open('$url')<\script>";

添加此行 header("location:$url");

注意:使用一些标准IDE,它主要解决了您的基本错误。使用apache错误日志文件查找错误。

参考:http://php.net/manual/en/ref.mcrypt.php