%PDF- %PDF-
| Direktori : /home/lightco1/www/plugins/vmpayment/sofort/sofort/library/ |
| Current File : /home/lightco1/www/plugins/vmpayment/sofort/sofort/library/sofortLib_sofortueberweisung_classic.php |
<?php
defined('_JEXEC') or die('Restricted access');
require_once 'sofortLib_classic_notification.inc.php';
/**
* Setup a sofortueberweisung.de session using the classic api
* after the configuration of the configuration you will receive
* an url and a transaction id, your customer should be redirected to this url
*
*
* Called by the sofortLib.php/sofortLib_ideal_classic.php etc.
* $sofort->new SofortLib_SofortueberweisungClassic( $userid, $projectid, $password [, $hashfunction='sha1'] );
* $sofort->set...(); //set params for Hashcalculation
* $sofort->set...(); //set more params for Hashcalculation
* $sofort->getPaymentUrl();
* Notice: sometimes getPaymentUrl() must be overwritten by calling class because of changed hash-params
*
*
* Copyright (c) 2012 SOFORT AG
*
* Released under the GNU General Public License (Version 2)
* [http://www.gnu.org/licenses/gpl-2.0.html]
*
* $Date: 2012-11-23 17:15:47 +0100 (Fri, 23 Nov 2012) $
* @version SofortLib 1.5.4 $Id: sofortLib_sofortueberweisung_classic.php 5773 2012-11-23 16:15:47Z dehn $
* @author SOFORT AG http://www.sofort.com (integration@sofort.com)
*
*/
class SofortLib_SofortueberweisungClassic {
public $params = array();
protected $_password;
protected $_userId;
protected $_projectId;
protected $_hashFunction;
protected $_paymentUrl = 'https://www.sofort.com/payment/start';
protected $_hashFields = array(
'user_id',
'project_id',
'sender_holder',
'sender_account_number',
'sender_bank_code',
'sender_country_id',
'amount','currency_id',
'reason_1','reason_2',
'user_variable_0',
'user_variable_1',
'user_variable_2',
'user_variable_3',
'user_variable_4',
'user_variable_5',
);
/**
*
* Constructor for SofortLib_SofortueberweisungClassic
* @param int $userId
* @param int $projectId
* @param string $password
* @param string $hashFunction
* @param string $paymentUrl
*/
public function __construct($userId, $projectId, $password, $hashFunction = 'sha1', $paymentUrl = null) {
$this->_password = $password;
$this->_userId = $this->params['user_id'] = $userId;
$this->_projectId = $this->params['project_id'] = $projectId;
$this->_hashFunction = strtolower($hashFunction);
$this->params['encoding'] = 'UTF-8';
if ($paymentUrl) $this->_paymentUrl = $paymentUrl;
$this->_paymentUrl = $this->_getPaymentDomain();
}
/**
*
* Setter for amount
* @param float $arg
* @param string $currency
*/
public function setAmount($arg, $currency = 'EUR') {
$this->params['amount'] = $arg;
$this->params['currency_id'] = $currency;
}
/**
*
* Setter for sender and holder
* @param unknown_type $senderHolder
*/
public function setSenderHolder($senderHolder) {
$this->params['sender_holder'] = $senderHolder;
}
/**
*
* Setter for sender's account number
* @param string $senderAccountNumber
*/
public function setSenderAccountNumber($senderAccountNumber) {
$this->params['sender_account_number'] = $senderAccountNumber;
}
/**
*
* Set the reason (Verwendungszweck) for sending money
* @param string $arg
* @param string $arg2
*/
public function setReason($arg, $arg2 = '') {
$this->params['reason_1'] = preg_replace('#[^a-zA-Z0-9+-\.,]#', ' ', $arg);
$this->params['reason_2'] = preg_replace('#[^a-zA-Z0-9+-\.,]#', ' ', $arg2);
return $this;
}
/**
*
* User variables can be added here
* @param string $arg
*/
public function addUserVariable($arg) {
$i = 0;
while ($i < 6) {
if (array_key_exists('user_variable_'.$i, $this->params)) {
$i++;
} else {
break;
}
}
$this->params['user_variable_'.$i] = $arg;
return $this;
}
/**
* the customer will be redirected to this url after a successful
* transaction, this should be a page where a short confirmation is
* displayed
*
* @param string $arg the url after a successful transaction
* @return SofortLib_Multipay
*/
public function setSuccessUrl($arg) {
$this->params['user_variable_3'] = $arg;
return $this;
}
/**
* the customer will be redirected to this url if he uses the
* abort link on the payment form, should redirect him back to
* his cart or to the payment selection page
*
* @param string $arg url for aborting the transaction
* @return SofortLib_Multipay
*/
public function setAbortUrl($arg) {
$this->params['user_variable_4'] = $arg;
return $this;
}
/**
* set the url where you want notification about status changes
* being sent to. Use SofortLib_Notification and SofortLib_TransactionData
* to further process that notification
*
* @param string $arg url
* @return SofortLib_Multipay
*/
public function setNotificationUrl($arg) {
$this->params['user_variable_5'] = $arg;
return $this;
}
/**
*
* Setter for interface version
* @param string $arg
*/
public function setVersion($arg) {
$this->params['interface_version'] = $arg;
return $this;
}
/**
*
* Getter for payment URL
*/
public function getPaymentUrl() {
//fields required for hash
$hashFields = $this->_hashFields;
//build parameter-string for hashing
$hashString = '';
foreach ($hashFields as $value) {
if (array_key_exists($value, $this->params)) {
$hashString .= $this->params[$value];
}
$hashString .= '|';
}
$hashString .= $this->_password;
//calculate hash
$hash = $this->getHashHexValue($hashString, $this->_hashFunction);
$this->params['hash'] = $hash;
//create parameter string
$paramString = '';
foreach ($this->params as $key => $value) {
$paramString .= $key.'='.urlencode($value).'&';
}
$paramString = substr($paramString, 0, -1); //remove last &
return $this->_paymentUrl.'?'.$paramString;
}
/**
*
* Has an error occurred
*/
public function isError() {
return false;
}
/**
*
* Getter for error occurred
*/
public function getError() {
return false;
}
/**
* Get the hash value
* @param string $data string to be hashed
* @return string the hash
*/
public function getHashHexValue($data, $hashFunction = 'sha1') {
if($hashFunction == 'sha1') {
return sha1($data);
}
if($hashFunction == 'md5') {
return md5($data);
}
//mcrypt installed?
if (function_exists('hash') && in_array($hashFunction, hash_algos())) {
return hash($hashFunction, $data);
}
return false;
}
/**
*
* Generate a password
* @param int [optional] $length length of return value, default 24
* @return string
*/
public static function generatePassword($length = 24) {
$password = '';
//we generate about 5-34 random characters [A-Za-z0-9] in every loop
do {
$randomBytes = '';
$strong = false;
if (function_exists('openssl_random_pseudo_bytes')) { //php >= 5.3
$randomBytes = openssl_random_pseudo_bytes(32, $strong);//get 256bit
}
if (!$strong) { //fallback
$randomBytes = pack('I*', mt_rand()); //get 32bit (pseudo-random)
}
//convert bytes to base64 and remove special chars
$password .= preg_replace('#[^A-Za-z0-9]#', '', base64_encode($randomBytes));
} while (strlen($password) < $length);
return substr($password, 0, $length);
}
/**
* checks wich hash algorithms are supported by the server
* and returns the best one
*
* @return sha512|sha256|sha1|md5|empty string
*/
public function getSupportedHashAlgorithm() {
$algorithms = $this->getSupportedHashAlgorithms();
if(is_array($algorithms)) {
return $algorithms[0];
} else {
return ''; //no hash function found
}
}
/**
* checks wich hash algorithms are supported by the server
*
* @return array with all supported algorithms, preferred as first one (index 0)
*/
public function getSupportedHashAlgorithms() {
$algorithms = array();
if (function_exists('hash') && in_array('sha512', hash_algos())) {
$algorithms[] = 'sha512';
}
if(function_exists('hash') && in_array('sha256', hash_algos())) {
$algorithms[] = 'sha256';
}
if(function_exists('sha1')) { //deprecated
$algorithms[] = 'sha1';
}
if(function_exists('md5')) { //deprecated
$algorithms[] = 'md5';
}
return $algorithms;
}
/**
*
* Getter for payment domain
*/
protected function _getPaymentDomain() {
return (getenv('sofortPaymentUrl') != '') ? getenv('sofortPaymentUrl') : $this->_paymentUrl;
}
}
?>