{'_'.$p} = $config[$p]; } } } // -------------------------------------------------------------------- /** * Create hash * @param array $data Data that will be sent */ public function create_hash(array $data) { $hash = array($this->_sci_pass); foreach (array( 'receiver', 'amount', 'desc', 'payment_id', 'url_status', 'url_success', 'url_fail', ) as $p) { $hash[] = (isset($data[$p])) ? $data[$p] : ''; } $hash = implode('|', $hash); $hash = md5($hash); return $hash; } // -------------------------------------------------------------------- /** * Get transaction details from data return by sci callback * @param array $input Data received from sci callback * @param string $error Error received * @return false || (object)Transaction details */ public function query(array $input, &$error = '') { // Get hash $hash = (isset($input['hash'])) ? $input['hash'] : ''; if ( ! $hash) { $error = 'Invalid hash'; return false; } // Create security $security = array($this->_sci_pass, $hash); $security = implode('|', $security); $security = md5($security); // Send data $data = array(); $data['sci_user'] = $this->_sci_user; $data['sci_id'] = $this->_sci_id; $data['hash'] = $hash; $data['security'] = $security; $res = $this->_curl(self::URL_SCI_QUERY, $data); $res = @json_decode($res); // Error if (empty($res->status)) { $error = (isset($res->result)) ? $res->result : 'Can not connect to SCI'; return false; } return $res->result; } // -------------------------------------------------------------------- /** * Send data to the server end received response * @param string $url URL send request * @param array $data Data that will be send */ protected function _curl($url, array $data = array()) { // Check curl library if ( ! function_exists('curl_init')) { exit('Curl library not installed.'); } // Set options $opts = array(); $opts[CURLOPT_URL] = $url; $opts[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31'; $opts[CURLOPT_HEADER] = false; $opts[CURLOPT_RETURNTRANSFER] = true; $opts[CURLOPT_TIMEOUT] = 15; if (count($data)) { $opts[CURLOPT_POST] = true; $opts[CURLOPT_POSTFIELDS] = http_build_query($data); } if (preg_match('#^https:#i', $url)) { $opts[CURLOPT_SSL_VERIFYPEER] = FALSE; $opts[CURLOPT_SSL_VERIFYHOST] = 0; //$opts[CURLOPT_SSLVERSION] = 3; } // Init curl $curl = curl_init(); curl_setopt_array($curl, $opts); $res = curl_exec($curl); if ( curl_errno($curl) || curl_getinfo($curl, CURLINFO_HTTP_CODE) != 200 ) { return false; } return $res; } } /** * Paygate Exception class */ if ( ! class_exists('Paygate_Exception')) { class Paygate_Exception extends Exception {} }