Old PayPal checkout page if using GET instead of POST

Me482309
Contributor
Contributor

I'm using the following PHP code to encrypt the billing details I'm passing to PayPal:

 

<?php
# private key file to use
$MY_KEY_FILE = "my-prvkey.pem";
# public certificate file to use
$MY_CERT_FILE = "my-pubcert.pem";
# Paypal's public certificate
$PAYPAL_CERT_FILE = "paypal_cert.pem";
# path to the openssl binary
$OPENSSL = "/usr/bin/openssl";


$form = array(
'cmd' => '_xclick',
'cert_id' => 'HSFU5KJLFS8JD',
'business' => 'test[et]example.com',
'currency_code' => 'EUR',
'no_shipping' => '1',
'charset' => 'utf-8',
'lc' => 'DE',
'item_name' => 'My test product',
'amount' => '4.20',
'return' => 'http://www.example.com/success.php',
'cancel_return' => 'http://www.example.com/error.php',
);

$encrypted = paypal_encrypt($form);

function paypal_encrypt($hash)
{
global $MY_KEY_FILE;
global $MY_CERT_FILE;
global $PAYPAL_CERT_FILE;
global $OPENSSL;

if (!file_exists($MY_KEY_FILE)) {
echo "ERROR: MY_KEY_FILE $MY_KEY_FILE not found\n";
}
if (!file_exists($MY_CERT_FILE)) {
echo "ERROR: MY_CERT_FILE $MY_CERT_FILE not found\n";
}
if (!file_exists($PAYPAL_CERT_FILE)) {
echo "ERROR: PAYPAL_CERT_FILE $PAYPAL_CERT_FILE not found\n";
}

$hash['bn']= 'StellarWebSolutions.PHP_EWP2';

$data = "";
foreach ($hash as $key => $value) {
if ($value != "") {
$data .= "$key=$value\n";
}
}

$openssl_cmd = "($OPENSSL smime -sign -signer $MY_CERT_FILE -inkey $MY_KEY_FILE "."-outform der -nodetach -binary <<_EOF_\n$data\n_EOF_\n) | "."$OPENSSL smime -encrypt -des3 -binary -outform pem $PAYPAL_CERT_FILE";

exec($openssl_cmd, $output, $error);

if (!$error) {
return implode("\n",$output);
} else {
return "ERROR: encryption failed";
}
};
?>

<!DOCTYPE html>
<html>
<head>
<title>PHP Sample Donation using PayPal Encrypted Buttons</title>
</head>
<body>
<form action="https://www.paypal.com/cgi-bin/webscr" method="get">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="encrypted" value=" <?PHP echo $encrypted;?>">
<input type="submit">
</form>
</body>
</html>

 

When clicking on the submit button I'll get redirected to PayPal and can make the payment.

I can either send the form data with method="post" or method="get".

If I'm using my code with `method="post"` I'm getting redirected to a page looking like this:

 


When using exactly the same code but changing method="post" to method="get" I'm getting redirected to a page looking like this:

 


This doesn't really look beautiful. I prefer the first one and I think my customers will do so, too.

 

Does anybody know how I can fix that? Is there any PayPal value I can pass with my form to get the new layout?

Login to Me Too
1 REPLY 1

MTS_Nacho
Moderator
Moderator

@Me482309 When testing your button without encrypting, it for example:

 

<form action="https://www.paypal.com/cgi-bin/webscr" method="GET">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="seller@email.com">
<input type="hidden" name="currency_code" value="EUR">
<input type="hidden" name="no_shipping" value="1">
<input type="hidden" name="charset" value="UTF-8">
<input type="hidden" name="amount" value="4.20">
<input type="hidden" name="lc" value="DE">
<input type="hidden" name="item_name" value="My Test product">
<input type="hidden" name="return" value="http://www.example.com/success.php">
<input type="hidden" name="cancel_url" value="http://www.example.com/error.php">
<input type="submit">
</form>

 

It's working fine, so I suspect our new checkout it's not handling properly the"encrypted" data via GET (it could be intended though) and that's why we are falling back.

 

Is there any reason why you would prefer using GET rather than POST? We would recommend the later.

 

Thanks.

 

Login to Me Too

Haven't Found your Answer?

It happens. Hit the "Login to Ask the community" button to create a question for the PayPal community.