'Processed',
0 => 'Pending',
-1 => 'Cancelled',
-2 => 'Failed',
-3 => 'Chargeback'
);
public function __construct($userId = null)
{
parent::__construct(self::NAME, $userId);
}
/**
*
* check if the gateway is enabled
*
* @return bool
*/
public function enabled()
{
if (!empty($this->_data[self::PAY_TO_EMAIL])) {
return true;
}
return false;
}
/**
*
* get setup form elements
*
* @return array
*/
public function getElements()
{
$translate = $this->getTranslate();
return array(
array(
'form_id' => 'Skrill',
'id' => self::PAY_TO_EMAIL,
'element' => 'text',
'label' => $this->_('Skrill Email Address'),
'description' => $this->_('Enter your registered email address'),
'attributes' => array(
'class' => 'form-control input-medium',
),
),
array(
'form_id' => 'Skrill',
'id' => self::SECRET_WORD,
'element' => 'text',
'label' => $this->_('Skrill Secret Word'),
'description' => $translate->_('(recommended) The secret word submitted in the "Merchant Tools" section of the Merchant\'s online Skrill account.
'
. 'Skrill IPN URL:
') . $this->getIpnUrl(),
'attributes' => array(
'class' => 'form-control input-medium',
),
),
);
}
/**
* @return array
*/
public function formElements()
{
return array(
array(
'id' => self::PAY_TO_EMAIL,
'value' => $this->_data[self::PAY_TO_EMAIL],
'element' => 'hidden',
),
array(
'id' => 'language',
'value' => 'EN',
'element' => 'hidden',
),
array(
'id' => 'amount',
'value' => $this->getAmount(),
'element' => 'hidden',
),
array(
'id' => 'currency',
'value' => $this->getCurrency(),
'element' => 'hidden',
),
array(
'id' => 'merchant_fields',
'value' => self::TRANSACTION_FIELD,
'element' => 'hidden',
),
array(
'id' => self::TRANSACTION_FIELD,
'value' => $this->getTransactionId(),
'element' => 'hidden',
),
array(
'id' => 'detail1_description',
'value' => $this->getName(),
'element' => 'hidden',
),
array(
'id' => 'status_url',
'value' => $this->getIpnUrl(),
'element' => 'hidden',
),
array(
'id' => 'return_url',
'value' => $this->getSuccessUrl(),
'element' => 'hidden',
),
array(
'id' => 'cancel_url',
'value' => $this->getFailureUrl(),
'element' => 'hidden',
),
);
}
public function getPostUrl()
{
return self::POST_URL;
}
/**
*
* process ipn
*
* @param \Cube\Controller\Request\AbstractRequest $request
*
* @return bool return true if ipn returns a valid transaction
*/
public function processIpn(AbstractRequest $request)
{
$errno = null;
$errstr = null;
$response = false;
if ($request->isPost()) {
$paymentStatus = $request->getParam('status');
$this->setTransactionId($request->getParam(self::TRANSACTION_FIELD))
->setAmount($request->getParam('amount'))
->setCurrency($request->getParam('currency'))
->setGatewayPaymentStatus($this->_ipnCodes[$paymentStatus])
->setGatewayTransactionCode($request->getParam('mb_transaction_id'));
if (!$this->_validateMd5Sig($request)) {
$this->setGatewayPaymentStatus('Invalid MD5 Signature');
}
else if ($paymentStatus == 2) {
$response = true;
}
}
return $response;
}
/**
*
* validate md5 signature field
*
* @param AbstractRequest $request
*
* @return bool
*/
private function _validateMd5Sig(AbstractRequest $request)
{
if (empty($this->_data[self::SECRET_WORD])) {
return true;
}
$string = $request->getParam('merchant_id')
. $request->getParam('transaction_id')
. strtoupper(md5($this->_data[self::SECRET_WORD]))
. $request->getParam('mb_amount')
. $request->getParam('mb_currency')
. $request->getParam('status');
if (strcmp(strtoupper(md5($string)), $request->getParam('md5sig')) === 0) {
return true;
}
return false;
}
}