public function callback()
 {
     $ipn_secret = $this->config->get('coinify_ipn_secret');
     $callback_validator = new CoinifyCallback($ipn_secret);
     // Get the raw HTTP POST body (JSON object encoded as a string)
     $body = file_get_contents('php://input');
     $arr = json_decode($body, true);
     header('HTTP/1.1 200 OK');
     // Validate callback
     if (!$callback_validator->validateCallback($body)) {
         return;
     }
     $order_id = $arr['data']['custom']['orderid'];
     $order_state = $arr['data']['state'];
     // Load checkout model
     $this->load->model('checkout/order');
     switch ($order_state) {
         case 'complete':
             // Set Order status - Processing
             $this->model_checkout_order->addOrderHistory($order_id, 2);
             break;
         case 'expired':
             // Set Order status - Denied
             $this->model_checkout_order->addOrderHistory($order_id, 8);
             break;
     }
 }
 public function processTransaction($api_admin, $id, $data, $gateway_id)
 {
     header('HTTP/1.1 200 OK');
     $body = file_get_contents('php://input');
     $json_body = json_decode($body, true);
     if ($json_body === null) {
         return;
     }
     $resp = $json_body['data'];
     if (!array_key_exists(COINIFY_SIGNATURE_HEADER_NAME, $_SERVER)) {
         return;
     }
     $signature = $_SERVER[COINIFY_SIGNATURE_HEADER_NAME];
     $callback = new CoinifyCallback($this->config['coinify_secret']);
     if (!$callback->validateCallback($body, $signature) || $resp['state'] !== 'complete') {
         return;
     }
     $invoice_id = intval($resp["custom"]["invoice_id"]);
     $tx = $api_admin->invoice_transaction_get(['id' => $id]);
     if (!$tx['invoice_id']) {
         $api_admin->invoice_transaction_update(['id' => $id, 'invoice_id' => $invoice_id]);
     }
     if (!$tx['amount']) {
         $api_admin->invoice_transaction_update(['id' => $id, 'amount' => $resp['native']["amount"]]);
     }
     $invoice = $api_admin->invoice_get(['id' => $invoice_id]);
     $client_id = $invoice['client']['id'];
     $transaction_hash = $resp["payments"][0]['txid'];
     $bd = ['id' => $client_id, 'amount' => $resp["native"]["amount"], 'description' => 'coinify transaction ' . $transaction_hash, 'type' => 'coinify', 'rel_id' => $transaction_hash];
     $api_admin->client_balance_add_funds($bd);
     $api_admin->invoice_batch_pay_with_credits(['client_id' => $client_id]);
     $d = ['id' => $id, 'error' => '', 'error_code' => '', 'status' => 'processed', 'updated_at' => date('c')];
     $api_admin->invoice_transaction_update($d);
 }