Compare commits

..

No commits in common. "640911a1e2391b06753a5c5600c2e88c8b1c0926" and "c9b077f2255240054db88b7f647aaee225181866" have entirely different histories.

3 changed files with 244 additions and 389 deletions

View file

@ -3,12 +3,6 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
- Security hardening changes to plugin queries.
- Re-design of ZGo API callback to support WooCommerce 7.8.0
## [1.0.0-beta.1] - 2023-01-11 ## [1.0.0-beta.1] - 2023-01-11
- Adjust production server integration - Adjust production server integration

View file

@ -232,9 +232,9 @@ class zpmt_stats_page {
font-weight: 600;">'; font-weight: 600;">';
} }
$line++; $line++;
print '<td><a href="https://dev.zgo.cash/invoice/' . htmlentities($row->pmt_orderid, ENT_QUOTES) . '" target="_blank">' . htmlentities($row->pmt_orderid, ENT_QUOTES) . "</a></td>"; print '<td><a href="https://dev.zgo.cash/invoice/' . $row->pmt_orderid . '" target="_blank">' . $row->pmt_orderid . "</a></td>";
print "<td>" . $row->pmt_wc_order . "</td>"; print "<td>" . $row->pmt_wc_order . "</td>";
print "<td>" . htmlentities($row->pmt_wc_custname, ENT_QUOTES) . "</td>"; print "<td>" . $row->pmt_wc_custname . "</td>";
print '<td style="text-align:center;">'. $row->pmt_accepted . "</td>"; print '<td style="text-align:center;">'. $row->pmt_accepted . "</td>";
print '<td style="text-align:center;">'.$row->pmt_confirmed ."</td>"; print '<td style="text-align:center;">'.$row->pmt_confirmed ."</td>";
print '<td style="text-align:right;">'. number_format($row->pmt_amount,2) . "</td>"; print '<td style="text-align:right;">'. number_format($row->pmt_amount,2) . "</td>";

View file

@ -1,16 +1,16 @@
<?php <?php
/** /**
* Plugin Name: ZGo Payment Gateway * Plugin Name: ZGo Payment Gateway
* Plugin URI: https://vergara.tech' * Plugin URI: https://vergara.tech'
* Description: ZGo latest payment processing solution for Woocommerce. Accept payments using Zcash. * Description: ZGo latest payment processing solution for Woocommerce. Accept payments using Zcash.
* Version: 1.0.0 * Version: 1.0.0 beta
* Requires at least: 5.2 * Requires at least: 5.2
* Requires PHP: 7.2 * Requires PHP: 7.2
* Author: Vergara Tech LLC * Author: Vergara Tech LLC
* Author URI: https://zgo.cash/ * Author URI: https://vergara.tech
* License: GPL v2 or later * License: GPL v2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html * License URI: https://www.gnu.org/licenses/gpl-2.0.html
**/ **/
if ( ! defined( 'ABSPATH' ) ) { if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly exit; // Exit if accessed directly
@ -93,17 +93,10 @@ function zgopmt_init() {
if ( ! $this->is_valid_for_use() ) if ( ! $this->is_valid_for_use() )
$this->enabled = false; $this->enabled = false;
/** /**
* Add the webhook for payment confirmation from ZGo * Add the webhook for payment confirmation from ZGo
*/ */
//add_action( 'woocommerce_api_zpmtcallback', array($this,'zconfirm')); add_action( 'woocommerce_api_zpmtcallback', array($this,'zconfirm'));
}
public function register_routes() {
register_rest_route( 'wc/v3', 'zgocallback', array(
'methods' => 'GET',
'callback' => array($this,'zgoapicallback')));
} }
public function init_form_fields() { public function init_form_fields() {
@ -181,7 +174,7 @@ function zgopmt_init() {
if ( isset($this->zgoownerid) && if ( isset($this->zgoownerid) &&
($this->zgoownerid !== '') ) { ($this->zgoownerid !== '') ) {
$url = 'https://test.zgo.cash/auth?ownerid=' . $url = 'https://api.zgo.cash//auth?ownerid=' .
$this->zgoownerid . '&token=' . $this->zgoownerid . '&token=' .
$this->zgotoken . '&siteurl=' . $this->zgotoken . '&siteurl=' .
$this->base64url_encode($this->siteURL); $this->base64url_encode($this->siteURL);
@ -197,7 +190,7 @@ function zgopmt_init() {
$oid = json_decode($body); $oid = json_decode($body);
$isvalid = $oid->{'authorized'}; $isvalid = $oid->{'authorized'};
break; break;
case 202: case 202:git
$body = wp_remote_retrieve_body($response ); $body = wp_remote_retrieve_body($response );
$oid = json_decode($body); $oid = json_decode($body);
break; break;
@ -216,11 +209,11 @@ function zgopmt_init() {
global $wpdb; global $wpdb;
$order = wc_get_order( $order_id ); $order = wc_get_order( $order_id );
// $wc_order = wc_get_product($order_id); // $wc_order = wc_get_product($order_id);
$wc_order_key = $order->get_order_key(); $wc_order_key = $order->get_order_key();
$url = 'https://test.zgo.cash/woopayment' . $url = 'https://api.zgo.cash/woopayment' .
'?ownerid=' . $this->zgoownerid . '?ownerid=' . $this->zgoownerid .
'&token=' . $this->zgotoken . '&token=' . $this->zgotoken .
'&order_id=' . $order_id . '&order_id=' . $order_id .
@ -242,37 +235,34 @@ function zgopmt_init() {
$body = wp_remote_retrieve_body( $response ); $body = wp_remote_retrieve_body( $response );
$oid = json_decode($body); $oid = json_decode($body);
$zgoOrderid = $oid->{'order'}; $zgoOrderid = $oid->{'order'};
$zgoOrderToken = $oid->{'token'};
// //
// Save ZGo Order ID and Cart order // Save ZGo Order ID and Cart order
// //
$sql3 = $wpdb->prepare('replace into zgo_payments (pmt_orderid, pmt_wc_order, pmt_wc_custname, pmt_accepted, pmt_confirmed, pmt_amount, pmt_rate, pmt_zec, pmt_wc_paid) values (%s, %s, %s, %s, %s, %f, 0, 0, 0);', $sql = "replace into zgo_payments (" .
$zgoOrderid, $order_id, $order->get_billing_first_name() . ' ' . $order->get_billing_last_name(), date('Y-m-d H:i:s'), '', $order->get_total()); "pmt_orderid," .
//$sql = "replace into zgo_payments (" . "pmt_wc_order," .
//"pmt_orderid," . "pmt_wc_custname," .
//"pmt_wc_order," . "pmt_accepted," .
//"pmt_wc_custname," . "pmt_confirmed," .
//"pmt_accepted," . "pmt_amount," .
//"pmt_confirmed," . "pmt_rate," .
//"pmt_amount," . "pmt_zec," .
//"pmt_rate," . "pmt_wc_paid) values ('" .
//"pmt_zec," . $zgoOrderid . "','" .
//"pmt_wc_paid) values ('" . $order_id . "','" .
//$zgoOrderid . "','" . $order->get_billing_first_name() . " " .
//$order_id . "','" . $order->get_billing_last_name() . "','" .
//$order->get_billing_first_name() . " " . date('Y-m-d H:i:s') . "','',".
//$order->get_billing_last_name() . "','" . $order->get_total() .
//date('Y-m-d H:i:s') . "','',". ",0,0,0)";
//$order->get_total() . $wpdb->query($sql);
//",0,0,0)";
$wpdb->query($sql3);
// Remove cart. // Remove cart.
WC()->cart->empty_cart(); WC()->cart->empty_cart();
return array( return array(
'result' => 'success', 'result' => 'success',
'redirect' => 'https://dev.zgo.cash/invoice/' . $zgoOrderid . '?token=' . $zgoOrderToken, 'redirect' => 'https://app.zgo.cash/invoice/' . $zgoOrderid,
); );
break; break;
case 202: case 202:
@ -289,58 +279,53 @@ function zgopmt_init() {
/** /**
* Confirm payment and complete order * Confirm payment and complete order
*/ */
//public function zconfirm() { public function zconfirm() {
//global $wpdb; global $wpdb;
//$token = $_GET['token']; $token = $_GET['token'];
//$zgoOrderid = $_GET['orderid']; $zgoOrderid = $_GET['orderid'];
//$orderid = $_GET['wc_orderid']; $orderid = $_GET['wc_orderid'];
//$totalzec = $_GET['totalzec']; $totalzec = $_GET['totalzec'];
//$rate = $_GET['rate']; $rate = $_GET['rate'];
//$order = wc_get_order( $orderid ); $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 . "';";
////$sql = "select * from zgo_payments where pmt_wc_order = '" . $orderid . "';"; $result = $wpdb->get_row($sql,OBJECT);
//$result = $wpdb->get_row($sql,OBJECT); if ( ! is_null($result) ) {
//if ( ! is_null($result) ) {
//if ( ($token == $this->zgotoken ) if ( ( $token == $this->zgotoken )
//&& ( $result->pmt_orderid == $zgoOrderid ) && ( $result->pmt_orderid == $zgoOrderid )
//&& ( $result->pmt_wc_paid == '0' ) ) { && ( $result->pmt_wc_paid == '0' ) ) {
//switch ( $order->get_status() ) { switch ( $order->get_status() ) {
//case 'pending': case 'pending':
//case 'failed': case 'failed':
//$order->payment_complete(); $order->payment_complete();
//$order->reduce_order_stock(); $order->reduce_order_stock();
//// //
//// Mark order as completed in ZGo DB // Mark order as completed in ZGo DB
//// //
////$sql = "update zgo_payments set " . $sql = "update zgo_payments set " .
////"pmt_confirmed='" . date('Y-m-d H:i:s') . "pmt_confirmed='" . date('Y-m-d H:i:s') .
////"', pmt_rate=" . $rate . "', pmt_rate=" . $rate .
////", pmt_zec=" . $totalzec . ", pmt_zec=" . $totalzec .
////", pmt_wc_paid=1 " . ", pmt_wc_paid=1 " .
////" where pmt_wc_order='" . $orderid . "';"; " 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($sql);
//$wpdb->query($sql2);
//update_option('webhook_debug', $_GET); update_option('webhook_debug', $_GET);
//break; break;
//default: 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;
//break; }
//} } else {
//} else { // $this->console_log('Invalid parameters...');
////$this->console_log('Invalid parameters...'); }
//return array("message" => 'Invalid parameters...'); } else {
//} // $this->console_log('Database error...');
//} else { }
////$this->console_log('Database error...'); }
//return array("message" => 'Database error...');
//}
//}
public function thankyou_page () { public function thankyou_page () {
if ( $description = $this->get_description() ) { if ( $description = $this->get_description() ) {
@ -361,66 +346,6 @@ function zgopmt_init() {
return $edata; return $edata;
} }
public function zgoapicallback($request) {
global $wpdb;
//$token = $_GET['token'];
//$zgoOrderid = $_GET['orderid'];
//$orderid = $_GET['wc_orderid'];
//$totalzec = $_GET['totalzec'];
//$rate = $_GET['rate'];
$token = $request->get_param('token');
$zgoOrderid = $request->get_param('orderid');
$orderid = $request->get_param('wc_orderid');
$totalzec = $request->get_param('totalzec');
$rate = $request->get_param('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 ( (hash('sha256',$token) == hash('sha256',$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);
return array('message' => 'Order '. $orderid . ' mark as paid correctly.');
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_filter( 'woocommerce_payment_gateways', add_filter( 'woocommerce_payment_gateways',
@ -446,67 +371,3 @@ function zgopmtlist_plugin() {
$plugin->init(); $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->get_param('token');
$zgoOrderid = $data->get_param('orderid');
$orderid = $data->get_param('wc_orderid');
$totalzec = $data->get_param('totalzec');
$rate = $data->get_param('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() );
}
function plugin_register_rest_apis() {
$zgoPlugin = new WC_ZGopmt_Gateway();
$zgoPlugin->register_routes();
}
add_action( 'rest_api_init', 'plugin_register_rest_apis');