Jump to content

using fsockopen function with EPDQ


roldahayes

Recommended Posts

Hi,

After a few years of having Barclays EPDQ payment gateway, they have now changed how they require the data to be sent to them - This has caused my site to stop working.

 

Now when the page redirects to epdq it is saying that the "Encrypted data is not present"

 

The original code for the fsockopen function was:

 

 

$fp = fsockopen('ssl://secure2.epdq.co.uk'. $host, 443, &$errno, &$errstr, 60);
 
if(!$fp) { print "$errstr ($errno)<br />\n"; } else {
fputs($fp, "POST /cgi-bin/CcxBarclaysEpdqEncTool.e HTTP/1.0\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\n");
fputs($fp, "Content-length: ".strlen($params)."\n\n");
fputs($fp, $params."\n\n");
while(!feof($fp)) { $output .= fgets($fp, 1024); }
fclose($fp);
}
 
$response_lines = explode("\n",$output);
$response_line_count = count($response_lines);
for($i=0; $i<$response_line_count; $i++){
if(preg_match("/epdqdata/",$response_lines[$i])) {
$curlencrypt = $response_lines[$i];
}
}

 

 

They have suggested this code instead:

 

 

$header = "POST /cgi-bin/CcxBarclaysEpdqEncTool.e HTTP/1.1\n";
$header .= "Host: secure2.epdq.co.uk\n";
$header .= "Connection: close\n";
$header .= "Content-Type: application/x-www-form-urlencoded\n";
$header .= "Content-Length: " . strlen($data) . "\n\n";
$fp = @fsockopen("ssl://secure2.epdq.co.uk", 443, $errno, $errstr, 30);

 

and then suggested using this to align it with the way my page is coded:

 

 

fputs( $fp, "Content-type: application/x-www-form-urlencoded\n" );
fputs( $fp, "Content-length: ".$strlength."\n\n" );
fputs( $fp, "Host: ".$host."\n\n" );
fputs( $fp, $postdata."\n\n" );

 

Can anyone point me in the right direction with this...?

 

Link to comment
https://forums.phpfreaks.com/topic/289281-using-fsockopen-function-with-epdq/
Share on other sites

* UPDATE

 

Epdq have now sent this:

 

 

"The key is to include both “Host” and “Connection” headers with the POST request.  The following is a modified version of part of the ‘fsockopen’ sample code supplied in the legacy ePDQ CPI Integration Guide:"

 

#write the data to the encryption cgi

$strlength = strlen($postdata);

fputs( $fp, "POST $usepath HTTP/1.0\r\n");

fputs( $fp, "Host: ".$host."\r\n");

fputs( $fp, "Content-type: application/x-www-form-urlencoded\r\n" );

fputs( $fp, "Content-length: ".$strlength."\r\n" );

fputs( $fp, "Connection: close\r\n\r\n");

fputs( $fp, $postdata."\r\n" );

The two things they pointed out are important. Very important.

 

But really, you shouldn't be doing this HTTP stuff yourself. Use cURL. Looks like

$curl = curl_init("https://secure2.epdq.co.uk/cgi-bin/CcxBarclaysEpdqEncTool.e");
curl_setopt_array($curl, array(
	CURLOPT_POST => true,
	CURLOPT_POSTFIELDS => $params,
	CURLOPT_RETURNTRANSFER => true
));
$output = curl_exec($curl);
curl_close($curl);

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.