bebeboutik/modules/paysafecard/PrepaidServicesAPI.php

194 lines
8.2 KiB
PHP
Raw Normal View History

2016-01-04 12:49:26 +01:00
<?php
/*
* 2007-2011 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2011 PrestaShop SA
* @version Release: $Revision: 7887 $
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class PSCPrepaidServicesAPI
{
const DISPOSITION_CREATED = 'R';
const DISPOSITION_DISPOSED = 'S';
const DISPOSITION_DEBITED = 'E';
const DISPOSITION_CONSUMED = 'O';
const DISPOSITION_CANCELLED = 'L';
const DISPOSITION_INVALID = 'I';
const DISPOSITION_EXPIRED = 'X';
// Test & Production environment (shared between CT & PSC)
private static $base_url = array('T' => array('create_disposition_url' => 'https://shops.test.at.paysafecard.com/pscmerchant/CreateDispositionServlet',
'get_disposition_state_url' => 'https://shops.test.at.paysafecard.com/pscmerchant/GetDispositionStateServlet',
'execute_debit_url' => 'https://shops.test.at.paysafecard.com/pscmerchant/DebitServlet',
'get_serial_number_url' => 'https://shops.test.at.paysafecard.com/pscmerchant/GetSerialNumbersServlet'
),
'P' => array('create_disposition_url' => 'https://shops.cc.at.paysafecard.com/pscmerchant/CreateDispositionServlet',
'get_disposition_state_url' => 'https://shops.cc.at.paysafecard.com/pscmerchant/GetDispositionStateServlet',
'execute_debit_url' => 'https://shops.cc.at.paysafecard.com/pscmerchant/DebitServlet',
'get_serial_number_url' => 'https://shops.cc.at.paysafecard.com/pscmerchant/GetSerialNumbersServlet'
));
public static function getBaseUrl($key, $env)
{
$base_url = self::$base_url[$env];
if (array_key_exists($key, $base_url))
return $base_url[$key];
return '';
}
public static function createDisposition($configuration, $mid, $mtid, $amount, $currency, $okurl, $nokurl, $businesstype, $reportingcriteria)
{
$language = 'en';
$params = 'currency='.$currency.'&mid='.$mid.'&mtid='.$mtid.'&amount='.$amount.'&businesstype='.$businesstype.
'&reportingcriteria='.$reportingcriteria.'&okurl='.$okurl.'&nokurl='.$nokurl.'&language='.$language;
list ($rc, $msg, $data) = self::_doHttpRequest(self::getBaseUrl('create_disposition_url', $configuration['env']), $params, $configuration['keyring_file'], $configuration['keyring_pw'], $configuration['keyring_prepaid']);
if ($rc == 0) {
$data_array = explode("\n", $data,7);
$resultcode = trim($data_array[0]);
$errorcode = trim($data_array[1]);
//$errormessage = trim($data_array[2]);
// Todo : Find a way to have translation
$errormessage = 'Transaction could not be initiated due to connection problems. If the problem persists, please contact our support.';
return array($resultcode, $errorcode, $errormessage);
} else {
$resultcode = '9001';
$errorcode = $rc;
$errormessage = 'libcurl error: '.$msg;
return array($resultcode,$errorcode,$errormessage);
}
}
public static function getDispositionState($configuration, $mid, $mtid, $currency_iso_code)
{
$language = 'en';
$params = 'mid='.$mid.'&mtid='.$mtid.'&language='.$language;
list ($rc, $msg, $data) = self::_doHttpRequest(self::getBaseUrl('get_disposition_state_url', $configuration['env']), $params, $configuration['keyring_file'], $configuration['keyring_pw'], $configuration['keyring_prepaid']);
if ($rc == 0) {
$dataarray = explode("\n", $data,7);
$resultcode = trim($dataarray[0]);
$errorcode = trim($dataarray[1]);
$errormessage = trim($dataarray[2]);
$amount = trim($dataarray[3]);
$currency = trim($dataarray[4]);
$state = trim($dataarray[5]);
return array($resultcode, $errorcode, $errormessage, $amount, $currency, $state);
} else {
$resultcode = '9001';
$errorcode = $rc;
$errormessage = 'libcurl error: '.$msg;
return array($resultcode, $errorcode, $errormessage);
}
}
public static function getSerialNumbers($configuration, $mid, $mtid, $currency_iso_code)
{
$language = 'en';
$params = 'mid='.$mid.'&mtid='.$mtid.'&language='.$language;
list ($rc, $msg, $data) = self::_doHttpRequest(self::getBaseUrl('get_serial_number_url', $configuration['env']), $params, $configuration['keyring_file'], $configuration['keyring_pw'], $configuration['keyring_prepaid']);
if ($rc == 0) {
/* read and return data from paysafecard server */
$dataarray = explode("\n", $data,7);
$resultcode = trim($dataarray[0]);
$errorcode = trim($dataarray[1]);
$errormessage = trim($dataarray[2]);
$amount = trim($dataarray[3]);
$currency = trim($dataarray[4]);
$state = trim($dataarray[5]);
$snamount = trim($dataarray[6]);
return array ($resultcode, $errorcode, $errormessage, $amount, $currency, $state, $snamount);
} else {
$resultcode = '9001';
$errorcode = $rc;
$errormessage = 'libcurl error: '.$msg;
return array ($resultcode, $errorcode, $errormessage);
}
}
public static function executeDebit($configuration, $mid, $mtid, $amount, $currency, $close_flag = 1)
{
$language = 'en';
$params = 'currency='.$currency.'&mid='.$mid.'&mtid='.$mtid.'&amount='.$amount.'&close='.$close_flag.'&language='.$language;
list ($rc, $msg, $data) = self::_doHttpRequest(self::getBaseUrl('execute_debit_url', $configuration['env']), $params, $configuration['keyring_file'], $configuration['keyring_pw'], $configuration['keyring_prepaid']);
if ($rc == 0) {
$dataarray=explode("\n", $data,7);
$resultcode=trim($dataarray[0]);
$errorcode=trim($dataarray[1]);
//$errormessage=trim($dataarray[2]);
$errormessage = 'The transaction could not be completed. This may have happened due to a temporary connection problem.'.
' Please press the "reload" button in your browser or the link below to reload this page to retry completing your transaction. ';
return array ($resultcode, $errorcode, $errormessage);
} else {
$resultcode = '9001';
$errorcode = $rc;
$errormessage = 'libcurl error: '.$msg;
return array ($resultcode, $errorcode, $errormessage);
}
}
private static function _doHttpRequest($url, $urlparam, $keyringfile, $keyringpw, $cakeyringfile)
{
/* some prerquisites for the connection */
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1); // a non-zero parameter tells the library to do a regular HTTP post.
curl_setopt($ch, CURLOPT_POSTFIELDS, $urlparam); // add POST fields
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); // don't allow redirects
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return into a variable
curl_setopt($ch, CURLOPT_TIMEOUT, 240); // maximum time, in seconds, that you'll allow the CURL functions to take
curl_setopt($ch, CURLOPT_SSLCERT, $keyringfile); // filename of PEM formatted certificate
curl_setopt($ch, CURLOPT_SSLCERTTYPE, "PEM"); // format of certificate, "PEM" or "DER"
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $keyringpw); // password required to use the CURLOPT_SSLCERT certificate
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); // verify the peer's certificate
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // verify the Common name from the peer certificate
curl_setopt($ch, CURLOPT_CAINFO, $cakeyringfile); // file holding one or more certificates to verify the peer with
$data = curl_exec($ch);
$errno = curl_errno($ch);
$errmsg = curl_error($ch);
/* bug fix for PHP 4.1.0/4.1.2 (curl_errno() returns high negative
* value in case of successful termination) */
if ($errno < 0) $errno = 0;
curl_close($ch);
return array ($errno,$errmsg,$data);
}
}