'', 'port' => '', 'logpass' => '', 'type' => ''); protected $validatedIPS_Webhook = array('194.113.233.9','176.124.192.233'); // IP list access for Zerocryptopay.com public function __construct($data = array()) { if (is_array($data)) { foreach ($data as $key => $dat) { $this->$key = $dat; } } } /* $paydata = array( 'amount' => 1, 'secret_key' => 'secret_from_zerocryptopay', 'token' => 'token_from_zerocryptopay', 'login' => 'login_from_zerocryptopay', 'order_id' => 1, ); self::zerocryptopay->newPay($paydata); // Create tracking order */ private function getHookIps(){ $_I = array(); $response = json_decode(file_get_contents('https://dns.google/resolve?name=hook.zerocryptopay.com&type=A'),1); if(is_array($response) && isset($response['Answer'])){ foreach ($response['Answer'] as $record) { array_push($_I,$record['data']); } } return $_I; } public function newPay($postdata) { return $this->do_it('/pay/newtrack', $this->calcSignForm($postdata)); } public function getStatus($postdata) { return $this->do_it('/pay/status', $this->calcSignStatus($postdata)); } private function calcSignStatus($postdata) { $sign = hash('sha256', $postdata['token'] . $postdata['hash_trans'] . $postdata['secret_key'] . $postdata['id_track'] . $postdata['login']); unset($postdata['secret_key']); $postdata['signature'] = $sign; return $postdata; } private function calcSignForm($postdata) { $sign = hash('sha256', $postdata['amount'] . $postdata['secret_key'] . $postdata['order_id'] . $postdata['login']); unset($postdata['secret_key']); $postdata['signature'] = $sign; return $postdata; } private function do_it($path, $postdata) { $oCURL = curl_init($this->base_api . $path); curl_setopt_array($oCURL, array( CURLOPT_RETURNTRANSFER => true, CURLOPT_USERAGENT => "API-LIB-Zerocryptopay_v1.0", CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_CONNECTTIMEOUT => 0, CURLOPT_TIMEOUT => 15, )); if (!empty($this->proxy_request['ip'])) { // where proxy set curl_setopt_array($oCURL, array( CURLOPT_PROXYPORT => $this->proxy_request['port'], CURLOPT_PROXYTYPE => $this->proxy_request['type'], CURLOPT_PROXY => $this->proxy_request['ip'], CURLOPT_PROXYUSERPWD => $this->proxy_request['logpass'], )); } if (is_array($postdata)) { $postdata = http_build_query($postdata); curl_setopt_array($oCURL, array( CURLOPT_HTTPHEADER => array( 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8', ), CURLOPT_POST => true, CURLOPT_POSTFIELDS => $postdata, )); } $sResponse = curl_exec($oCURL); $respond = json_decode($sResponse, true); if (!is_array($respond)) { return array($sResponse); } return $respond; } public function verifPay($dataConfig, $params) { $hashTrans = $params['hash_trans']; $SumOrder = floatval($dataConfig['SumOrder']); $data_slim = $dataConfig['token'] . $params['amount_for_pay'] . $dataConfig['secret_key'] . $params['hash_trans'] . $params['method_pay'] . $dataConfig['login_zerocrypt']; // echo $this->dumpResult($data_slim); $serverSign = hash('sha256', $data_slim); $ipIPN = $_SERVER['REMOTE_ADDR']; if (!$this->validateIPS($ipIPN)) { return array('status' => false, 'result' => 'IP invalid', 'IP' => $ipIPN); } if ($serverSign == $params['signature'] && $params['status'] == 'paid' && trim($params['order_id']) == trim($dataConfig['order_id'])) { // Sign ok if ($SumOrder == floatval($params['amount'])) { // sum ok return array('status' => true, 'result' => 'payment successfull'); } else { return array('status' => false, 'result' => 'Sum missmatch'); // exit('PricesOut'); } } else { return array('status' => false, 'result' => 'Signature missmatch'); } } private function validateIPS($ip = '') { if (in_array($ip, $this->validatedIPS_Webhook)) { return true; } // Here we check additional ips with dns.google services. if (in_array($ip, $this->getHookIps())) { return true; } return false; } public function dumpResult($data) { ob_start(); var_dump($data); $value = ob_get_clean(); return '
' . $value . '
'; } }