name = 'asiapay';
$this->displayName = 'AsiaPay\'s (PayDollar/PesoPay/SiamPay) Payment Service';
$this->tab = 'payments_gateways';
$this->author = 'Asiapay';
$this->version = '0.8.1';
$config = Configuration::getMultiple(array('PAYMENT_URL', 'MERCHANT_ID', 'CURRENCY', 'PAY_TYPE', 'PAY_METHOD', 'SECURE_HASH_SECRET'));
if (isset($config['PAYMENT_URL']))
$this->PAYMENT_URL = $config['PAYMENT_URL'];
if (isset($config['MERCHANT_ID']))
$this->MERCHANT_ID = $config['MERCHANT_ID'];
if (isset($config['CURRENCY']))
$this->CURRENCY = $config['CURRENCY'];
if (isset($config['PAY_TYPE']))
$this->PAY_TYPE = $config['PAY_TYPE'];
if (isset($config['PAY_METHOD']))
$this->PAY_METHOD = $config['PAY_METHOD'];
if($config['SECURE_HASH_SECRET'] == null){
$this->SECURE_HASH_SECRET = '';
}else{
$this->SECURE_HASH_SECRET = $config['SECURE_HASH_SECRET'];
}
parent::__construct();
$this->page = basename(__FILE__, '.php');
$this->description = 'Accept payments with AsiaPay\'s (PayDollar/PesoPay/SiamPay) Payment Service';
}
function install()
{
if (!parent::install() ||
!$this->registerHook('paymentReturn') ||
!$this->registerHook('paymentOptions')||
!$this->registerHook('header')||
!$this->registerHook('payment')) {
return false;
}
return true;
}
function uninstall()
{
if (!Configuration::deleteByName('PAYMENT_URL')||
!Configuration::deleteByName('MERCHANT_ID')||
!Configuration::deleteByName('CURRENCY')||
!Configuration::deleteByName('PAY_TYPE')||
!Configuration::deleteByName('PAY_METHOD')||
!Configuration::deleteByName('SECURE_HASH_SECRET')||
!parent::uninstall())
return false;
return true;
}
function getContent()
{
if (Tools::isSubmit('btnSubmit')) {
$this->_postValidation();
if (!count($this->_postErrors))
$this->_html .= $this->_postProcess();
else
foreach ($this->_postErrors as $err)
$this->_html .= "
{$err}
";
} else {
$this->_html .= '
';
}
$this->context->smarty->assign('module_dir', $this->_path);
$output = $this->context->smarty->fetch($this->local_path.'views/templates/admin/template.tpl');
$this->_html .= $this->renderForm();
return $output.$this->_html;
}
function generatePaymentSecureHash($merchantId, $merchantReferenceNumber, $currencyCode, $amount, $paymentType, $secureHashSecret)
{
$buffer = $merchantId . '|' . $merchantReferenceNumber . '|' . $currencyCode . '|' . $amount . '|' . $paymentType . '|' . $secureHashSecret;
return sha1($buffer);
}
function verifyPaymentDatafeed($src, $prc, $successCode, $merchantReferenceNumber, $paydollarReferenceNumber, $currencyCode, $amount, $payerAuthenticationStatus, $secureHashSecret, $secureHash)
{
$buffer = $src . '|' . $prc . '|' . $successCode . '|' . $merchantReferenceNumber . '|' . $paydollarReferenceNumber . '|' . $currencyCode . '|' . $amount . '|' . $payerAuthenticationStatus . '|' . $secureHashSecret;
$verifyData = sha1($buffer);
if ($secureHash == $verifyData) {
return true;
}
return false;
}
/*function hookPayment($params)
{
global $smarty;
$smarty->assign(array('this_path' => $this->_path));
return $this->display(__FILE__, 'payment.tpl');
}*/
public function hookPaymentOptions($params)
{
if (!$this->active) {
return;
}
$payment_options = [
$this->getExternalPaymentOption($params),
];
return $payment_options;
}
public function getExternalPaymentOption($params) {
$externalOption = new PaymentOption();
try {
$externalOption->setCallToActionText($this->l('Alipay HK/WeChat Pay/FPS'))
->setAction($this->context->link->getModuleLink($this->name, 'redirect', array(), true))
->setLogo(Media::getMediaPath(_PS_MODULE_DIR_ . $this->name . '/asiapay.gif'));
return $externalOption;
}
catch (Exception $e) {
var_dump($e->getMessage());
die;
}
}
public function hookPaymentReturn($params)
{
//global $smarty;
$state = $params['order']->getCurrentState();
if ($state == _PS_OS_OUTOFSTOCK_ or $state == _PS_OS_PAYMENT_){
$this->smarty->assign('status', 'ok');
}else{
$this->smarty->assign('status', 'failed');
}
return $this->display(__FILE__, 'views/templates/hook/payment_return.tpl');
}
private function _getAsiaPayLanguageCode($iso_code)
{
$asiapay_language_code = '';
switch ($iso_code)
{
case 'en':
$asiapay_language_code = 'E';
break;
case 'zh':
$asiapay_language_code = 'C';
break;
case 'zh':
$asiapay_language_code = 'C';
break;
case 'ko':
$asiapay_language_code = 'K';
break;
case 'ja':
$asiapay_language_code = 'J';
break;
case 'th':
$asiapay_language_code = 'T';
break;
case 'fr':
$asiapay_language_code = 'F';
break;
case 'de':
$asiapay_language_code = 'G';
break;
case 'ru':
$asiapay_language_code = 'R';
break;
case 'es':
$asiapay_language_code = 'S';
break;
default:
$asiapay_language_code = 'E';
}
return $asiapay_language_code;
}
private function _postValidation()
{
if (Tools::isSubmit('btnSubmit'))
{
if (!Tools::getValue('PAYMENT_URL'))
$this->_postErrors[] = $this->l('Payment URL is required.');
if (!Tools::getValue('MERCHANT_ID'))
$this->_postErrors[] = $this->l('Merchant ID is required.');
if (!Tools::getValue('CURRENCY'))
$this->_postErrors[] = $this->l('Currency is required.');
if (!Tools::getValue('PAY_TYPE'))
$this->_postErrors[] = $this->l('Pay Type is required.');
if (!Tools::getValue('PAY_METHOD'))
$this->_postErrors[] = $this->l('Pay Method is required.');
}
}
private function _postProcess()
{
if (Tools::isSubmit('btnSubmit'))
{
Configuration::updateValue('PAYMENT_URL', Tools::getValue('PAYMENT_URL'));
Configuration::updateValue('MERCHANT_ID', Tools::getValue('MERCHANT_ID'));
Configuration::updateValue('CURRENCY', Tools::getValue('CURRENCY'));
Configuration::updateValue('PAY_TYPE', Tools::getValue('PAY_TYPE'));
Configuration::updateValue('PAY_METHOD', Tools::getValue('PAY_METHOD'));
if(Tools::getValue('SECURE_HASH_SECRET')){
$secureHashSecret = Tools::getValue('SECURE_HASH_SECRET');
}else{
$secureHashSecret = '';
}
Configuration::updateValue('SECURE_HASH_SECRET', $secureHashSecret);
}
$this->_html .= $this->displayConfirmation($this->l('Settings updated'));
}
public function renderForm() {
$fields_form = array(
'form' => array(
'legend' => array(
'title' => $this->l('AsiaPay Setup')
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Payment URL'),
'name' => 'PAYMENT_URL',
'required' => true
),
array(
'type' => 'text',
'label' => $this->l('Merchant Id'),
'name' => 'MERCHANT_ID',
'required' => true
),
array(
'type' => 'text',
'label' => $this->l('Currency'),
'name' => 'CURRENCY',
'required' => true
),
array(
'type' => 'text',
'label' => $this->l('Pay Type'),
'name' => 'PAY_TYPE',
'required' => true
),
array(
'type' => 'text',
'label' => $this->l('Pay Method'),
'name' => 'PAY_METHOD',
'required' => true
),
array(
'type' => 'text',
'label' => $this->l('Secure Hash Secret'),
'name' => 'SECURE_HASH_SECRET',
'required' => false
)
),
'submit' => array(
'title' => $this->l('Save')
)
)
);
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$lang = new Language((int) Configuration::get('PS_LANG_DEFAULT'));
$helper->default_form_language = $lang->id;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
$this->fields_form = array();
$helper->id = (int) Tools::getValue('id_carrier');
$helper->identifier = $this->identifier;
$helper->submit_action = 'btnSubmit';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false) . '&configure=' . $this->name . '&tab_module=' . $this->tab . '&module_name=' . $this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$helper->tpl_vars = array(
'fields_value' => $this->getConfigFieldsValues(),
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id
);
return $helper->generateForm(array(
$fields_form
));
}
public function getConfigFieldsValues() {
return array(
'PAYMENT_URL' => Tools::getValue('PAYMENT_URL', Configuration::get('PAYMENT_URL')),
'MERCHANT_ID' => Tools::getValue('MERCHANT_ID', Configuration::get('MERCHANT_ID')),
'CURRENCY' => Tools::getValue('CURRENCY', Configuration::get('CURRENCY')),
'PAY_TYPE' => Tools::getValue('PAY_TYPE', Configuration::get('PAY_TYPE')),
'PAY_METHOD' => Tools::getValue('PAY_METHOD', Configuration::get('PAY_METHOD')),
'SECURE_HASH_SECRET' => Tools::getValue('SECURE_HASH_SECRET', Configuration::get('SECURE_HASH_SECRET'))
);
}
}
?>