Example #1
0
 /**
  * Get transactions list
  * @param array $conditions - $key=>$value pairs
  * @return array $transactions - transactions list
  */
 public static final function getTransactionsByFields($conditions)
 {
     $transaction_model = new waTransactionModel();
     $transaction_data_model = new waTransactionDataModel();
     $transactions = $transaction_model->getByFields($conditions);
     $transactions_data = $transaction_data_model->getByField('transaction_id', array_keys($transactions), true);
     foreach ($transactions_data as $key => $row) {
         $transactions[$row['transaction_id']]['raw_data'][$row['field_id']] = $row['value'];
     }
     return $transactions;
 }
 /**
  *
  * @param array $request - get from gateway
  * @throws waPaymentException
  * @return mixed
  */
 protected function callbackHandler($request)
 {
     $transaction_data = $this->formalizeData($request);
     $code = $transaction_data['type'] == self::OPERATION_CHECK ? self::XML_PAYMENT_REFUSED : self::XML_TEMPORAL_PROBLEMS;
     if (!$this->order_id || !$this->app_id || !$this->merchant_id) {
         throw new waPaymentException('invalid invoice number', $code);
     }
     if (!$this->ShopID) {
         throw new waPaymentException('empty merchant data', $code);
     }
     if (waRequest::get('result') || $request['action'] == 'PaymentFail') {
         $type = $request['action'] == 'PaymentFail' ? waAppPayment::URL_FAIL : waAppPayment::URL_SUCCESS;
         return array('redirect' => $this->getAdapter()->getBackUrl($type, $transaction_data));
     }
     $this->verifySign($request);
     switch ($transaction_data['type']) {
         case self::OPERATION_CHECK:
             $app_payment_method = self::CALLBACK_CONFIRMATION;
             $transaction_data['state'] = self::STATE_AUTH;
             break;
         case self::OPERATION_AUTH_CAPTURE:
             // exclude transactions duplicates
             $tm = new waTransactionModel();
             $fields = array('native_id' => $transaction_data['native_id'], 'plugin' => $this->id, 'type' => waPayment::OPERATION_AUTH_CAPTURE);
             if ($tm->getByFields($fields)) {
                 throw new waPaymentException('already accepted', self::XML_SUCCESS);
             }
             $app_payment_method = self::CALLBACK_PAYMENT;
             $transaction_data['state'] = self::STATE_CAPTURED;
             break;
         default:
             throw new waPaymentException('unsupported payment operation', self::XML_TEMPORAL_PROBLEMS);
     }
     $transaction_data = $this->saveTransaction($transaction_data, $request);
     $result = $this->execAppCallback($app_payment_method, $transaction_data);
     return $this->getXMLResponse($request, $result['result'] ? self::XML_SUCCESS : self::XML_PAYMENT_REFUSED, $result['error']);
 }
 private function getUniqTransaction($transaction_data)
 {
     $transaction_model = new waTransactionModel();
     return $transaction_model->getByFields(array('plugin' => $this->id, 'app_id' => $this->app_id, 'merchant_id' => $this->merchant_id, 'native_id' => $transaction_data['native_id']));
 }
 protected function callbackHandler($request)
 {
     $encrypt = $this->encryptFields($request['crypt'], $this->crypt_password);
     $request += $encrypt;
     $this->request = $request;
     $transaction_data = $this->formalizeData($this->request);
     if (!$this->order_id || !$this->app_id || !$this->merchant_id) {
         throw new waPaymentException('invalid invoice number');
     }
     $result = array('p' => $this);
     if ($transaction_data['type'] == waPayment::OPERATION_AUTH_CAPTURE) {
         $app_payment_method = self::CALLBACK_CONFIRMATION;
         $back_url = $this->getAdapter()->getBackUrl(waAppPayment::URL_SUCCESS, $transaction_data);
     } else {
         $app_payment_method = self::CALLBACK_CANCEL;
         $back_url = $this->getAdapter()->getBackUrl(waAppPayment::URL_FAIL, $transaction_data);
     }
     if ($transaction_data['type']) {
         $tm = new waTransactionModel();
         $fields = array('native_id' => $transaction_data['native_id'], 'plugin' => $this->id, 'type' => $app_payment_method);
         if (!$tm->getByFields($fields)) {
             $transaction_data = $this->saveTransaction($transaction_data, $this->request);
             if ($app_payment_method) {
                 $result += $this->execAppCallback($app_payment_method, $transaction_data);
                 self::addTransactionData($transaction_data['id'], $result);
             }
         }
     }
     $result['back_url'] = $back_url;
     $result['template'] = wa()->getConfig()->getRootPath() . '/wa-plugins/payment/' . $this->id . '/templates/callback.html';
     return $result;
 }
 /**
  * @param array $request
  * @return array|string|void
  * @throws waPaymentException
  */
 public function callbackHandler($request)
 {
     $transaction_data = $this->formalizeData($request);
     if (!$this->order_id || !$this->app_id || !$this->merchant_id) {
         throw new waPaymentException('invalid invoice number');
     }
     if ($transaction_data['type'] == waPayment::OPERATION_AUTH_CAPTURE) {
         $app_payment_method = self::CALLBACK_CONFIRMATION;
     }
     $tm = new waTransactionModel();
     $fields = array('native_id' => $transaction_data['native_id'], 'plugin' => $this->id, 'type' => $app_payment_method);
     $result = '';
     if (!$tm->getByFields($fields)) {
         $transaction_data = $this->saveTransaction($transaction_data, $request);
         $result = $this->execAppCallback($app_payment_method, $transaction_data);
         self::addTransactionData($transaction_data['id'], $result);
     }
     return $result;
 }
 /**
  * @param array $request
  * @throws waPaymentException
  * @return array|string|void
  */
 protected function callbackHandler($request)
 {
     $transaction_data = $this->formalizeData($request);
     if (!$this->order_id || !$this->app_id || !$this->merchant_id) {
         throw new waPaymentException('invalid invoice number');
     }
     $response_password = !empty($request['callbackPW']) ? $request['callbackPW'] : '';
     $result = array('p' => $this);
     if ($response_password != $this->response_password) {
         $result['rp_not_equal'] = true;
         $result['template'] = wa()->getConfig()->getRootPath() . '/wa-plugins/payment/' . $this->id . '/templates/callback.html';
         $result['back_url'] = $this->getAdapter()->getBackUrl(waAppPayment::URL_FAIL, $transaction_data);
         waLog::log("Payment Response password in plugin settings doesn't equal the same setting in the Merchant Interface\n" . "Client IP:" . waRequest::getIp(), 'worldpayPament.log');
         return $result;
     }
     if ($transaction_data['type'] == waPayment::OPERATION_AUTH_CAPTURE) {
         $app_payment_method = self::CALLBACK_CONFIRMATION;
         $back_url = $this->getAdapter()->getBackUrl(waAppPayment::URL_SUCCESS, $transaction_data);
     } else {
         $app_payment_method = self::CALLBACK_CANCEL;
         $back_url = $this->getAdapter()->getBackUrl(waAppPayment::URL_FAIL, $transaction_data);
     }
     $tm = new waTransactionModel();
     $fields = array('native_id' => $transaction_data['native_id'], 'plugin' => $this->id, 'type' => $app_payment_method);
     if (!$tm->getByFields($fields)) {
         $transaction_data = $this->saveTransaction($transaction_data, $request);
         $result += $this->execAppCallback($app_payment_method, $transaction_data);
     }
     $result['back_url'] = $back_url;
     $result['template'] = wa()->getConfig()->getRootPath() . '/wa-plugins/payment/' . $this->id . '/templates/callback.html';
     return $result;
 }