diff --git a/zgopmtgwy.php b/zgopmtgwy.php index 7f55f0b..5db4282 100644 --- a/zgopmtgwy.php +++ b/zgopmtgwy.php @@ -93,6 +93,7 @@ function zgopmt_init() { if ( ! $this->is_valid_for_use() ) $this->enabled = false; + /** * Add the webhook for payment confirmation from ZGo */ @@ -293,12 +294,12 @@ function zgopmt_init() { $rate = $_GET['rate']; $order = wc_get_order( $orderid ); - $sql = $wpdb->prepare('select * from zgo_payments where pmt_wc_order = %s;', $orderid); + $sql = $wpdb->prepare('select * from zgo_payments where pmt_wc_order = %s ;', $orderid); //$sql = "select * from zgo_payments where pmt_wc_order = '" . $orderid . "';"; $result = $wpdb->get_row($sql,OBJECT); if ( ! is_null($result) ) { - if ( ( hash('sha256', $token) == hash('sha256', $this->zgotoken) ) + if ( ($token == $this->zgotoken ) && ( $result->pmt_orderid == $zgoOrderid ) && ( $result->pmt_wc_paid == '0' ) ) { switch ( $order->get_status() ) { @@ -321,14 +322,17 @@ function zgopmt_init() { update_option('webhook_debug', $_GET); break; default: - // $this->console_log('Order ' . $orderid . ' already paid or cancelled...'); + //$this->console_log('Order ' . $orderid . ' already paid or cancelled...'); + return array("message" => 'Order ' . $orderid . ' already paid or cancelled...'); break; } } else { - // $this->console_log('Invalid parameters...'); + //$this->console_log('Invalid parameters...'); + return array("message" => 'Invalid parameters...'); } } else { - // $this->console_log('Database error...'); + //$this->console_log('Database error...'); + return array("message" => 'Database error...'); } } @@ -351,6 +355,8 @@ function zgopmt_init() { return $edata; } + + } add_filter( 'woocommerce_payment_gateways', @@ -376,3 +382,67 @@ function zgopmtlist_plugin() { $plugin->init(); } + +function get_custom($data) { + global $wpdb; + + //$token = $_GET['token']; + //$zgoOrderid = $_GET['orderid']; + //$orderid = $_GET['wc_orderid']; + //$totalzec = $_GET['totalzec']; + //$rate = $_GET['rate']; + $token = $data->token; + $zgoOrderid = $data->orderid; + $orderid = $data->wc_orderid; + $totalzec = $data->totalzec; + $rate = $data->rate; + $order = wc_get_order( $orderid ); + + //$sql = $wpdb->prepare('select * from zgo_payments where pmt_wc_order = %s ;', $orderid); + $sql = "select * from zgo_payments where pmt_wc_order = '" . $orderid . "';"; + $result = $wpdb->get_row($sql,OBJECT); + if ( ! is_null($result) ) { + + if ( ($token == $this->zgotoken ) + && ( $result->pmt_orderid == $zgoOrderid ) + && ( $result->pmt_wc_paid == '0' ) ) { + switch ( $order->get_status() ) { + case 'pending': + case 'failed': + $order->payment_complete(); + $order->reduce_order_stock(); + // + // Mark order as completed in ZGo DB + // + //$sql = "update zgo_payments set " . + //"pmt_confirmed='" . date('Y-m-d H:i:s') . + //"', pmt_rate=" . $rate . + //", pmt_zec=" . $totalzec . + //", pmt_wc_paid=1 " . + //" where pmt_wc_order='" . $orderid . "';"; + $sql2 = $wpdb->prepare('update zgo_payments set pmt_confirmed = %s, pmt_rate = %f, pmt_zec = %f, pmt_wc_paid = 1 where pmt_wc_order = %s;', date('Y-m-d H:i:s'), $rate, $totalzec, $orderid ); + $wpdb->query($sql2); + + //update_option('webhook_debug', $_GET); + break; + default: + //$this->console_log('Order ' . $orderid . ' already paid or cancelled...'); + return array("message" => 'Order ' . $orderid . ' already paid or cancelled...'); + break; + } + } else { + //$this->console_log('Invalid parameters...'); + return array("message" => 'Invalid parameters...'); + } + } else { + //$this->console_log('Database error...'); + return array("message" => 'Database error...'); + } + //return array( 'custom' => 'Data', "request" => $data->get_params() ); +} + +add_action( 'rest_api_init', function () { + register_rest_route( 'wc/v3', 'custom', array( + 'methods' => 'GET', + 'callback' => 'get_custom')); +});