mirror of
https://github.com/10h30/woo-viet.git
synced 2026-07-11 18:56:13 +09:00
Reformat code by PHPStorm
This commit is contained in:
@@ -92,16 +92,17 @@ class WooViet_Admin_Page {
|
|||||||
<th scope="row"><?php _e( 'Add the OnePay Domestic Gateway', 'woo-viet' ) ?></th>
|
<th scope="row"><?php _e( 'Add the OnePay Domestic Gateway', 'woo-viet' ) ?></th>
|
||||||
<td>
|
<td>
|
||||||
<input name="settings[add_onepay_domestic][enabled]" type="hidden" value="no">
|
<input name="settings[add_onepay_domestic][enabled]" type="hidden" value="no">
|
||||||
<input name="settings[add_onepay_domestic][enabled]" type="checkbox" id="add_onepay_domestic" value="yes"
|
<input name="settings[add_onepay_domestic][enabled]" type="checkbox"
|
||||||
<?php if ( 'yes' == $settings['add_onepay_domestic']['enabled'] )
|
id="add_onepay_domestic" value="yes"
|
||||||
echo 'checked="checked"' ?>>
|
<?php if ( 'yes' == $settings['add_onepay_domestic']['enabled'] )
|
||||||
|
echo 'checked="checked"' ?>>
|
||||||
<label for="add_onepay_domestic"><?php _e( 'Enabled', 'woo-viet' ) ?></label>
|
<label for="add_onepay_domestic"><?php _e( 'Enabled', 'woo-viet' ) ?></label>
|
||||||
<br/>
|
<br/>
|
||||||
<br/>
|
<br/>
|
||||||
<label for="">
|
<label for="">
|
||||||
<?php
|
<?php
|
||||||
echo sprintf( __('Please configure this gateway under <a href="%s">WooCommerce -> Settings -> Checkout</a>', 'woo-viet'), admin_url( 'admin.php?page=wc-settings&tab=checkout') );
|
echo sprintf( __( 'Please configure this gateway under <a href="%s">WooCommerce -> Settings -> Checkout</a>', 'woo-viet' ), admin_url( 'admin.php?page=wc-settings&tab=checkout' ) );
|
||||||
?>
|
?>
|
||||||
</label>
|
</label>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -117,14 +118,14 @@ class WooViet_Admin_Page {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row"><?php _e( 'Add districts for Vietnam', 'woo-viet' ) ?><br />
|
<th scope="row"><?php _e( 'Add districts for Vietnam', 'woo-viet' ) ?><br/>
|
||||||
<i><?php _e( 'Require "Add provinces for Vietnam" active', 'woo-viet' ) ?></i>
|
<i><?php _e( 'Require "Add provinces for Vietnam" active', 'woo-viet' ) ?></i>
|
||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
<input name="settings[add_city][enabled]" type="hidden" value="no">
|
<input name="settings[add_city][enabled]" type="hidden" value="no">
|
||||||
<input name="settings[add_city][enabled]" type="checkbox" id="add_city" value="yes"
|
<input name="settings[add_city][enabled]" type="checkbox" id="add_city" value="yes"
|
||||||
<?php if ( 'yes' == $settings['add_city']['enabled'] )
|
<?php if ( 'yes' == $settings['add_city']['enabled'] )
|
||||||
echo 'checked="checked"' ?>>
|
echo 'checked="checked"' ?>>
|
||||||
<label for="add_city"><?php _e( 'Enabled', 'woo-viet' ) ?></label>
|
<label for="add_city"><?php _e( 'Enabled', 'woo-viet' ) ?></label>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
if ( ! defined( 'ABSPATH' ) ) {
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The class to handle the domestic OnePay gateway https://mtf.onepay.vn/developer/?page=modul_noidia
|
* The class to handle the domestic OnePay gateway https://mtf.onepay.vn/developer/?page=modul_noidia
|
||||||
*
|
*
|
||||||
@@ -10,17 +11,16 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|||||||
* @since 1.3
|
* @since 1.3
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
|
class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
|
||||||
/**
|
/**
|
||||||
* Constructor for the gateway.
|
* Constructor for the gateway.
|
||||||
*/
|
*/
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
$this->id = strtolower(__CLASS__);
|
$this->id = strtolower( __CLASS__ );
|
||||||
$this->has_fields = false;
|
$this->has_fields = false;
|
||||||
$this->order_button_text = __( 'Proceed to OnePay', 'woo-viet' );
|
$this->order_button_text = __( 'Proceed to OnePay', 'woo-viet' );
|
||||||
$this->method_title = __( 'OnePay Domestic Gateway (by Woo Viet)', 'woo-viet' );
|
$this->method_title = __( 'OnePay Domestic Gateway (by Woo Viet)', 'woo-viet' );
|
||||||
$this->method_description = __( 'OnePay supports all major bank ATMs in Vietnam.', 'woo-viet' );
|
$this->method_description = __( 'OnePay supports all major bank ATMs in Vietnam.', 'woo-viet' );
|
||||||
$this->supports = array(
|
$this->supports = array(
|
||||||
'products',
|
'products',
|
||||||
);
|
);
|
||||||
@@ -30,25 +30,29 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
|
|||||||
$this->init_settings();
|
$this->init_settings();
|
||||||
|
|
||||||
// Define user set variables.
|
// Define user set variables.
|
||||||
$this->title = $this->get_option( 'title' );
|
$this->title = $this->get_option( 'title' );
|
||||||
$this->description = $this->get_option( 'description' );
|
$this->description = $this->get_option( 'description' );
|
||||||
$this->testmode = 'yes' === $this->get_option( 'testmode', 'no' );
|
$this->testmode = 'yes' === $this->get_option( 'testmode', 'no' );
|
||||||
$this->merchant_id = $this->get_option( 'merchant_id' );
|
$this->merchant_id = $this->get_option( 'merchant_id' );
|
||||||
$this->access_code = $this->get_option( 'access_code' );
|
$this->access_code = $this->get_option( 'access_code' );
|
||||||
$this->secure_secret = $this->get_option( 'secure_secret' );
|
$this->secure_secret = $this->get_option( 'secure_secret' );
|
||||||
$this->user = $this->get_option( 'user' );
|
$this->user = $this->get_option( 'user' );
|
||||||
$this->password = $this->get_option( 'password' );
|
$this->password = $this->get_option( 'password' );
|
||||||
|
|
||||||
// Process the admin options
|
// Process the admin options
|
||||||
add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );
|
add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array(
|
||||||
|
$this,
|
||||||
|
'process_admin_options'
|
||||||
|
) );
|
||||||
|
|
||||||
add_action('woocommerce_thankyou_' . $this->id, array($this, 'handle_onepay_return_url'));
|
add_action( 'woocommerce_thankyou_' . $this->id, array( $this, 'handle_onepay_return_url' ) );
|
||||||
|
|
||||||
add_action('woocommerce_api_' . strtolower(__CLASS__), array($this, 'handle_onepay_ipn' ) );
|
add_action( 'woocommerce_api_' . strtolower( __CLASS__ ), array( $this, 'handle_onepay_ipn' ) );
|
||||||
|
|
||||||
// @todo: check whether or not this can be lodded in the cron job
|
// @todo: check whether or not this can be lodded in the cron job
|
||||||
add_action('wooviet_handle_onepay_querydr', array($this, 'handle_onepay_querydr'), 10, 1);
|
add_action( 'wooviet_handle_onepay_querydr', array( $this, 'handle_onepay_querydr' ), 10, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialise Gateway Settings Form Fields.
|
* Initialise Gateway Settings Form Fields.
|
||||||
*/
|
*/
|
||||||
@@ -56,20 +60,75 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
|
|||||||
$this->form_fields = include( 'onepay/domestic-settings.php' );
|
$this->form_fields = include( 'onepay/domestic-settings.php' );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the IPN URL for OnePay
|
||||||
|
* Format: http://my-site.com/wc-api/WooViet_OnePay_Domestic/
|
||||||
|
*/
|
||||||
|
static function get_onepay_ipn_url() {
|
||||||
|
return WC()->api_request_url( __CLASS__ );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process the payment
|
* Process the payment
|
||||||
|
*
|
||||||
* @param int $order_id
|
* @param int $order_id
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function process_payment( $order_id ) {
|
public function process_payment( $order_id ) {
|
||||||
$order = wc_get_order( $order_id );
|
$order = wc_get_order( $order_id );
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
'result' => 'success',
|
'result' => 'success',
|
||||||
'redirect' => $this->get_pay_url( $order )
|
'redirect' => $this->get_pay_url( $order )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the OnePay pay URL for an order
|
||||||
|
* AND set the queryDR cron for this transaction
|
||||||
|
*
|
||||||
|
* @param WC_Order $order
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function get_pay_url( $order ) {
|
||||||
|
$args = array(
|
||||||
|
'Title' => __( 'OnePay Payment Title', 'woo-viet' ),
|
||||||
|
'vpc_Merchant' => $this->merchant_id,
|
||||||
|
'vpc_AccessCode' => $this->access_code,
|
||||||
|
'vpc_MerchTxnRef' => sprintf( '%1$s_%2$s', $order->id, date( 'YmdHis' ) ),
|
||||||
|
'vpc_OrderInfo' => substr(
|
||||||
|
sprintf( 'Order #%1$s - %2$s', $order->id, get_home_url() ),
|
||||||
|
0,
|
||||||
|
32 ), // Limit 32 characters
|
||||||
|
'vpc_Amount' => $order->get_total() * 100, // Multiplying 100 is a requirement from OnePay
|
||||||
|
'vpc_ReturnURL' => $this->get_return_url( $order ),
|
||||||
|
'vpc_Version' => '2',
|
||||||
|
'vpc_Command' => 'pay',
|
||||||
|
'vpc_Locale' => ( 'vi' == get_locale() ) ? 'vn' : 'en',
|
||||||
|
'vpc_Currency' => 'VND',
|
||||||
|
'vpc_TicketNo' => $_SERVER['REMOTE_ADDR'],
|
||||||
|
);
|
||||||
|
|
||||||
|
// Set the queryDR cron for this transaction
|
||||||
|
$this->set_onepay_querydr_cron( $args['vpc_MerchTxnRef'] );
|
||||||
|
|
||||||
|
// Get the secure hash
|
||||||
|
$vpc_SecureHash = $this->create_vpc_SecureHash( $args );
|
||||||
|
|
||||||
|
// Add the secure hash to the args
|
||||||
|
$args['vpc_SecureHash'] = $vpc_SecureHash;
|
||||||
|
$http_args = http_build_query( $args, '', '&' );
|
||||||
|
|
||||||
|
if ( $this->testmode ) {
|
||||||
|
return 'https://mtf.onepay.vn/onecomm-pay/vpc.op?' . $http_args;
|
||||||
|
} else {
|
||||||
|
return 'https://onepay.vn/onecomm-pay/vpc.op?' . $http_args;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the cron job running queryDR in 20 mintues
|
* Set the cron job running queryDR in 20 mintues
|
||||||
* Because the OnePay payment timeout is 15 minutes
|
* Because the OnePay payment timeout is 15 minutes
|
||||||
@@ -85,83 +144,131 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
|
|||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* Get the OnePay pay URL for an order
|
|
||||||
* AND set the queryDR cron for this transaction
|
|
||||||
*
|
|
||||||
* @param WC_Order $order
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function get_pay_url ( $order ) {
|
|
||||||
$args = array(
|
|
||||||
'Title' => __('OnePay Payment Title', 'woo-viet'),
|
|
||||||
'vpc_Merchant' => $this->merchant_id,
|
|
||||||
'vpc_AccessCode' => $this->access_code,
|
|
||||||
'vpc_MerchTxnRef' => sprintf('%1$s_%2$s', $order->id, date ( 'YmdHis' )),
|
|
||||||
'vpc_OrderInfo' => substr(
|
|
||||||
sprintf('Order #%1$s - %2$s', $order->id, get_home_url()),
|
|
||||||
0,
|
|
||||||
32 ), // Limit 32 characters
|
|
||||||
'vpc_Amount' => $order->get_total() * 100, // Multiplying 100 is a requirement from OnePay
|
|
||||||
'vpc_ReturnURL' => $this->get_return_url($order),
|
|
||||||
'vpc_Version' => '2',
|
|
||||||
'vpc_Command' => 'pay',
|
|
||||||
'vpc_Locale' => ( 'vi' == get_locale() ) ? 'vn' : 'en',
|
|
||||||
'vpc_Currency' => 'VND',
|
|
||||||
'vpc_TicketNo' => $_SERVER['REMOTE_ADDR'],
|
|
||||||
);
|
|
||||||
|
|
||||||
// Set the queryDR cron for this transaction
|
|
||||||
$this->set_onepay_querydr_cron($args['vpc_MerchTxnRef']);
|
|
||||||
|
|
||||||
// Get the secure hash
|
|
||||||
$vpc_SecureHash = $this->create_vpc_SecureHash( $args );
|
|
||||||
|
|
||||||
// Add the secure hash to the args
|
|
||||||
$args['vpc_SecureHash'] = $vpc_SecureHash;
|
|
||||||
$http_args = http_build_query( $args, '', '&' );
|
|
||||||
|
|
||||||
if ( $this->testmode ) {
|
|
||||||
return 'https://mtf.onepay.vn/onecomm-pay/vpc.op?' . $http_args;
|
|
||||||
} else {
|
|
||||||
return 'https://onepay.vn/onecomm-pay/vpc.op?' . $http_args;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the IPN URL for OnePay
|
|
||||||
* Format: http://my-site.com/wc-api/WooViet_OnePay_Domestic/
|
|
||||||
*/
|
|
||||||
static function get_onepay_ipn_url(){
|
|
||||||
return WC()->api_request_url( __CLASS__ );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create the vpc_SecureHash value.
|
* Create the vpc_SecureHash value.
|
||||||
* @see https://mtf.onepay.vn/developer/?page=modul_noidia_php
|
* @see https://mtf.onepay.vn/developer/?page=modul_noidia_php
|
||||||
*
|
*
|
||||||
* @param array $args
|
* @param array $args
|
||||||
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function create_vpc_SecureHash ( $args ){
|
public function create_vpc_SecureHash( $args ) {
|
||||||
$stringHashData = "";
|
$stringHashData = "";
|
||||||
|
|
||||||
// arrange array data a-z before make a hash
|
// arrange array data a-z before make a hash
|
||||||
ksort ($args );
|
ksort( $args );
|
||||||
|
|
||||||
foreach($args as $key => $value) {
|
foreach ( $args as $key => $value ) {
|
||||||
|
|
||||||
if (strlen($value) > 0) {
|
if ( strlen( $value ) > 0 ) {
|
||||||
if ((strlen($value) > 0) && ((substr($key, 0,4)=="vpc_") || (substr($key,0,5) =="user_"))) {
|
if ( ( strlen( $value ) > 0 ) && ( ( substr( $key, 0, 4 ) == "vpc_" ) || ( substr( $key, 0, 5 ) == "user_" ) ) ) {
|
||||||
$stringHashData .= $key . "=" . $value . "&";
|
$stringHashData .= $key . "=" . $value . "&";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Remove the last character "&"
|
//Remove the last character "&"
|
||||||
$stringHashData = rtrim($stringHashData, "&");
|
$stringHashData = rtrim( $stringHashData, "&" );
|
||||||
|
|
||||||
return strtoupper(hash_hmac('SHA256', $stringHashData, pack('H*', $this->secure_secret )));
|
return strtoupper( hash_hmac( 'SHA256', $stringHashData, pack( 'H*', $this->secure_secret ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle the return URL - GET request from OnePay
|
||||||
|
*/
|
||||||
|
public function handle_onepay_return_url() {
|
||||||
|
|
||||||
|
if ( isset( $_GET['vpc_SecureHash'] ) ) {
|
||||||
|
|
||||||
|
$this->process_onepay_response_data( $_GET, 'return' );
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle the repsonse data from OnePay
|
||||||
|
*
|
||||||
|
* @param string $args the response data from OnePay
|
||||||
|
* @param string $type
|
||||||
|
*/
|
||||||
|
public function process_onepay_response_data( $args, $type ) {
|
||||||
|
$types_accepted = array(
|
||||||
|
'return',
|
||||||
|
'ipn',
|
||||||
|
'querydr',
|
||||||
|
);
|
||||||
|
|
||||||
|
// Do nothing if the type is wrong
|
||||||
|
if ( ! in_array( $type, $types_accepted ) ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$is_secure = false;
|
||||||
|
$is_querydr_exists = false;
|
||||||
|
|
||||||
|
if ( 'return' == $type OR 'ipn' == $type ) {
|
||||||
|
$vpc_SecureHash = $args['vpc_SecureHash'];
|
||||||
|
|
||||||
|
// Remove the parameter "vpc_SecureHash" for validating SecureHash
|
||||||
|
unset( $args['vpc_SecureHash'] );
|
||||||
|
|
||||||
|
$is_secure = $this->check_vpc_SecureHash( $args, $vpc_SecureHash );
|
||||||
|
|
||||||
|
} elseif ( 'querydr' == $type ) {
|
||||||
|
$is_querydr_exists = ( 'Y' == $args['vpc_DRExists'] );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process the data
|
||||||
|
if ( $is_secure OR $is_querydr_exists ) {
|
||||||
|
/**
|
||||||
|
* $vpc_MerchTxnRef looks like this "139_20170418101843" or {order_id}_{date_time}
|
||||||
|
* @see $this->get_pay_url();
|
||||||
|
*/
|
||||||
|
$vpc_MerchTxnRef = $args['vpc_MerchTxnRef'];
|
||||||
|
$vpc_TxnResponseCode = $args['vpc_TxnResponseCode'];
|
||||||
|
|
||||||
|
// Get the order_id part only
|
||||||
|
$order_id = substr( $vpc_MerchTxnRef, 0, strrpos( $vpc_MerchTxnRef, '_' ) );
|
||||||
|
|
||||||
|
$order = wc_get_order( $order_id );
|
||||||
|
|
||||||
|
// Add the order note for the reference
|
||||||
|
$order_note = sprintf(
|
||||||
|
__( 'OnePay Domestic Gateway Info | Code: %1$s | Message: %2$s | MerchantTxnRef: %3$s | Type: %4$s', 'woo-viet' ),
|
||||||
|
$vpc_TxnResponseCode,
|
||||||
|
$this->OnePay_getResponseDescription( $vpc_TxnResponseCode ),
|
||||||
|
$vpc_MerchTxnRef,
|
||||||
|
$type
|
||||||
|
);
|
||||||
|
$order->add_order_note( $order_note );
|
||||||
|
|
||||||
|
// If the payment is successful, update the order
|
||||||
|
if ( "0" == $vpc_TxnResponseCode ) {
|
||||||
|
$order->payment_complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ( $type ) {
|
||||||
|
|
||||||
|
case 'return':
|
||||||
|
wp_redirect( $this->get_return_url( $order ) );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'ipn':
|
||||||
|
exit( 'responsecode=1&desc=confirm-success' );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'querydr':
|
||||||
|
// Do nothing
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if ( 'ipn' == $type ) {
|
||||||
|
exit( 'responsecode=0&desc=confirm-success' );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -174,155 +281,16 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
|
|||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function check_vpc_SecureHash ($args, $vpc_SecureHash) {
|
public function check_vpc_SecureHash( $args, $vpc_SecureHash ) {
|
||||||
// Generate the "vpc_SecureHash" value from $args
|
// Generate the "vpc_SecureHash" value from $args
|
||||||
$vpc_SecureHash_from_args = $this->create_vpc_SecureHash($args);
|
$vpc_SecureHash_from_args = $this->create_vpc_SecureHash( $args );
|
||||||
|
|
||||||
if ($vpc_SecureHash_from_args == $vpc_SecureHash ) {
|
if ( $vpc_SecureHash_from_args == $vpc_SecureHash ) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* Handle the return URL - GET request from OnePay
|
|
||||||
*/
|
|
||||||
public function handle_onepay_return_url(){
|
|
||||||
|
|
||||||
if (isset($_GET['vpc_SecureHash'])) {
|
|
||||||
|
|
||||||
$this->process_onepay_response_data( $_GET, 'return' );
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle the IPN POST request from OnePay
|
|
||||||
*/
|
|
||||||
public function handle_onepay_ipn() {
|
|
||||||
|
|
||||||
if (isset($_REQUEST['vpc_SecureHash'])) {
|
|
||||||
|
|
||||||
$this->process_onepay_response_data( $_REQUEST, 'ipn' );
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle the queryDR request
|
|
||||||
* @param string $vpc_MerchTxnRef
|
|
||||||
*/
|
|
||||||
public function handle_onepay_querydr( $vpc_MerchTxnRef ) {
|
|
||||||
// Build the queryDR link
|
|
||||||
$args = array(
|
|
||||||
'vpc_Command' => 'queryDR',
|
|
||||||
'vpc_Version' => '1',
|
|
||||||
'vpc_MerchTxnRef' => $vpc_MerchTxnRef,
|
|
||||||
'vpc_Merchant' => $this->merchant_id,
|
|
||||||
'vpc_AccessCode' => $this->access_code,
|
|
||||||
'vpc_User' => $this->user,
|
|
||||||
'vpc_Password' => $this->password,
|
|
||||||
);
|
|
||||||
|
|
||||||
$http_args = http_build_query( $args, '', '&' );
|
|
||||||
|
|
||||||
if ( $this->testmode ) {
|
|
||||||
$http_link = 'https://mtf.onepay.vn/onecomm-pay/Vpcdps.op?' . $http_args;
|
|
||||||
} else {
|
|
||||||
$http_link = 'https://onepay.vn/onecomm-pay/Vpcdps.op?' . $http_args;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Connect to OnePay to get the queryDR info
|
|
||||||
$http_response = wp_remote_get( $http_link );
|
|
||||||
parse_str( wp_remote_retrieve_body( $http_response ), $args_response );
|
|
||||||
|
|
||||||
// Process the data
|
|
||||||
$this->process_onepay_response_data($args_response, 'querydr');
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle the repsonse data from OnePay
|
|
||||||
* @param string $args the response data from OnePay
|
|
||||||
* @param string $type
|
|
||||||
*/
|
|
||||||
public function process_onepay_response_data ($args, $type ) {
|
|
||||||
$types_accepted = array(
|
|
||||||
'return',
|
|
||||||
'ipn',
|
|
||||||
'querydr',
|
|
||||||
);
|
|
||||||
|
|
||||||
// Do nothing if the type is wrong
|
|
||||||
if ( ! in_array($type, $types_accepted) ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$is_secure = false;
|
|
||||||
$is_querydr_exists = false;
|
|
||||||
|
|
||||||
if ('return' == $type OR 'ipn' == $type ) {
|
|
||||||
$vpc_SecureHash = $args['vpc_SecureHash'];
|
|
||||||
|
|
||||||
// Remove the parameter "vpc_SecureHash" for validating SecureHash
|
|
||||||
unset($args['vpc_SecureHash']);
|
|
||||||
|
|
||||||
$is_secure = $this->check_vpc_SecureHash($args, $vpc_SecureHash);
|
|
||||||
|
|
||||||
} elseif ('querydr' == $type ) {
|
|
||||||
$is_querydr_exists = ( 'Y' == $args['vpc_DRExists'] );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Process the data
|
|
||||||
if ( $is_secure OR $is_querydr_exists ) {
|
|
||||||
/**
|
|
||||||
* $vpc_MerchTxnRef looks like this "139_20170418101843" or {order_id}_{date_time}
|
|
||||||
* @see $this->get_pay_url();
|
|
||||||
*/
|
|
||||||
$vpc_MerchTxnRef = $args['vpc_MerchTxnRef'];
|
|
||||||
$vpc_TxnResponseCode = $args['vpc_TxnResponseCode'];
|
|
||||||
|
|
||||||
// Get the order_id part only
|
|
||||||
$order_id = substr($vpc_MerchTxnRef,0,strrpos($vpc_MerchTxnRef,'_'));
|
|
||||||
|
|
||||||
$order = wc_get_order($order_id);
|
|
||||||
|
|
||||||
// Add the order note for the reference
|
|
||||||
$order_note = sprintf(
|
|
||||||
__('OnePay Domestic Gateway Info | Code: %1$s | Message: %2$s | MerchantTxnRef: %3$s | Type: %4$s', 'woo-viet'),
|
|
||||||
$vpc_TxnResponseCode,
|
|
||||||
$this->OnePay_getResponseDescription($vpc_TxnResponseCode),
|
|
||||||
$vpc_MerchTxnRef,
|
|
||||||
$type
|
|
||||||
);
|
|
||||||
$order->add_order_note($order_note);
|
|
||||||
|
|
||||||
// If the payment is successful, update the order
|
|
||||||
if ("0" == $vpc_TxnResponseCode )
|
|
||||||
$order->payment_complete();
|
|
||||||
|
|
||||||
switch ( $type ) {
|
|
||||||
|
|
||||||
case 'return':
|
|
||||||
wp_redirect($this->get_return_url( $order ));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'ipn':
|
|
||||||
exit( 'responsecode=1&desc=confirm-success');
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'querydr':
|
|
||||||
// Do nothing
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if ( 'ipn' == $type )
|
|
||||||
exit('responsecode=0&desc=confirm-success');
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the response description based on the response code
|
* Get the response description based on the response code
|
||||||
@@ -332,9 +300,9 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
|
|||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function OnePay_getResponseDescription($responseCode) {
|
public function OnePay_getResponseDescription( $responseCode ) {
|
||||||
|
|
||||||
switch ($responseCode) {
|
switch ( $responseCode ) {
|
||||||
case "0" :
|
case "0" :
|
||||||
$result = "Giao dịch thành công - Approved";
|
$result = "Giao dịch thành công - Approved";
|
||||||
break;
|
break;
|
||||||
@@ -383,7 +351,54 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
|
|||||||
default :
|
default :
|
||||||
$result = "Giao dịch thất bại - Failured";
|
$result = "Giao dịch thất bại - Failured";
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle the IPN POST request from OnePay
|
||||||
|
*/
|
||||||
|
public function handle_onepay_ipn() {
|
||||||
|
|
||||||
|
if ( isset( $_REQUEST['vpc_SecureHash'] ) ) {
|
||||||
|
|
||||||
|
$this->process_onepay_response_data( $_REQUEST, 'ipn' );
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle the queryDR request
|
||||||
|
*
|
||||||
|
* @param string $vpc_MerchTxnRef
|
||||||
|
*/
|
||||||
|
public function handle_onepay_querydr( $vpc_MerchTxnRef ) {
|
||||||
|
// Build the queryDR link
|
||||||
|
$args = array(
|
||||||
|
'vpc_Command' => 'queryDR',
|
||||||
|
'vpc_Version' => '1',
|
||||||
|
'vpc_MerchTxnRef' => $vpc_MerchTxnRef,
|
||||||
|
'vpc_Merchant' => $this->merchant_id,
|
||||||
|
'vpc_AccessCode' => $this->access_code,
|
||||||
|
'vpc_User' => $this->user,
|
||||||
|
'vpc_Password' => $this->password,
|
||||||
|
);
|
||||||
|
|
||||||
|
$http_args = http_build_query( $args, '', '&' );
|
||||||
|
|
||||||
|
if ( $this->testmode ) {
|
||||||
|
$http_link = 'https://mtf.onepay.vn/onecomm-pay/Vpcdps.op?' . $http_args;
|
||||||
|
} else {
|
||||||
|
$http_link = 'https://onepay.vn/onecomm-pay/Vpcdps.op?' . $http_args;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Connect to OnePay to get the queryDR info
|
||||||
|
$http_response = wp_remote_get( $http_link );
|
||||||
|
parse_str( wp_remote_retrieve_body( $http_response ), $args_response );
|
||||||
|
|
||||||
|
// Process the data
|
||||||
|
$this->process_onepay_response_data( $args_response, 'querydr' );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,13 +8,13 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|||||||
* Settings for 1Pay Gateway.
|
* Settings for 1Pay Gateway.
|
||||||
*/
|
*/
|
||||||
return array(
|
return array(
|
||||||
'enabled' => array(
|
'enabled' => array(
|
||||||
'title' => __( 'Enable/Disable', 'woo-viet' ),
|
'title' => __( 'Enable/Disable', 'woo-viet' ),
|
||||||
'type' => 'checkbox',
|
'type' => 'checkbox',
|
||||||
'label' => __( 'OnePay Domestic Gateway (by Woo Viet)', 'woo-viet' ),
|
'label' => __( 'OnePay Domestic Gateway (by Woo Viet)', 'woo-viet' ),
|
||||||
'default' => 'no'
|
'default' => 'no'
|
||||||
),
|
),
|
||||||
'testmode' => array(
|
'testmode' => array(
|
||||||
'title' => __( 'OnePay Sandbox', 'woocommerce' ),
|
'title' => __( 'OnePay Sandbox', 'woocommerce' ),
|
||||||
'type' => 'checkbox',
|
'type' => 'checkbox',
|
||||||
'label' => __( 'Enable OnePay sandbox (testing)', 'woocommerce' ),
|
'label' => __( 'Enable OnePay sandbox (testing)', 'woocommerce' ),
|
||||||
@@ -22,26 +22,26 @@ return array(
|
|||||||
'description' => sprintf( __( 'OnePay sandbox can be used to test payments. See <a href="%s">the testing info</a>.', 'woocommerce' ), 'https://mtf.onepay.vn/developer/?page=modul_noidia' ),
|
'description' => sprintf( __( 'OnePay sandbox can be used to test payments. See <a href="%s">the testing info</a>.', 'woocommerce' ), 'https://mtf.onepay.vn/developer/?page=modul_noidia' ),
|
||||||
//@todo: add the logo https://mtf.onepay.vn/developer/?page=logo
|
//@todo: add the logo https://mtf.onepay.vn/developer/?page=logo
|
||||||
),
|
),
|
||||||
'title' => array(
|
'title' => array(
|
||||||
'title' => __( 'Title', 'woo-viet' ),
|
'title' => __( 'Title', 'woo-viet' ),
|
||||||
'type' => 'text',
|
'type' => 'text',
|
||||||
'description' => __( 'This controls the title which the user sees during checkout.', 'woo-viet' ),
|
'description' => __( 'This controls the title which the user sees during checkout.', 'woo-viet' ),
|
||||||
'default' => __( 'OnePay Domestic Gateway', 'woo-viet' ),
|
'default' => __( 'OnePay Domestic Gateway', 'woo-viet' ),
|
||||||
'desc_tip' => true,
|
'desc_tip' => true,
|
||||||
),
|
),
|
||||||
'description' => array(
|
'description' => array(
|
||||||
'title' => __( 'Description', 'woo-viet' ),
|
'title' => __( 'Description', 'woo-viet' ),
|
||||||
'type' => 'textarea',
|
'type' => 'textarea',
|
||||||
'desc_tip' => true,
|
'desc_tip' => true,
|
||||||
'description' => __( 'This controls the description which the user sees during checkout.', 'woo-viet' ),
|
'description' => __( 'This controls the description which the user sees during checkout.', 'woo-viet' ),
|
||||||
'default' => __( 'With OnePay, you can make payment by using any local Vietnam ATM card.', 'woo-viet' )
|
'default' => __( 'With OnePay, you can make payment by using any local Vietnam ATM card.', 'woo-viet' )
|
||||||
),
|
),
|
||||||
'api_details' => array(
|
'api_details' => array(
|
||||||
'title' => __( 'API Credentials', 'woo-viet' ),
|
'title' => __( 'API Credentials', 'woo-viet' ),
|
||||||
'type' => 'title',
|
'type' => 'title',
|
||||||
'description' => sprintf( __( 'Enter your OnePay API credentials. Contact OnePay to have your credentials %shere%s.', 'woo-viet' ), '<a href="http://onepay.com.vn/home/en/contact-us.html">', '</a>' ),
|
'description' => sprintf( __( 'Enter your OnePay API credentials. Contact OnePay to have your credentials %shere%s.', 'woo-viet' ), '<a href="http://onepay.com.vn/home/en/contact-us.html">', '</a>' ),
|
||||||
),
|
),
|
||||||
'merchant_id' => array(
|
'merchant_id' => array(
|
||||||
'title' => __( 'Merchant ID', 'woo-viet' ),
|
'title' => __( 'Merchant ID', 'woo-viet' ),
|
||||||
'type' => 'text',
|
'type' => 'text',
|
||||||
'description' => __( 'Get your Merchant ID from OnePay.', 'woo-viet' ),
|
'description' => __( 'Get your Merchant ID from OnePay.', 'woo-viet' ),
|
||||||
@@ -49,7 +49,7 @@ return array(
|
|||||||
'desc_tip' => true,
|
'desc_tip' => true,
|
||||||
'placeholder' => __( 'Required. Provided by OnePay.', 'woo-viet' )
|
'placeholder' => __( 'Required. Provided by OnePay.', 'woo-viet' )
|
||||||
),
|
),
|
||||||
'access_code' => array(
|
'access_code' => array(
|
||||||
'title' => __( 'Access Code', 'woocommerce' ),
|
'title' => __( 'Access Code', 'woocommerce' ),
|
||||||
'type' => 'text',
|
'type' => 'text',
|
||||||
'description' => __( 'Get your Access Code from from OnePay.', 'woo-viet' ),
|
'description' => __( 'Get your Access Code from from OnePay.', 'woo-viet' ),
|
||||||
@@ -65,7 +65,7 @@ return array(
|
|||||||
'desc_tip' => true,
|
'desc_tip' => true,
|
||||||
'placeholder' => __( 'Required. Provided by OnePay.', 'woo-viet' )
|
'placeholder' => __( 'Required. Provided by OnePay.', 'woo-viet' )
|
||||||
),
|
),
|
||||||
'user' => array(
|
'user' => array(
|
||||||
'title' => __( 'User for queryDR. Test value: op01', 'woocommerce' ),
|
'title' => __( 'User for queryDR. Test value: op01', 'woocommerce' ),
|
||||||
'type' => 'text',
|
'type' => 'text',
|
||||||
'description' => __( 'Get your user info from from OnePay.', 'woo-viet' ),
|
'description' => __( 'Get your user info from from OnePay.', 'woo-viet' ),
|
||||||
@@ -73,7 +73,7 @@ return array(
|
|||||||
'desc_tip' => true,
|
'desc_tip' => true,
|
||||||
'placeholder' => __( 'Required. Provided by OnePay', 'woo-viet' )
|
'placeholder' => __( 'Required. Provided by OnePay', 'woo-viet' )
|
||||||
),
|
),
|
||||||
'password' => array(
|
'password' => array(
|
||||||
'title' => __( 'Password for queryDR. Test value: op123456', 'woocommerce' ),
|
'title' => __( 'Password for queryDR. Test value: op123456', 'woocommerce' ),
|
||||||
'type' => 'text',
|
'type' => 'text',
|
||||||
'description' => __( 'Get your password info from from OnePay.', 'woo-viet' ),
|
'description' => __( 'Get your password info from from OnePay.', 'woo-viet' ),
|
||||||
@@ -81,11 +81,11 @@ return array(
|
|||||||
'desc_tip' => true,
|
'desc_tip' => true,
|
||||||
'placeholder' => __( 'Required. Provided by OnePay.', 'woo-viet' )
|
'placeholder' => __( 'Required. Provided by OnePay.', 'woo-viet' )
|
||||||
),
|
),
|
||||||
'more_info' => array(
|
'more_info' => array(
|
||||||
'title' => __( 'Instant Payment Notification (IPN)', 'woo-viet' ),
|
'title' => __( 'Instant Payment Notification (IPN)', 'woo-viet' ),
|
||||||
'type' => 'title',
|
'type' => 'title',
|
||||||
'description' =>
|
'description' =>
|
||||||
sprintf('URL: <code>%s</code>', WooViet_OnePay_Domestic::get_onepay_ipn_url() ) . '<p/>' .
|
sprintf( 'URL: <code>%s</code>', WooViet_OnePay_Domestic::get_onepay_ipn_url() ) . '<p/>' .
|
||||||
sprintf( __( '%sContact OnePay%s to configure this URL on its site. <strong>This is required based on its guidelines.</strong>', 'woo-viet' ), '<a href="http://onepay.com.vn/home/en/contact-us.html">', '</a>' ),
|
sprintf( __( '%sContact OnePay%s to configure this URL on its site. <strong>This is required based on its guidelines.</strong>', 'woo-viet' ), '<a href="http://onepay.com.vn/home/en/contact-us.html">', '</a>' ),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user