12
the file that is in:
html\modules\xasset\class\gateways
Can somebody tell me how to do it for moneybookers?
i`ve heared that normally is not so hard this is the code:
/* Some of this code is adapted from the OSCommerce paypal payment module */
require_once('baseGateway.php');
class paypal extends baseGateway {
//cons
var $_IPN;
//
function paypal() {
//call code first
$this->code = 'paypal';
//inherited
parent::baseGateway();
//
$this->shortDesc = 'Paypal Gateway';
if (defined('PAYPAL_GATEWAY_DESCRIPTION')) {
$this->description = PAYPAL_GATEWAY_DESCRIPTION;
}
if (defined('PAYPAL_SANDBOX') && PAYPAL_SANDBOX) {
$this->postURL = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
} else {
$this->postURL = 'https://www.paypal.com/cgi-bin/webscr';
}
$this->_validates = true;
//
$this->_IPN = XOOPS_URL.'/modules/xasset/verify.php';
}
/////////////////////////////////////////////////////
function keys(){
$ary = array( 'PAYPAL_SANDBOX','PAYPAL_ENABLED','PAYPAL_EMAIL_ID','PAYPAL_CURRENCY', 'PAYPAL_GATEWAY_DESCRIPTION', 'PAYPAL_STORE_NAME');
return $ary;
}
/////////////////////////////////////////////////////
function install(){
parent::install();
//
$this->saveField('PAYPAL_SANDBOX',false,1,'Paypal Sandbox Test Mode','b');
$this->saveField('PAYPAL_ENABLED',true,2,'Enable Paypal Module?','b');
$this->saveField('PAYPAL_GATEWAY_DESCRIPTION','Pay with Paypal',3,'Payment Description','s');
$this->saveField('PAYPAL_STORE_NAME','Your Store',4,'Your online store name','s');
$this->saveField('PAYPAL_EMAIL_ID','your@email.com',5,'Paypal identifying email','s');
$this->saveField('PAYPAL_CURRENCY','USD',6,'Default to if unsupported','a','USD,CAD,EUR,GBP,JPY,AUD');
}
/////////////////////////////////////////
function isThisGateway($post) {
//called by verify to determine the gateway type from $_POST... returns order id
$result = false;
//
if (isset($post['item_number'])) {
//could be paypal...confirm
if (isset($post['custom'])) {
//oh yes...
if ($post['custom'] == 'paypal') {
$result = true;
}
}
}
//
if ($result) {
return $post['item_number'];
} else {
return false;
}
}
/////////////////////////////////////////////////////
function processForm() {
global $xoopsUser;
//
$hCurrency =& xoops_getmodulehandler('currency','xasset');
$hOrder =& xoops_getmodulehandler('order','xasset');
$hClient =& xoops_getmodulehandler('userDetails','xasset');
$hCountry =& xoops_getmodulehandler('country','xasset');
//get values
if (isset($_SESSION['orderID'])) {
$order =& $hOrder->get($_SESSION['orderID']);
$client =& $hClient->get($order->getVar('user_detail_id'));
$currency =& $hCurrency->get($order->getVar('currency_id'));
$country =& $hCountry->get($client->getVar('country_id'));
//check if the user selected
$curCode = $currency->getVar('code');
if (!in_array($curCode, array('CAD', 'EUR', 'GBP', 'JPY', 'USD', 'AUD'))) {
$curCode = PAYPAL_CURRENCY;
$currency =& $hCurrency->getByCode($curCode);
}
//
$tax = $order->getOrdertaxTotalSum();
$tax = $tax['amount'];
//
$form = $this->drawHidden('cmd', '_xclick') .
$this->drawHidden('business', PAYPAL_EMAIL_ID) .
$this->drawHidden('custom', 'paypal') . //used by isThisGateway to tag this as coming from paypal
$this->drawHidden('item_number',$order->getVar('id')) .
$this->drawHidden('item_name', PAYPAL_STORE_NAME) .
$this->drawHidden('amount', $currency->valueOnlyFormat($order->getOrderNet())) .
$this->drawHidden('quantity', '1') .
$this->drawHidden('tax', $currency->valueOnlyFormat($tax)) .
$this->drawHidden('shipping', '0') .
$this->drawHidden('no_shipping',1) . //this disables the shipping address fields.. comment if not req
$this->drawHidden('first_name', $client->getVar('first_name')) .
$this->drawHidden('last_name', $client->getVar('last_name')) .
$this->drawHidden('address1', $client->getVar('street_address1')) .
$this->drawHidden('address2', $client->getVar('street_address2')) .
$this->drawHidden('city', $client->getVar('town')) .
$this->drawHidden('state', $client->getVar('state')) .
$this->drawHidden('zip', $client->getVar('zip')) .
$this->drawHidden('lc', $country->getVar('iso2')) .
$this->drawHidden('email', $xoopsUser->email()) .
$this->drawHidden('currency_code', $curCode) .
$this->drawHidden('return', $this->_returnURL) .
$this->drawHidden('notify_url', $this->_IPN) .
$this->drawHidden('rm', '2') .
$this->drawHidden('no_note', '1') .
$this->drawHidden('cancel_return', $this->_cancelURL);
//
return $form;
} else {
redirect_header(XOOPS_ROOT_PATH.'/index.php',2,'Error. Cannot find cart.');
}
}
/////////////////////////////////////////
function validateTransaction($orderID, $post) {
parent::validateTransaction($orderID, $post);
//before processing IPN params check a few things like if order value matches
$hOrder =& xoops_getmodulehandler('order','xasset');
$hLog =& xoops_getmodulehandler('gatewayLog','xasset');
$order =& $hOrder->get($orderID);
//if ($order->getOrderTotal('s') == $post['amount']) {
//process return parameters
$fields = $post;
$url = $this->postURL;
$web = parse_url($url);
//
$req = 'cmd=_notify-validate';
foreach ($post as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
$postdata = $req;
//
if ($web['scheme'] == "https") {
$web['port']="443";
$ssl="ssl://"; }
else { $web['port']="80"; }
//
$fp = @fsockopen($ssl . $web['host'],$web['port'],$errnum,$errstr,30);
if (!$fp) {
echo "$errnum: $errstr"; }
else {
fputs($fp, "POST $web[path] HTTP/1.1\r\n");
fputs($fp, "Host: $web[host]\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ".strlen($postdata)."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $postdata . "\r\n\r\n");
//
while(!feof($fp)) {
$info[]=@fgets($fp, 1024);
}
//close fp - we are done with it
fclose($fp);
//break up results into a string
$info=implode(",",$info);
$hLog->addLog( $orderID, 1, 3 , $info );
}
return eregi("VERIFIED",$info);
//}
}
////////////////////////////////////////////////
function processReturn(&$oOrder, $post, &$error) {
parent::processReturn(&$oOrder, $post);
//
$hOrder =& xoops_getmodulehandler('order','xasset');
$hCurr =& xoops_getmodulehandler('currency','xasset');
//
//$order =& $hOrder->get($orderID);
$curr =& $hCurr->get($oOrder->getVar('currency_id'));
//
$paypalTrans = $post['txn_id'];
$error = '';
//check for duplicate trans id
if ($hOrder->transactionExists($paypalTrans)) {
$error .= 'Duplicate Transaction\n';
}
//check order amounts
if ($post['payment_status'] != 'Completed') {
$error .= 'Paypal indicated order is Incomplete\n';
}
//check order amount
if ($post['business'] != PAYPAL_EMAIL_ID) {
$error .= 'Receiver Email Incorrect\n';
}
//check order amount
if ( (abs($post['mc_gross'] - $oOrder->getOrderTotal('s')) > 1 )) {
$error .= 'Order total mismatch\n';
}
//check for correct currenc
if ($post['mc_currency'] != $curr->getVar('code')) {
$error .= 'Currency Code Mismatch. Order Aborted.\n';
}
//continue if no error
if (strlen($error) == 0) {
$oOrder->setVar('trans_id',$paypalTrans);
$oOrder->setVar('value',$post['mc_gross']);
$oOrder->setVar('fee',$post['mc_fee']);
//
//if (!$hOrder->insert($oOrder,true)) {
// $err = print_f($hOrder->_db,true);
// $hLog->addLog( $orderID, $order->getVar('gateway_id'),
// $order->orderStatusValidate(), "error : $error with post data : $err" );
//}
//return $hOrder->insert($order,true);
return true;
} else {
//log
$post = print_r($post,true);
//
$hLog =& xoops_getmodulehandler('gatewayLog','xasset');
$hLog->addLog( $orderID, $order->getVar('gateway_id'),
$order->orderStatusValidate(), "error : $error with post data : $post" );
//
return false;
}
}
}
?>
thanks anticipately...