Reformat code by PHPStorm

This commit is contained in:
htdat
2017-04-22 10:40:10 +07:00
parent dc226abb88
commit a33745b850
3 changed files with 253 additions and 237 deletions
+4 -3
View File
@@ -92,7 +92,8 @@ class WooViet_Admin_Page {
<th scope="row"><?php _e( 'Add the OnePay Domestic Gateway', 'woo-viet' ) ?></th>
<td>
<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"
id="add_onepay_domestic" value="yes"
<?php if ( 'yes' == $settings['add_onepay_domestic']['enabled'] )
echo 'checked="checked"' ?>>
<label for="add_onepay_domestic"><?php _e( 'Enabled', 'woo-viet' ) ?></label>
@@ -100,7 +101,7 @@ class WooViet_Admin_Page {
<br/>
<label for="">
<?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>
</td>
@@ -117,7 +118,7 @@ class WooViet_Admin_Page {
</td>
</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>
</th>
<td>
+138 -123
View File
@@ -2,6 +2,7 @@
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* The class to handle the domestic OnePay gateway https://mtf.onepay.vn/developer/?page=modul_noidia
*
@@ -10,13 +11,12 @@ if ( ! defined( 'ABSPATH' ) ) {
* @since 1.3
*
*/
class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
/**
* Constructor for the gateway.
*/
public function __construct() {
$this->id = strtolower(__CLASS__);
$this->id = strtolower( __CLASS__ );
$this->has_fields = false;
$this->order_button_text = __( 'Proceed to OnePay', 'woo-viet' );
$this->method_title = __( 'OnePay Domestic Gateway (by Woo Viet)', 'woo-viet' );
@@ -40,15 +40,19 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
$this->password = $this->get_option( 'password' );
// 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
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.
*/
@@ -56,54 +60,50 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
$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
*
* @param int $order_id
*
* @return array
*/
public function process_payment( $order_id ) {
$order = wc_get_order( $order_id );
return array(
'result' => 'success',
'redirect' => $this->get_pay_url( $order )
);
}
/**
* Set the cron job running queryDR in 20 mintues
* Because the OnePay payment timeout is 15 minutes
*
* @param string $vpc_MerchTxnRef
*/
public function set_onepay_querydr_cron( $vpc_MerchTxnRef ) {
wp_schedule_single_event(
time() + 20 * 60,
'wooviet_handle_onepay_querydr',
array( $vpc_MerchTxnRef ) // @todo check this
);
}
/**
* 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 ) {
public function get_pay_url( $order ) {
$args = array(
'Title' => __('OnePay Payment Title', 'woo-viet'),
'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_MerchTxnRef' => sprintf( '%1$s_%2$s', $order->id, date( 'YmdHis' ) ),
'vpc_OrderInfo' => substr(
sprintf('Order #%1$s - %2$s', $order->id, get_home_url()),
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_ReturnURL' => $this->get_return_url( $order ),
'vpc_Version' => '2',
'vpc_Command' => 'pay',
'vpc_Locale' => ( 'vi' == get_locale() ) ? 'vn' : 'en',
@@ -112,7 +112,7 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
);
// Set the queryDR cron for this transaction
$this->set_onepay_querydr_cron($args['vpc_MerchTxnRef']);
$this->set_onepay_querydr_cron( $args['vpc_MerchTxnRef'] );
// Get the secure hash
$vpc_SecureHash = $this->create_vpc_SecureHash( $args );
@@ -130,11 +130,19 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
}
/**
* Get the IPN URL for OnePay
* Format: http://my-site.com/wc-api/WooViet_OnePay_Domestic/
* Set the cron job running queryDR in 20 mintues
* Because the OnePay payment timeout is 15 minutes
*
* @param string $vpc_MerchTxnRef
*/
static function get_onepay_ipn_url(){
return WC()->api_request_url( __CLASS__ );
public function set_onepay_querydr_cron( $vpc_MerchTxnRef ) {
wp_schedule_single_event(
time() + 20 * 60,
'wooviet_handle_onepay_querydr',
array( $vpc_MerchTxnRef ) // @todo check this
);
}
/**
@@ -142,111 +150,48 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
* @see https://mtf.onepay.vn/developer/?page=modul_noidia_php
*
* @param array $args
*
* @return string
*/
public function create_vpc_SecureHash ( $args ){
public function create_vpc_SecureHash( $args ) {
$stringHashData = "";
// 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) && ((substr($key, 0,4)=="vpc_") || (substr($key,0,5) =="user_"))) {
if ( strlen( $value ) > 0 ) {
if ( ( strlen( $value ) > 0 ) && ( ( substr( $key, 0, 4 ) == "vpc_" ) || ( substr( $key, 0, 5 ) == "user_" ) ) ) {
$stringHashData .= $key . "=" . $value . "&";
}
}
}
//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 ) ) );
}
/**
* Whether or not the arguments and a provided $vpc_SecureHash are the same
*
* @see https://mtf.onepay.vn/developer/?page=modul_noidia_php
*
* @param $args
* @param $vpc_SecureHash
*
* @return bool
*/
public function check_vpc_SecureHash ($args, $vpc_SecureHash) {
// Generate the "vpc_SecureHash" value from $args
$vpc_SecureHash_from_args = $this->create_vpc_SecureHash($args);
if ($vpc_SecureHash_from_args == $vpc_SecureHash ) {
return true;
} else {
return false;
}
}
/**
* Handle the return URL - GET request from OnePay
*/
public function handle_onepay_return_url(){
public function handle_onepay_return_url() {
if (isset($_GET['vpc_SecureHash'])) {
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 ) {
public function process_onepay_response_data( $args, $type ) {
$types_accepted = array(
'return',
'ipn',
@@ -254,22 +199,22 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
);
// Do nothing if the type is wrong
if ( ! in_array($type, $types_accepted) ) {
if ( ! in_array( $type, $types_accepted ) ) {
return;
}
$is_secure = false;
$is_querydr_exists = false;
if ('return' == $type OR 'ipn' == $type ) {
if ( 'return' == $type OR 'ipn' == $type ) {
$vpc_SecureHash = $args['vpc_SecureHash'];
// Remove the parameter "vpc_SecureHash" for validating SecureHash
unset($args['vpc_SecureHash']);
unset( $args['vpc_SecureHash'] );
$is_secure = $this->check_vpc_SecureHash($args, $vpc_SecureHash);
$is_secure = $this->check_vpc_SecureHash( $args, $vpc_SecureHash );
} elseif ('querydr' == $type ) {
} elseif ( 'querydr' == $type ) {
$is_querydr_exists = ( 'Y' == $args['vpc_DRExists'] );
}
@@ -284,32 +229,33 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
$vpc_TxnResponseCode = $args['vpc_TxnResponseCode'];
// Get the order_id part only
$order_id = substr($vpc_MerchTxnRef,0,strrpos($vpc_MerchTxnRef,'_'));
$order_id = substr( $vpc_MerchTxnRef, 0, strrpos( $vpc_MerchTxnRef, '_' ) );
$order = wc_get_order($order_id);
$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'),
__( '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),
$this->OnePay_getResponseDescription( $vpc_TxnResponseCode ),
$vpc_MerchTxnRef,
$type
);
$order->add_order_note($order_note);
$order->add_order_note( $order_note );
// If the payment is successful, update the order
if ("0" == $vpc_TxnResponseCode )
if ( "0" == $vpc_TxnResponseCode ) {
$order->payment_complete();
}
switch ( $type ) {
case 'return':
wp_redirect($this->get_return_url( $order ));
wp_redirect( $this->get_return_url( $order ) );
break;
case 'ipn':
exit( 'responsecode=1&desc=confirm-success');
exit( 'responsecode=1&desc=confirm-success' );
break;
case 'querydr':
@@ -318,12 +264,34 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
}
} else {
if ( 'ipn' == $type )
exit('responsecode=0&desc=confirm-success');
if ( 'ipn' == $type ) {
exit( 'responsecode=0&desc=confirm-success' );
}
}
}
/**
* Whether or not the arguments and a provided $vpc_SecureHash are the same
*
* @see https://mtf.onepay.vn/developer/?page=modul_noidia_php
*
* @param $args
* @param $vpc_SecureHash
*
* @return bool
*/
public function check_vpc_SecureHash( $args, $vpc_SecureHash ) {
// Generate the "vpc_SecureHash" value from $args
$vpc_SecureHash_from_args = $this->create_vpc_SecureHash( $args );
if ( $vpc_SecureHash_from_args == $vpc_SecureHash ) {
return true;
} else {
return false;
}
}
/**
* Get the response description based on the response code
* This is code is from OnePay
@@ -332,9 +300,9 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
*
* @return string
*/
public function OnePay_getResponseDescription($responseCode) {
public function OnePay_getResponseDescription( $responseCode ) {
switch ($responseCode) {
switch ( $responseCode ) {
case "0" :
$result = "Giao dịch thành công - Approved";
break;
@@ -383,7 +351,54 @@ class WooViet_OnePay_Domestic extends WC_Payment_Gateway {
default :
$result = "Giao dịch thất bại - Failured";
}
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' );
}
}
+1 -1
View File
@@ -85,7 +85,7 @@ return array(
'title' => __( 'Instant Payment Notification (IPN)', 'woo-viet' ),
'type' => 'title',
'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>' ),
),