Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fce772a9e3 |
@@ -1,9 +0,0 @@
|
|||||||
# Directories
|
|
||||||
/.wordpress-org
|
|
||||||
/.git
|
|
||||||
/.github
|
|
||||||
/node_modules
|
|
||||||
|
|
||||||
# Files
|
|
||||||
.distignore
|
|
||||||
.gitignore
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
# Directories
|
|
||||||
/.wordpress-org export-ignore
|
|
||||||
/.github export-ignore
|
|
||||||
|
|
||||||
# Files
|
|
||||||
/.gitattributes export-ignore
|
|
||||||
/.gitignore export-ignore
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
# This workflow automatically updates the plugin on WordPress.org
|
|
||||||
# when a tag is pushed to this repo.
|
|
||||||
name: Deploy to WordPress.org
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- "*"
|
|
||||||
jobs:
|
|
||||||
tag:
|
|
||||||
name: New tag
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@master
|
|
||||||
# - name: Build # Remove or modify this step as needed
|
|
||||||
# run: |
|
|
||||||
# npm install
|
|
||||||
# npm run build
|
|
||||||
- name: WordPress Plugin Deploy
|
|
||||||
uses: 10up/action-wordpress-plugin-deploy@stable
|
|
||||||
env:
|
|
||||||
SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }}
|
|
||||||
SVN_USERNAME: ${{ secrets.SVN_USERNAME }}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
name: Plugin asset/readme update
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
jobs:
|
|
||||||
trunk:
|
|
||||||
name: Push to trunk
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@master
|
|
||||||
- name: WordPress.org plugin asset/readme update
|
|
||||||
uses: 10up/action-wordpress-plugin-asset-update@stable
|
|
||||||
env:
|
|
||||||
SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }}
|
|
||||||
SVN_USERNAME: ${{ secrets.SVN_USERNAME }}
|
|
||||||
@@ -6,7 +6,3 @@ Thumbs.db
|
|||||||
|
|
||||||
# Temporary folders
|
# Temporary folders
|
||||||
/_temp
|
/_temp
|
||||||
|
|
||||||
# PHPStorm
|
|
||||||
|
|
||||||
/.idea
|
|
||||||
|
Before Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 58 KiB |
@@ -1,60 +0,0 @@
|
|||||||
.woocommerce-billing-fields__field-wrapper,
|
|
||||||
.woocommerce-shipping-fields__field-wrapper {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
#billing_first_name_field,
|
|
||||||
#shipping_first_name_field {
|
|
||||||
order: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#billing_last_name_field,
|
|
||||||
#shipping_last_name_field {
|
|
||||||
order: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
#billing_company_field,
|
|
||||||
#shipping_company_field {
|
|
||||||
order: 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
#billing_country_field,
|
|
||||||
#shipping_country_field {
|
|
||||||
order: 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
#billing_state_field,
|
|
||||||
#shipping_state_field {
|
|
||||||
order: 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
#billing_city_field,
|
|
||||||
#shipping_city_field {
|
|
||||||
order: 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
#billing_address_1_field,
|
|
||||||
#shipping_address_1_field {
|
|
||||||
order: 7;
|
|
||||||
}
|
|
||||||
|
|
||||||
#billing_address_2_field,
|
|
||||||
#shipping_address_2_field {
|
|
||||||
order: 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
#billing_postcode_field,
|
|
||||||
#shipping_postcode_field {
|
|
||||||
order: 9;
|
|
||||||
}
|
|
||||||
|
|
||||||
#billing_phone_field,
|
|
||||||
#shipping_phone_field {
|
|
||||||
order: 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
#billing_email_field,
|
|
||||||
#shipping_email_field {
|
|
||||||
order: 11;
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
(function($) {
|
|
||||||
$('#billing_country_field').on('change', function() {
|
|
||||||
|
|
||||||
// Get country code
|
|
||||||
var country_code = $(this).find('#billing_country').val();
|
|
||||||
|
|
||||||
// Match country code with Vietnam
|
|
||||||
if(country_code == 'VN') {
|
|
||||||
$('.woocommerce-billing-fields__field-wrapper').addClass('active');
|
|
||||||
} else {
|
|
||||||
$('.woocommerce-billing-fields__field-wrapper').removeClass('active');
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})(jQuery)
|
|
||||||
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 14 KiB |
@@ -36,7 +36,7 @@ class WooViet_Admin_Page {
|
|||||||
*/
|
*/
|
||||||
public function save_settings() {
|
public function save_settings() {
|
||||||
if ( wp_verify_nonce( $_REQUEST['wooviet_nonce'], 'wooviet_save_settings' ) ) {
|
if ( wp_verify_nonce( $_REQUEST['wooviet_nonce'], 'wooviet_save_settings' ) ) {
|
||||||
update_option( 'woo-viet', $this->sanitize_settings( $_REQUEST['settings'] ) );
|
update_option( 'woo-viet', $_REQUEST['settings'] );
|
||||||
|
|
||||||
$this->message =
|
$this->message =
|
||||||
'<div class="updated notice"><p><strong>' .
|
'<div class="updated notice"><p><strong>' .
|
||||||
@@ -88,64 +88,6 @@ class WooViet_Admin_Page {
|
|||||||
value="<?php echo wp_create_nonce( 'wooviet_save_settings' ) ?>">
|
value="<?php echo wp_create_nonce( 'wooviet_save_settings' ) ?>">
|
||||||
<table class="form-table">
|
<table class="form-table">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
|
||||||
<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"
|
|
||||||
<?php if ( 'yes' == $settings['add_onepay_domestic']['enabled'] )
|
|
||||||
echo 'checked="checked"' ?>>
|
|
||||||
<label for="add_onepay_domestic"><?php _e( 'Enabled', 'woo-viet' ) ?></label>
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
<label for="">
|
|
||||||
<?php
|
|
||||||
echo sprintf( __( 'Your store currency is <code>%s</code>. ', 'woo-viet' ), get_woocommerce_currency() );
|
|
||||||
// Handle whether or not the store current is VND
|
|
||||||
if ( 'VND' == get_woocommerce_currency() ) {
|
|
||||||
_e( 'OnePay can work on your site.', 'woo-viet' );
|
|
||||||
echo '<br/>';
|
|
||||||
if ( 'yes' == $settings['add_onepay_domestic']['enabled'] ) {
|
|
||||||
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§ion=wooviet_onepay_domestic' ) );
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_e( '<span style="color: red" ">This gateway is not active on your site. Because OnePay supports VND only.</span>', 'woo-viet' );
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
</label>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row"><?php _e( 'Add the OnePay International Gateway', 'woo-viet' ) ?></th>
|
|
||||||
<td>
|
|
||||||
<input name="settings[add_onepay_international][enabled]" type="hidden" value="no">
|
|
||||||
<input name="settings[add_onepay_international][enabled]" type="checkbox"
|
|
||||||
id="add_onepay_international" value="yes"
|
|
||||||
<?php if ( 'yes' == $settings['add_onepay_international']['enabled'] )
|
|
||||||
echo 'checked="checked"' ?>>
|
|
||||||
<label for="add_onepay_international"><?php _e( 'Enabled', 'woo-viet' ) ?></label>
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
<label for="">
|
|
||||||
<?php
|
|
||||||
echo sprintf( __( 'Your store currency is <code>%s</code>. ', 'woo-viet' ), get_woocommerce_currency() );
|
|
||||||
// Handle whether or not the store current is VND
|
|
||||||
if ( 'VND' == get_woocommerce_currency() ) {
|
|
||||||
_e( 'OnePay can work on your site.', 'woo-viet' );
|
|
||||||
echo '<br/>';
|
|
||||||
if ( 'yes' == $settings['add_onepay_international']['enabled'] ) {
|
|
||||||
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§ion=wooviet_onepay_international' ) );
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_e( '<span style="color: red" ">This gateway is not active on your site. Because OnePay supports VND only.</span>', 'woo-viet' );
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
</label>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row"><?php _e( 'Add provinces for Vietnam', 'woo-viet' ) ?></th>
|
<th scope="row"><?php _e( 'Add provinces for Vietnam', 'woo-viet' ) ?></th>
|
||||||
<td>
|
<td>
|
||||||
@@ -157,14 +99,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>
|
||||||
@@ -262,50 +204,13 @@ class WooViet_Admin_Page {
|
|||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
<input name="settings[vnd_paypal_standard][rate]" type="number" step="1" min="100"
|
<input name="settings[vnd_paypal_standard][rate]" type="number" step="1" min="100"
|
||||||
id="vnd_paypal_standard_rate" style="width: 70px; padding-right: 0;"
|
id="vnd_paypal_standard_rate" style="width: 70px;"
|
||||||
value="<?php echo $settings['vnd_paypal_standard']['rate'] ?>"
|
value="<?php echo $settings['vnd_paypal_standard']['rate'] ?>"
|
||||||
<label for="vnd_paypal_standard_rate"><?php _e( 'Insert the exchange rate of this currency to VND', 'woo-viet' ) ?></label>
|
<label for="vnd_paypal_standard_rate"><?php _e( 'Insert the exchange rate of this currency to VND', 'woo-viet' ) ?></label>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
|
||||||
<th scope="row"><?php printf( __( 'Support VND for <a href="%s">the PayPal Express Checkout gateway</a>', 'woo-viet' ), 'https://docs.woocommerce.com/document/paypal-express-checkout/' ) ?></th>
|
|
||||||
<td>
|
|
||||||
<input name="settings[vnd_paypal_express_checkout][enabled]" type="hidden" value="no">
|
|
||||||
<input name="settings[vnd_paypal_express_checkout][enabled]" type="checkbox"
|
|
||||||
id="vnd_paypal_express_checkout" value="yes"
|
|
||||||
<?php if ( 'yes' == $settings['vnd_paypal_express_checkout']['enabled'] )
|
|
||||||
echo 'checked="checked"' ?>>
|
|
||||||
<label for="vnd_paypal_express_checkout"><?php _e( 'Enabled', 'woo-viet' ) ?></label>
|
|
||||||
|
|
||||||
<fieldset><br/>
|
|
||||||
<select name="settings[vnd_paypal_express_checkout][currency]"
|
|
||||||
id="vnd_paypal_express_checkout_currency">
|
|
||||||
<?php
|
|
||||||
foreach ( $paypal_supported_currencies as $currency ) {
|
|
||||||
|
|
||||||
if ( strtoupper( $currency ) == $settings['vnd_paypal_express_checkout']['currency'] ) {
|
|
||||||
printf( '<option selected="selected" value="%1$s">%1$s</option>', $currency );
|
|
||||||
} else {
|
|
||||||
printf( '<option value="%1$s">%1$s</option>', $currency );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
</select>
|
|
||||||
<label for="vnd_paypal_express_checkout_currency"><?php _e( 'Select a PayPal supported currency (like USD, EUR, etc), which is used to convert VND prices', 'woo-viet' ) ?></label>
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
|
|
||||||
<input name="settings[vnd_paypal_express_checkout][rate]" type="number" step="1"
|
|
||||||
min="100"
|
|
||||||
id="vnd_paypal_express_checkout_rate" style="width: 70px; padding-right: 0;"
|
|
||||||
value="<?php echo $settings['vnd_paypal_express_checkout']['rate'] ?>"
|
|
||||||
<label for="vnd_paypal_express_checkout_rate"><?php _e( 'Insert the exchange rate of this currency to VND', 'woo-viet' ) ?></label>
|
|
||||||
</fieldset>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@@ -314,38 +219,8 @@ class WooViet_Admin_Page {
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
<div id="wooviet-admin-footer"
|
|
||||||
style="border: 1px dotted; padding: 5px;">
|
|
||||||
<?php
|
|
||||||
printf( __( 'Wanna get support or give feedback? Please <a href="%1$s">rate Woo Viet</a> or post questions <a href="%2$s">in the forum</a>!', 'woo-viet' ),
|
|
||||||
'https://wordpress.org/support/plugin/woo-viet/reviews/?filter=5#new-post',
|
|
||||||
'https://wordpress.org/support/plugin/woo-viet/'
|
|
||||||
)
|
|
||||||
?>
|
|
||||||
</div>
|
|
||||||
</div><!-- #wrap ->
|
</div><!-- #wrap ->
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
}
|
||||||
* Sanitize admin settings.
|
|
||||||
*
|
|
||||||
* @author htdat
|
|
||||||
* @since 1.5.3
|
|
||||||
*
|
|
||||||
* @param array $settings User input settings.
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
private function sanitize_settings( array $settings ): array {
|
|
||||||
$sanitized_settings = array();
|
|
||||||
|
|
||||||
foreach ( $settings as $feature => $feature_options ) {
|
|
||||||
foreach ( $feature_options as $option => $value ) {
|
|
||||||
$sanitized_settings[ $feature ][ $option ] = esc_html( sanitize_text_field( $value ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $sanitized_settings;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
if ( ! defined( 'ABSPATH' ) ) {
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Manage the notices of the plugin
|
|
||||||
*
|
|
||||||
* @author htdat
|
|
||||||
* @since 1.3.1
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class WooViet_Notices {
|
|
||||||
|
|
||||||
var $settings = '';
|
|
||||||
|
|
||||||
static $default_settings = array(
|
|
||||||
'installation_time' => 0,
|
|
||||||
'displaying_survey_after_4_weeks' => 'not_yet',
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* WooViet_Notices constructor.
|
|
||||||
*/
|
|
||||||
public function __construct() {
|
|
||||||
$this->settings = self::get_settings();
|
|
||||||
$this->set_installation_time();
|
|
||||||
$this->manage_displaying_survey_after_4_weeks();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public function get_settings() {
|
|
||||||
$settings = get_option( 'woo-viet_notices', self::$default_settings );
|
|
||||||
$settings = wp_parse_args( $settings, self::$default_settings );
|
|
||||||
|
|
||||||
return $settings;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the installation time
|
|
||||||
*/
|
|
||||||
public function set_installation_time() {
|
|
||||||
if ( ! $this->settings['installation_time'] ) {
|
|
||||||
$this->settings['installation_time'] = time();
|
|
||||||
$this->save_settings();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Save settings for this classe
|
|
||||||
*/
|
|
||||||
public function save_settings() {
|
|
||||||
update_option( 'woo-viet_notices', $this->settings );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Manage the notice 'displaying_survey_after_4_weeks'
|
|
||||||
*/
|
|
||||||
public function manage_displaying_survey_after_4_weeks() {
|
|
||||||
$display_time = $this->settings['installation_time'] + ( 4 * 7 * 24 * 60 * 60 ); // 4 weeks; 7 days; 24 hours; 60 mins; 60 secs
|
|
||||||
|
|
||||||
// Manage the dismiss action
|
|
||||||
if ( isset( $_GET['wooviet_dismiss'] )
|
|
||||||
&&
|
|
||||||
( 'displaying_survey_after_4_weeks' == $_GET['wooviet_dismiss'] )
|
|
||||||
) {
|
|
||||||
$this->settings['displaying_survey_after_4_weeks'] = 'done';
|
|
||||||
$this->save_settings();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Display the message
|
|
||||||
if ( $display_time < time() &&
|
|
||||||
'not_yet' == $this->settings['displaying_survey_after_4_weeks']
|
|
||||||
) {
|
|
||||||
|
|
||||||
add_action( 'admin_notices', array( $this, 'add_displaying_survey_after_4_weeks' ) );
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The HTML code to display in the admin notice
|
|
||||||
*/
|
|
||||||
public function add_displaying_survey_after_4_weeks() {
|
|
||||||
|
|
||||||
$line1 = __( 'Please help us to improve Woo Viet.', 'woo-viet' );
|
|
||||||
$line2 = __( 'Rate us!', 'woo-viet' );
|
|
||||||
$line3 = __( 'Or run a short survey:', 'woo-viet' );
|
|
||||||
$line4 = '<a href="https://goo.gl/forms/QIMkNrRIxgERBBcm2" target="_blank">tiếng Việt</a> - <a href="https://goo.gl/forms/N4GxvBtaIg6iryx43" target="_blank">English</a>';
|
|
||||||
$line5 = __( 'Dismiss this notice', 'woo-viet' );
|
|
||||||
$link = admin_url( 'admin.php?page=woo-viet&wooviet_dismiss=displaying_survey_after_4_weeks' );
|
|
||||||
|
|
||||||
printf( '
|
|
||||||
<div class="notice notice-success">
|
|
||||||
<p><strong>%1$s</strong></p>
|
|
||||||
<p><strong>
|
|
||||||
<a href="https://wordpress.org/support/plugin/woo-viet/reviews/?filter=5#new-post" target="_blank">%2$s</a> %3$s %4$s
|
|
||||||
</strong></p>
|
|
||||||
<p>
|
|
||||||
<a href="%6$s">%5$s</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
', $line1, $line2, $line3, $line4, $line5, $link );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,104 +0,0 @@
|
|||||||
<?php
|
|
||||||
if ( ! defined( 'ABSPATH' ) ) {
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The class to handle the domestic OnePay gateway https://mtf.onepay.vn/developer/?page=modul_noidia
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @author htdat
|
|
||||||
* @since 1.5.0
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once('onepay/abstract-payment.php');
|
|
||||||
class WooViet_OnePay_Domestic extends WooViet_OnePay_Abstract {
|
|
||||||
|
|
||||||
public function configure_payment() {
|
|
||||||
$this->method_title = __( 'OnePay Domestic Gateway (by Woo Viet)', 'woo-viet' );
|
|
||||||
$this->method_description = __( 'OnePay supports all major bank ATMs in Vietnam.', 'woo-viet' );
|
|
||||||
}
|
|
||||||
|
|
||||||
public function get_onepay_payment_link( $testmode ) {
|
|
||||||
return $testmode ? 'https://mtf.onepay.vn/onecomm-pay/vpc.op' : 'https://onepay.vn/onecomm-pay/vpc.op';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function get_onepay_querydr_link( $testmode ) {
|
|
||||||
return $testmode ? 'https://mtf.onepay.vn/onecomm-pay/Vpcdps.op' : 'https://onepay.vn/onecomm-pay/Vpcdps.op';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function OnePay_getResponseDescription( $responseCode ) {
|
|
||||||
|
|
||||||
switch ( $responseCode ) {
|
|
||||||
case "0" :
|
|
||||||
$result = "Giao dịch thành công - Approved";
|
|
||||||
break;
|
|
||||||
case "1" :
|
|
||||||
$result = "Ngân hàng từ chối giao dịch - Bank Declined";
|
|
||||||
break;
|
|
||||||
case "3" :
|
|
||||||
$result = "Mã đơn vị không tồn tại - Merchant not exist";
|
|
||||||
break;
|
|
||||||
case "4" :
|
|
||||||
$result = "Không đúng access code - Invalid access code";
|
|
||||||
break;
|
|
||||||
case "5" :
|
|
||||||
$result = "Số tiền không hợp lệ - Invalid amount";
|
|
||||||
break;
|
|
||||||
case "6" :
|
|
||||||
$result = "Mã tiền tệ không tồn tại - Invalid currency code";
|
|
||||||
break;
|
|
||||||
case "7" :
|
|
||||||
$result = "Lỗi không xác định - Unspecified Failure ";
|
|
||||||
break;
|
|
||||||
case "8" :
|
|
||||||
$result = "Số thẻ không đúng - Invalid card Number";
|
|
||||||
break;
|
|
||||||
case "9" :
|
|
||||||
$result = "Tên chủ thẻ không đúng - Invalid card name";
|
|
||||||
break;
|
|
||||||
case "10" :
|
|
||||||
$result = "Thẻ hết hạn/Thẻ bị khóa - Expired Card";
|
|
||||||
break;
|
|
||||||
case "11" :
|
|
||||||
$result = "Thẻ chưa đăng ký sử dụng dịch vụ - Card Not Registed Service(internet banking)";
|
|
||||||
break;
|
|
||||||
case "12" :
|
|
||||||
$result = "Ngày phát hành/Hết hạn không đúng - Invalid card date";
|
|
||||||
break;
|
|
||||||
case "13" :
|
|
||||||
$result = "Vượt quá hạn mức thanh toán - Exceeds the maximum limit";
|
|
||||||
break;
|
|
||||||
case "21" :
|
|
||||||
$result = "Số tiền không đủ để thanh toán - Insufficient fund";
|
|
||||||
break;
|
|
||||||
case "22" :
|
|
||||||
$result = "Thông tin tài khoản không đúng - Invalid account ìnfo";
|
|
||||||
break;
|
|
||||||
case "23" :
|
|
||||||
$result = "Tài khoản bị khóa - Account locked";
|
|
||||||
break;
|
|
||||||
case "24" :
|
|
||||||
$result = "Thông tin thẻ không đúng - Incorrect card number";
|
|
||||||
break;
|
|
||||||
case "25" :
|
|
||||||
$result = "OTP không đúng - Incorrect OTP";
|
|
||||||
break;
|
|
||||||
case "99" :
|
|
||||||
$result = "Người sủ dụng hủy giao dịch - User cancel";
|
|
||||||
break;
|
|
||||||
default :
|
|
||||||
$result = "Giao dịch thất bại - Failure";
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialise Gateway Settings Form Fields.
|
|
||||||
*/
|
|
||||||
public function init_form_fields() {
|
|
||||||
$this->form_fields = include( 'onepay/domestic-settings.php' );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
<?php
|
|
||||||
if ( ! defined( 'ABSPATH' ) ) {
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The class to handle the domestic OnePay gateway https://mtf.onepay.vn/developer/?page=modul_quocte
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @author htdat
|
|
||||||
* @since 1.5.0
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once('onepay/abstract-payment.php');
|
|
||||||
class WooViet_OnePay_International extends WooViet_OnePay_Abstract {
|
|
||||||
|
|
||||||
public function configure_payment() {
|
|
||||||
$this->method_title = __( 'OnePay International Gateway (by Woo Viet)', 'woo-viet' );
|
|
||||||
$this->method_description = __( 'OnePay supports all major international cards Visa, Master, JCB, Amex, etc.', 'woo-viet' );
|
|
||||||
}
|
|
||||||
|
|
||||||
public function get_onepay_payment_link( $testmode ) {
|
|
||||||
return $testmode ? 'https://mtf.onepay.vn/vpcpay/vpcpay.op' : 'https://onepay.vn/vpcpay/vpcpay.op';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function get_onepay_querydr_link( $testmode ) {
|
|
||||||
return $testmode ? 'https://mtf.onepay.vn/vpcpay/Vpcdps.op' : 'https://onepay.vn/vpcpay/Vpcdps.op';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function OnePay_getResponseDescription( $responseCode ) {
|
|
||||||
|
|
||||||
switch ( $responseCode ) {
|
|
||||||
case "0" :
|
|
||||||
$result = "Giao dịch thành công - Approved";
|
|
||||||
break;
|
|
||||||
case "1" :
|
|
||||||
case "2" :
|
|
||||||
$result = "Ngân hàng từ chối giao dịch - Bank Declined";
|
|
||||||
break;
|
|
||||||
case "3" :
|
|
||||||
$result = "OnePay không nhận được kết quả giao dịch từ ngân hàng - OnePAY did not received payment result
|
|
||||||
from Issuer bank";
|
|
||||||
break;
|
|
||||||
case "4" :
|
|
||||||
$result = "Thẻ hết hạn hoặc sai thông tin hết hạn thẻ - Card expired or incorrect expired date";
|
|
||||||
break;
|
|
||||||
case "5" :
|
|
||||||
$result = "Số tiền không đủ để thanh toán - Insufficient fund";
|
|
||||||
break;
|
|
||||||
case "6" :
|
|
||||||
case "7" :
|
|
||||||
$result = "Quá trình xử lý giao dịch phát sinh lỗi - An error was encountered while processing your transaction";
|
|
||||||
break;
|
|
||||||
case "8" :
|
|
||||||
$result = "Thẻ không hỗ trợ giao
|
|
||||||
dịch thanh toán trên Internet - Ecommerce transaction is not supported for this card";
|
|
||||||
break;
|
|
||||||
case "9" :
|
|
||||||
$result = "Ngân hàng từ chối giao dịch - Bank Declined";
|
|
||||||
break;
|
|
||||||
case "99" :
|
|
||||||
$result = "Người sủ dụng hủy giao dịch - User cancel";
|
|
||||||
break;
|
|
||||||
case "B" :
|
|
||||||
case "F" :
|
|
||||||
$result = "Không xác thực được 3D-Secure - 3D Secure Authentication Failed";
|
|
||||||
break;
|
|
||||||
case "E" :
|
|
||||||
$result = "Nhập sai CSC (Card Security Card) hoặc ngân hàng từ chối cấp phép cho giao dịch - You have entered wrong CSC or Issuer Bank declided transaction";
|
|
||||||
break;
|
|
||||||
case "Z" :
|
|
||||||
$result = "Transaction restricted due to OFD’s policies - vi phạm quy định của hệ thống";
|
|
||||||
break;
|
|
||||||
default :
|
|
||||||
$result = "Giao dịch thất bại - Failure";
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialise Gateway Settings Form Fields.
|
|
||||||
*/
|
|
||||||
public function init_form_fields() {
|
|
||||||
$this->form_fields = include( 'onepay/international-settings.php' );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -6,6 +6,8 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|||||||
/**
|
/**
|
||||||
* The class to handle Vietnam Provinces
|
* The class to handle Vietnam Provinces
|
||||||
*
|
*
|
||||||
|
* @todo Arrange the orders of fields displaying in the checkout page: Country - Province - District - Address
|
||||||
|
*
|
||||||
* @author htdat
|
* @author htdat
|
||||||
* @since 1.0
|
* @since 1.0
|
||||||
*
|
*
|
||||||
@@ -19,9 +21,6 @@ class WooViet_Provinces {
|
|||||||
add_filter( 'woocommerce_states', array( $this, 'add_provinces' ) );
|
add_filter( 'woocommerce_states', array( $this, 'add_provinces' ) );
|
||||||
add_filter( 'woocommerce_get_country_locale', array( $this, 'edit_vn_locale' ) );
|
add_filter( 'woocommerce_get_country_locale', array( $this, 'edit_vn_locale' ) );
|
||||||
add_filter( 'woocommerce_localisation_address_formats', array( $this, 'edit_vn_address_formats' ) );
|
add_filter( 'woocommerce_localisation_address_formats', array( $this, 'edit_vn_address_formats' ) );
|
||||||
|
|
||||||
// Enqueue province scripts
|
|
||||||
add_action( 'wp_enqueue_scripts', array( $this, 'load_provinces_scripts' ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -137,19 +136,4 @@ class WooViet_Provinces {
|
|||||||
return $states;
|
return $states;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/**
|
|
||||||
* Enqueue provinces scripts
|
|
||||||
*
|
|
||||||
* Arrange the address field orders to the Vietnam standard in the checkout page: Country - Province - District - Address
|
|
||||||
* @author Longkt
|
|
||||||
* @since 1.4
|
|
||||||
*/
|
|
||||||
public function load_provinces_scripts() {
|
|
||||||
// Enqueue province style
|
|
||||||
wp_enqueue_style( 'woo-viet-provinces-style', WOO_VIET_URL . 'assets/provinces.css' );
|
|
||||||
|
|
||||||
// Enqueue province script
|
|
||||||
wp_enqueue_script( 'woo-viet-provinces-script', WOO_VIET_URL . 'assets/provinces.js', array( 'jquery' ), '1.0', true );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,205 +0,0 @@
|
|||||||
<?php
|
|
||||||
if ( ! defined( 'ABSPATH' ) ) {
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The class to add the support for VND when using the WooCommerce PayPal Express Checkout gateway
|
|
||||||
*
|
|
||||||
* @see https://docs.woocommerce.com/document/paypal-express-checkout/
|
|
||||||
*
|
|
||||||
* @author Longkt
|
|
||||||
* @since 1.4
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class WooViet_VND_PayPal_Express_Checkout {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var int
|
|
||||||
*/
|
|
||||||
protected $ppec_exchange_rate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $ppec_currency;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $ppec_description;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* WooViet_VND_PayPal_Express_Checkout constructor
|
|
||||||
*
|
|
||||||
* @param int $ppec_exchange_rate
|
|
||||||
* @param string $ppec_currency
|
|
||||||
*/
|
|
||||||
public function __construct( $ppec_exchange_rate = 22770, $ppec_currency = 'USD' ) {
|
|
||||||
|
|
||||||
$this->ppec_exchange_rate = (int) $ppec_exchange_rate;
|
|
||||||
$this->ppec_currency = $ppec_currency;
|
|
||||||
|
|
||||||
$this->ppec_description = sprintf( __( 'The prices will be converted to %1$s in the PayPal Express Checkout pages with the exchange rate %2$s.', 'woo-viet' ),
|
|
||||||
"<span style='color:red'> $this->ppec_currency</span>",
|
|
||||||
"<span style='color:red'> $this->ppec_currency / VND = $this->ppec_exchange_rate</span>"
|
|
||||||
);
|
|
||||||
|
|
||||||
// Match response currency of PayPal with local order
|
|
||||||
add_action( 'woocommerce_paypal_express_checkout_valid_ipn_request', array(
|
|
||||||
$this,
|
|
||||||
'ppec_match_currency_order'
|
|
||||||
), 20 );
|
|
||||||
|
|
||||||
// Add exchange rate before send request to PayPal
|
|
||||||
add_filter( 'woocommerce_paypal_express_checkout_request_body', array( $this, 'ppec_convert_prices' ) );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ensure that PayPal Checkout SDK will load with the correct currency
|
|
||||||
* @see https://github.com/woocommerce/woocommerce-gateway-paypal-express-checkout/blob/f1f16de178cbf1d529deeaf574a52aca82a6e093/includes/class-wc-gateway-ppec-cart-handler.php#L553-L556
|
|
||||||
*/
|
|
||||||
add_filter ('woocommerce_paypal_express_checkout_sdk_script_args', function( $script_args ) {
|
|
||||||
$script_args[ 'currency' ] = $this->ppec_currency;
|
|
||||||
return $script_args;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Load the method to add the exchange rate info for this gateway
|
|
||||||
$this->ppec_exchange_rate_info();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Match response currency from PayPal with the order
|
|
||||||
*
|
|
||||||
* @param $posted_data
|
|
||||||
*/
|
|
||||||
public function ppec_match_currency_order( $posted_data ) {
|
|
||||||
|
|
||||||
if ( $posted_data['mc_currency'] ) {
|
|
||||||
$posted_data['mc_currency'] = $order->get_currency();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $params
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function ppec_convert_prices( $params ) {
|
|
||||||
|
|
||||||
if ( isset( $params['PAYMENTREQUEST_0_CURRENCYCODE'] ) ) {
|
|
||||||
|
|
||||||
$params['PAYMENTREQUEST_0_CURRENCYCODE'] = $this->ppec_currency;
|
|
||||||
|
|
||||||
if ( isset( $params['PAYMENTREQUEST_0_AMT'] ) ) {
|
|
||||||
$params['PAYMENTREQUEST_0_AMT'] = round( $params['PAYMENTREQUEST_0_AMT'] / $this->ppec_exchange_rate, 2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( isset( $params['PAYMENTREQUEST_0_ITEMAMT'] ) ) {
|
|
||||||
$params['PAYMENTREQUEST_0_ITEMAMT'] = round( $params['PAYMENTREQUEST_0_ITEMAMT'] / $this->ppec_exchange_rate, 2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( isset( $params['PAYMENTREQUEST_0_SHIPPINGAMT'] ) ) {
|
|
||||||
$params['PAYMENTREQUEST_0_SHIPPINGAMT'] = round( $params['PAYMENTREQUEST_0_SHIPPINGAMT'] / $this->ppec_exchange_rate, 2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( isset( $params['PAYMENTREQUEST_0_TAXAMT'] ) ) {
|
|
||||||
$params['PAYMENTREQUEST_0_TAXAMT'] = round( $params['PAYMENTREQUEST_0_TAXAMT'] / $this->ppec_exchange_rate, 2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( isset( $params['PAYMENTREQUEST_0_SHIPDISCAMT'] ) ) {
|
|
||||||
$params['PAYMENTREQUEST_0_SHIPDISCAMT'] = round( $params['PAYMENTREQUEST_0_SHIPDISCAMT'] / $this->ppec_exchange_rate, 2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
$count = 0;
|
|
||||||
|
|
||||||
while ( isset( $params[ 'L_PAYMENTREQUEST_0_AMT' . $count ] ) ) {
|
|
||||||
$params[ 'L_PAYMENTREQUEST_0_AMT' . $count ] = round( $params[ 'L_PAYMENTREQUEST_0_AMT' . $count ] / $this->ppec_exchange_rate, 2 );
|
|
||||||
$count ++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $params;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the exchange rate info in the suitable locations before proceeding in the PayPal pages
|
|
||||||
*/
|
|
||||||
public function ppec_exchange_rate_info() {
|
|
||||||
|
|
||||||
// Check if "Checkout on cart page" is enabled.
|
|
||||||
if ( 'yes' === wc_gateway_ppec()->settings->cart_checkout_enabled ) {
|
|
||||||
add_action( 'woocommerce_proceed_to_checkout', array( $this, 'add_ppec_button_exchange_rate_info' ), 30 );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if "Checkout on Single Product" is enabled.
|
|
||||||
if ( 'yes' === wc_gateway_ppec()->settings->checkout_on_single_product_enabled ) {
|
|
||||||
add_action( 'woocommerce_after_add_to_cart_form', array(
|
|
||||||
$this,
|
|
||||||
'add_ppec_button_exchange_rate_info'
|
|
||||||
), 30 );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if "Enable PayPal Credit" is enabled.
|
|
||||||
if ( 'yes' === wc_gateway_ppec()->settings->credit_enabled ) {
|
|
||||||
add_filter( 'woocommerce_paypal_express_checkout_settings', array(
|
|
||||||
$this,
|
|
||||||
'add_paypal_credit_exchange_rate_info'
|
|
||||||
), 11 );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the exchange rate info for PPEC in Checkout page
|
|
||||||
add_filter( 'option_woocommerce_ppec_paypal_settings', array(
|
|
||||||
$this,
|
|
||||||
'add_ppec_checkout_exchange_rate_info'
|
|
||||||
), 11 );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Display the exchange rate info of PPEC in Cart and Single Product page
|
|
||||||
*/
|
|
||||||
public function add_ppec_button_exchange_rate_info() {
|
|
||||||
|
|
||||||
echo '<p class="ppec-exchange-rate-info">' . $this->ppec_description . '</p>';
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Display the exchange rate info of PP Credit in Checkout page
|
|
||||||
*
|
|
||||||
* @param $value
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function add_paypal_credit_exchange_rate_info( $value ) {
|
|
||||||
|
|
||||||
if ( ! is_admin() ) {
|
|
||||||
$value['description']['default'] .= '<br />';
|
|
||||||
$value['description']['default'] .= $this->ppec_description;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Display the exchange rate info of PPEC in Checkout page
|
|
||||||
*
|
|
||||||
* @param $value
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function add_ppec_checkout_exchange_rate_info( $value ) {
|
|
||||||
|
|
||||||
if ( ! is_admin() ) {
|
|
||||||
$value['description'] .= '<br />';
|
|
||||||
$value['description'] .= $this->ppec_description;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $value;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -43,12 +43,6 @@ class WooViet_VND_PayPal_Standard {
|
|||||||
|
|
||||||
// Add the exchange rate info for this gateway in the checkout page before proceeding in the PayPal pages
|
// Add the exchange rate info for this gateway in the checkout page before proceeding in the PayPal pages
|
||||||
add_filter( 'option_woocommerce_paypal_settings', array( $this, 'add_exchange_rate_info' ), 11 );
|
add_filter( 'option_woocommerce_paypal_settings', array( $this, 'add_exchange_rate_info' ), 11 );
|
||||||
|
|
||||||
|
|
||||||
// Remove checks on currency and gross (total) values
|
|
||||||
add_action( 'woocommerce_api_wc_gateway_paypal', array( $this, 'remove_currency_and_total_checks' ), 5 );
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -113,31 +107,4 @@ class WooViet_VND_PayPal_Standard {
|
|||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove currency and total (gross) amount check in class WC_Gateway_Paypal_IPN_Handler
|
|
||||||
*
|
|
||||||
* @since 1.4.5
|
|
||||||
* @author htdat
|
|
||||||
*/
|
|
||||||
public function remove_currency_and_total_checks() {
|
|
||||||
|
|
||||||
// Remove these filters https://github.com/woocommerce/woocommerce/blob/3.7.1/includes/gateways/paypal/includes/class-wc-gateway-paypal-ipn-handler.php#L34-L35
|
|
||||||
remove_all_filters( 'woocommerce_api_wc_gateway_paypal', 10 );
|
|
||||||
remove_all_filters( 'valid-paypal-standard-ipn-request', 10 );
|
|
||||||
|
|
||||||
// Get values for PayPal Standard settings
|
|
||||||
// Ref: https://github.com/woocommerce/woocommerce/blob/3.7.1/includes/gateways/paypal/class-wc-gateway-paypal.php#L58-L61
|
|
||||||
$paypal_options = get_option( 'woocommerce_paypal_settings' );
|
|
||||||
$testmode = 'yes' === $paypal_options['testmode'];
|
|
||||||
$receiver_email = is_null( $paypal_options['receiver_email'] ) ? $paypal_options['email'] : $paypal_options['receiver_email'];
|
|
||||||
|
|
||||||
// Replace it by a child class of WC_Gateway_Paypal_IPN_Handler,
|
|
||||||
// which overrides/removes validate_currency() and validate_amount()
|
|
||||||
require_once dirname( __FILE__ ) . '/paypal-standard/class-woo-viet-wc-gateway-paypal-ipn-handler.php.php';
|
|
||||||
$handler = new Woo_Viet_WC_Gateway_Paypal_IPN_Handler( $testmode, $receiver_email ); //@todo needs to handle the correct variables
|
|
||||||
$handler->check_response();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,450 +0,0 @@
|
|||||||
<?php
|
|
||||||
if ( ! defined( 'ABSPATH' ) ) {
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Abstract class to handle the domestic and international OnePay gateways
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @author htdat
|
|
||||||
* @since 1.5.0
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
abstract class WooViet_OnePay_Abstract extends WC_Payment_Gateway {
|
|
||||||
/** @var bool Whether or not logging is enabled */
|
|
||||||
public static $log_enabled = false;
|
|
||||||
|
|
||||||
/** @var WC_Logger Logger instance */
|
|
||||||
public static $log = false;
|
|
||||||
|
|
||||||
/** @var bool Test mode flag */
|
|
||||||
protected $testmode;
|
|
||||||
|
|
||||||
/** @var string OnePay merchant ID */
|
|
||||||
protected $merchant_id;
|
|
||||||
|
|
||||||
/** @var string OnePay access code */
|
|
||||||
protected $access_code;
|
|
||||||
|
|
||||||
/** @var string OnePay secure secret */
|
|
||||||
protected $secure_secret;
|
|
||||||
|
|
||||||
/** @var string OnePay user */
|
|
||||||
protected $user;
|
|
||||||
|
|
||||||
/** @var string OnePay password */
|
|
||||||
protected $password;
|
|
||||||
|
|
||||||
/** @var bool Debug mode flag */
|
|
||||||
protected $debug;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Configure $method_title and $method_description
|
|
||||||
*/
|
|
||||||
abstract public function configure_payment();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param bool $testmode
|
|
||||||
*/
|
|
||||||
abstract public function get_onepay_payment_link( $testmode );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param bool $testmode
|
|
||||||
*/
|
|
||||||
abstract public function get_onepay_querydr_link( $testmode );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor for the gateway.
|
|
||||||
*/
|
|
||||||
public function __construct() {
|
|
||||||
$this->id = strtolower( get_called_class() );
|
|
||||||
$this->has_fields = false;
|
|
||||||
$this->configure_payment();
|
|
||||||
$this->supports = array(
|
|
||||||
'products',
|
|
||||||
);
|
|
||||||
|
|
||||||
// Load the settings.
|
|
||||||
$this->init_form_fields();
|
|
||||||
$this->init_settings();
|
|
||||||
|
|
||||||
// Define user set variables.
|
|
||||||
$this->title = $this->get_option( 'title' );
|
|
||||||
$this->description = $this->get_option( 'description' )
|
|
||||||
. sprintf( '<br/><div align="center" class="onepay-logo" id="%1$s"><img src="%2$s"></div>',
|
|
||||||
$this->id . '_logo',
|
|
||||||
apply_filters( $this->id . '_logo', WOO_VIET_URL . "assets/$this->id.png" ) );
|
|
||||||
$this->order_button_text = $this->get_option( 'order_button_text' );
|
|
||||||
|
|
||||||
$this->testmode = 'yes' === $this->get_option( 'testmode', 'no' );
|
|
||||||
$this->merchant_id = $this->get_option( 'merchant_id' );
|
|
||||||
$this->access_code = $this->get_option( 'access_code' );
|
|
||||||
$this->secure_secret = $this->get_option( 'secure_secret' );
|
|
||||||
$this->user = $this->get_option( 'user' );
|
|
||||||
$this->password = $this->get_option( 'password' );
|
|
||||||
$this->debug = 'yes' === $this->get_option( 'debug', 'no' );
|
|
||||||
|
|
||||||
self::$log_enabled = $this->debug;
|
|
||||||
|
|
||||||
// Process the 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_api_' . strtolower( get_called_class() ), array( $this, 'handle_onepay_ipn' ) );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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( get_called_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 )
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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 ) {
|
|
||||||
$home_url_without_scheme = str_replace( 'https://', '', get_home_url() );
|
|
||||||
$home_url_without_scheme = str_replace( 'http://', '', $home_url_without_scheme );
|
|
||||||
|
|
||||||
$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->get_id(), date( 'YmdHis' ) ),
|
|
||||||
'vpc_OrderInfo' => substr(
|
|
||||||
sprintf( 'Order #%1$s - %2$s', $order->get_id(), $home_url_without_scheme ),
|
|
||||||
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'],
|
|
||||||
'AgainLink' => mb_strimwidth( wc_get_checkout_url(), 0, 64 ),
|
|
||||||
);
|
|
||||||
|
|
||||||
// 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, '', '&' );
|
|
||||||
|
|
||||||
// Log data
|
|
||||||
$message_log = sprintf( 'get_pay_url - Order ID: %1$s - http_args: %2$s', $order->get_id(), print_r( $args, true ) );
|
|
||||||
self::log( $message_log );
|
|
||||||
|
|
||||||
return $this->get_onepay_payment_link( $this->testmode ) . '?' . $http_args;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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,
|
|
||||||
$this->id . '_handle_querydr', // wooviet_onepay_international_handle_querydr | wooviet_onepay_domestic_handle_querydr
|
|
||||||
array( $vpc_MerchTxnRef )
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create the vpc_SecureHash value.
|
|
||||||
* @see https://mtf.onepay.vn/developer/?page=modul_noidia_php
|
|
||||||
*
|
|
||||||
* @param array $args
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function create_vpc_SecureHash( $args ) {
|
|
||||||
$stringHashData = "";
|
|
||||||
|
|
||||||
// arrange array data a-z before make a hash
|
|
||||||
ksort( $args );
|
|
||||||
|
|
||||||
foreach ( $args as $key => $value ) {
|
|
||||||
|
|
||||||
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, "&" );
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
// Verify hash for 'return' and 'ipn'
|
|
||||||
// And check vpc_DRExists value for 'querydr'
|
|
||||||
switch ( $type ) {
|
|
||||||
case 'return':
|
|
||||||
case 'ipn':
|
|
||||||
$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 );
|
|
||||||
break;
|
|
||||||
case 'querydr':
|
|
||||||
$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 = explode('_', $vpc_MerchTxnRef)[0];
|
|
||||||
|
|
||||||
$order = wc_get_order( $order_id );
|
|
||||||
|
|
||||||
// Add the order note for the reference
|
|
||||||
$order_note = get_called_class() . sprintf(
|
|
||||||
__( ' 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 );
|
|
||||||
|
|
||||||
// Log data
|
|
||||||
$message_log = sprintf( 'process_onepay_response_data - Order ID: %1$s - Order Note: %2$s - http_args: %3$s', $order_id, $order_note, print_r( $args, true ) );
|
|
||||||
self::log( $message_log );
|
|
||||||
|
|
||||||
// Do action for the order based on the response code from OnePay
|
|
||||||
// This is an intentional DRY switch - refer to #DRY_vpc_TxnResponseCode below
|
|
||||||
switch ( $vpc_TxnResponseCode ) {
|
|
||||||
case '0':
|
|
||||||
// If the payment is successful, update the order
|
|
||||||
$order->payment_complete();
|
|
||||||
break;
|
|
||||||
case '99':
|
|
||||||
// If the user cancels payment, cancel the order
|
|
||||||
$order->update_status( 'cancelled' );
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// For other cases, do nothing. By default, the order status is still "Pending Payment"
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do the last actions based on $type
|
|
||||||
switch ( $type ) {
|
|
||||||
|
|
||||||
case 'return': // Add info from OnePay and redirect to the appropriate URLs
|
|
||||||
|
|
||||||
wc_add_notice( __( 'OnePay info: ', 'woo-viet' ) . $this->OnePay_getResponseDescription( $vpc_TxnResponseCode ), 'notice' );
|
|
||||||
|
|
||||||
// This is an intentional DRY switch - refer to #DRY_vpc_TxnResponseCode above
|
|
||||||
// I need to make sure that `ipn` case below and message_log can be executed as well.
|
|
||||||
switch ( $vpc_TxnResponseCode ) {
|
|
||||||
case '0':
|
|
||||||
// If the payment is successful, redirect to the order page
|
|
||||||
wp_redirect( $this->get_return_url( $order ) );
|
|
||||||
break;
|
|
||||||
case '99':
|
|
||||||
// If the user cancels payment, redirect to the canceled cart page
|
|
||||||
wp_redirect( $order->get_cancel_order_url_raw() );
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// For other cases, redirect to the payment page
|
|
||||||
wp_redirect( $order->get_checkout_payment_url() );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'ipn': // Output the data to the page content
|
|
||||||
exit( 'responsecode=1&desc=confirm-success' );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'querydr':
|
|
||||||
// Do nothing
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
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
|
|
||||||
*
|
|
||||||
* @param string $responseCode
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
abstract public function OnePay_getResponseDescription( $responseCode );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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, '', '&' );
|
|
||||||
|
|
||||||
$http_link = $this->get_onepay_querydr_link( $this->testmode ) . '?' . $http_args;
|
|
||||||
|
|
||||||
// Log data
|
|
||||||
$message_log = sprintf( 'handle_onepay_querydr - http_link: %1$s - http_args: %2$s', $http_link, print_r( $args, true ) );
|
|
||||||
self::log( $message_log );
|
|
||||||
|
|
||||||
// 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' );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Logging method. - Copied from the WC_Gateway_Paypal Class
|
|
||||||
*
|
|
||||||
* @since 1.3.1
|
|
||||||
*
|
|
||||||
* @param string $message Log message.
|
|
||||||
* @param string $level Optional. Default 'info'.
|
|
||||||
* emergency|alert|critical|error|warning|notice|info|debug
|
|
||||||
*/
|
|
||||||
public static function log( $message, $level = 'info' ) {
|
|
||||||
if ( self::$log_enabled ) {
|
|
||||||
if ( empty( self::$log ) ) {
|
|
||||||
self::$log = wc_get_logger();
|
|
||||||
}
|
|
||||||
self::$log->log( $level, $message, array( 'source' => get_called_class() ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
if ( ! defined( 'ABSPATH' ) ) {
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Settings for OnePay Domestic Gateway.
|
|
||||||
* @since 1.3
|
|
||||||
*/
|
|
||||||
return array(
|
|
||||||
'enabled' => array(
|
|
||||||
'title' => __( 'Enable/Disable', 'woo-viet' ),
|
|
||||||
'type' => 'checkbox',
|
|
||||||
'label' => __( 'OnePay Domestic Gateway (by Woo Viet)', 'woo-viet' ),
|
|
||||||
'default' => 'no'
|
|
||||||
),
|
|
||||||
'testmode' => array(
|
|
||||||
'title' => __( 'OnePay Sandbox', 'woocommerce' ),
|
|
||||||
'type' => 'checkbox',
|
|
||||||
'label' => __( 'Enable OnePay sandbox (testing)', 'woocommerce' ),
|
|
||||||
'default' => 'no',
|
|
||||||
'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' ),
|
|
||||||
),
|
|
||||||
'title' => array(
|
|
||||||
'title' => __( 'Title', 'woo-viet' ),
|
|
||||||
'type' => 'text',
|
|
||||||
'description' => __( 'This controls the title which the user sees during checkout.', 'woo-viet' ),
|
|
||||||
'default' => __( 'OnePay Domestic Gateway', 'woo-viet' ),
|
|
||||||
'desc_tip' => true,
|
|
||||||
),
|
|
||||||
'description' => array(
|
|
||||||
'title' => __( 'Description', 'woo-viet' ),
|
|
||||||
'type' => 'textarea',
|
|
||||||
'desc_tip' => true,
|
|
||||||
'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' )
|
|
||||||
),
|
|
||||||
'order_button_text' => array(
|
|
||||||
'title' => __( 'Button text', 'woo-viet' ),
|
|
||||||
'type' => 'text',
|
|
||||||
'desc_tip' => true,
|
|
||||||
'description' => __( 'Button label in the checkout page.', 'woo-viet' ),
|
|
||||||
'default' => __( 'Pay with ATM cards', 'woo-viet' )
|
|
||||||
),
|
|
||||||
'api_details' => array(
|
|
||||||
'title' => __( 'API Credentials', 'woo-viet' ),
|
|
||||||
'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>' ),
|
|
||||||
),
|
|
||||||
'merchant_id' => array(
|
|
||||||
'title' => __( 'Merchant ID', 'woo-viet' ),
|
|
||||||
'type' => 'text',
|
|
||||||
'description' => __( 'Get your Merchant ID from OnePay.', 'woo-viet' ),
|
|
||||||
'default' => '',
|
|
||||||
'desc_tip' => true,
|
|
||||||
'placeholder' => __( 'Required. Provided by OnePay.', 'woo-viet' )
|
|
||||||
),
|
|
||||||
'access_code' => array(
|
|
||||||
'title' => __( 'Access Code', 'woocommerce' ),
|
|
||||||
'type' => 'text',
|
|
||||||
'description' => __( 'Get your Access Code from OnePay.', 'woo-viet' ),
|
|
||||||
'default' => '',
|
|
||||||
'desc_tip' => true,
|
|
||||||
'placeholder' => __( 'Required. Provided by OnePay.', 'woo-viet' )
|
|
||||||
),
|
|
||||||
'secure_secret' => array(
|
|
||||||
'title' => __( 'Secure Secret', 'woocommerce' ),
|
|
||||||
'type' => 'text',
|
|
||||||
'description' => __( 'Get your Secure Secret from OnePay.', 'woo-viet' ),
|
|
||||||
'default' => '',
|
|
||||||
'desc_tip' => true,
|
|
||||||
'placeholder' => __( 'Required. Provided by OnePay.', 'woo-viet' )
|
|
||||||
),
|
|
||||||
'user' => array(
|
|
||||||
'title' => __( 'User for queryDR. Test value: op01', 'woocommerce' ),
|
|
||||||
'type' => 'text',
|
|
||||||
'description' => __( 'Get your user info from OnePay.', 'woo-viet' ),
|
|
||||||
'default' => '',
|
|
||||||
'desc_tip' => true,
|
|
||||||
'placeholder' => __( 'Required. Provided by OnePay', 'woo-viet' )
|
|
||||||
),
|
|
||||||
'password' => array(
|
|
||||||
'title' => __( 'Password for queryDR. Test value: op123456', 'woocommerce' ),
|
|
||||||
'type' => 'text',
|
|
||||||
'description' => __( 'Get your password info from OnePay.', 'woo-viet' ),
|
|
||||||
'default' => '',
|
|
||||||
'desc_tip' => true,
|
|
||||||
'placeholder' => __( 'Required. Provided by OnePay.', 'woo-viet' )
|
|
||||||
),
|
|
||||||
'more_info' => 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( __( '%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>' ),
|
|
||||||
),
|
|
||||||
/**
|
|
||||||
* @since 1.3.1
|
|
||||||
*/
|
|
||||||
'debug' => array(
|
|
||||||
'title' => __( 'Debug log', 'woo-viet' ),
|
|
||||||
'type' => 'checkbox',
|
|
||||||
'label' => __( 'Enable logging', 'woo-viet' ),
|
|
||||||
'default' => 'no',
|
|
||||||
'description' => sprintf( __( 'Log events, such as IPN requests, inside %s', 'woo-viet' ), '<code>' . WC_Log_Handler_File::get_log_file_path( 'WooViet_OnePay_Domestic' ) . '</code>' ),
|
|
||||||
),
|
|
||||||
|
|
||||||
);
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
if ( ! defined( 'ABSPATH' ) ) {
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Settings for OnePay International Gateway.
|
|
||||||
* @since 1.5.0
|
|
||||||
*/
|
|
||||||
return array(
|
|
||||||
'enabled' => array(
|
|
||||||
'title' => __( 'Enable/Disable', 'woo-viet' ),
|
|
||||||
'type' => 'checkbox',
|
|
||||||
'label' => __( 'OnePay International Gateway (by Woo Viet)', 'woo-viet' ),
|
|
||||||
'default' => 'no'
|
|
||||||
),
|
|
||||||
'testmode' => array(
|
|
||||||
'title' => __( 'OnePay Sandbox', 'woocommerce' ),
|
|
||||||
'type' => 'checkbox',
|
|
||||||
'label' => __( 'Enable OnePay sandbox (testing)', 'woocommerce' ),
|
|
||||||
'default' => 'no',
|
|
||||||
'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_quocte' ),
|
|
||||||
),
|
|
||||||
'title' => array(
|
|
||||||
'title' => __( 'Title', 'woo-viet' ),
|
|
||||||
'type' => 'text',
|
|
||||||
'description' => __( 'This controls the title which the user sees during checkout.', 'woo-viet' ),
|
|
||||||
'default' => __( 'OnePay International Gateway', 'woo-viet' ),
|
|
||||||
'desc_tip' => true,
|
|
||||||
),
|
|
||||||
'description' => array(
|
|
||||||
'title' => __( 'Description', 'woo-viet' ),
|
|
||||||
'type' => 'textarea',
|
|
||||||
'desc_tip' => true,
|
|
||||||
'description' => __( 'This controls the description which the user sees during checkout.', 'woo-viet' ),
|
|
||||||
'default' => __( 'With OnePay, you can make payment by using any local international card such as Visa, Master, JCB, and Amex.', 'woo-viet' )
|
|
||||||
),
|
|
||||||
'order_button_text' => array(
|
|
||||||
'title' => __( 'Button text', 'woo-viet' ),
|
|
||||||
'type' => 'text',
|
|
||||||
'desc_tip' => true,
|
|
||||||
'description' => __( 'Button label in the checkout page.', 'woo-viet' ),
|
|
||||||
'default' => __( "Pay with international cards", 'woo-viet' )
|
|
||||||
),
|
|
||||||
'api_details' => array(
|
|
||||||
'title' => __( 'API Credentials', 'woo-viet' ),
|
|
||||||
'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>' ),
|
|
||||||
),
|
|
||||||
'merchant_id' => array(
|
|
||||||
'title' => __( 'Merchant ID', 'woo-viet' ),
|
|
||||||
'type' => 'text',
|
|
||||||
'description' => __( 'Get your Merchant ID from OnePay.', 'woo-viet' ),
|
|
||||||
'default' => '',
|
|
||||||
'desc_tip' => true,
|
|
||||||
'placeholder' => __( 'Required. Provided by OnePay.', 'woo-viet' )
|
|
||||||
),
|
|
||||||
'access_code' => array(
|
|
||||||
'title' => __( 'Access Code', 'woocommerce' ),
|
|
||||||
'type' => 'text',
|
|
||||||
'description' => __( 'Get your Access Code from OnePay.', 'woo-viet' ),
|
|
||||||
'default' => '',
|
|
||||||
'desc_tip' => true,
|
|
||||||
'placeholder' => __( 'Required. Provided by OnePay.', 'woo-viet' )
|
|
||||||
),
|
|
||||||
'secure_secret' => array(
|
|
||||||
'title' => __( 'Secure Secret', 'woocommerce' ),
|
|
||||||
'type' => 'text',
|
|
||||||
'description' => __( 'Get your Secure Secret from OnePay.', 'woo-viet' ),
|
|
||||||
'default' => '',
|
|
||||||
'desc_tip' => true,
|
|
||||||
'placeholder' => __( 'Required. Provided by OnePay.', 'woo-viet' )
|
|
||||||
),
|
|
||||||
'user' => array(
|
|
||||||
'title' => __( 'User for queryDR. Test value: op01', 'woocommerce' ),
|
|
||||||
'type' => 'text',
|
|
||||||
'description' => __( 'Get your user info from OnePay.', 'woo-viet' ),
|
|
||||||
'default' => '',
|
|
||||||
'desc_tip' => true,
|
|
||||||
'placeholder' => __( 'Required. Provided by OnePay', 'woo-viet' )
|
|
||||||
),
|
|
||||||
'password' => array(
|
|
||||||
'title' => __( 'Password for queryDR. Test value: op123456', 'woocommerce' ),
|
|
||||||
'type' => 'text',
|
|
||||||
'description' => __( 'Get your password info from OnePay.', 'woo-viet' ),
|
|
||||||
'default' => '',
|
|
||||||
'desc_tip' => true,
|
|
||||||
'placeholder' => __( 'Required. Provided by OnePay.', 'woo-viet' )
|
|
||||||
),
|
|
||||||
'more_info' => array(
|
|
||||||
'title' => __( 'Instant Payment Notification (IPN)', 'woo-viet' ),
|
|
||||||
'type' => 'title',
|
|
||||||
'description' =>
|
|
||||||
sprintf( 'URL: <code>%s</code>', WooViet_OnePay_International::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>' ),
|
|
||||||
),
|
|
||||||
/**
|
|
||||||
* @since 1.3.1
|
|
||||||
*/
|
|
||||||
'debug' => array(
|
|
||||||
'title' => __( 'Debug log', 'woo-viet' ),
|
|
||||||
'type' => 'checkbox',
|
|
||||||
'label' => __( 'Enable logging', 'woo-viet' ),
|
|
||||||
'default' => 'no',
|
|
||||||
'description' => sprintf( __( 'Log events, such as IPN requests, inside %s', 'woo-viet' ), '<code>' . WC_Log_Handler_File::get_log_file_path( 'WooViet_OnePay_International' ) . '</code>' ),
|
|
||||||
),
|
|
||||||
|
|
||||||
);
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Override/remove two validate functions in the parent class
|
|
||||||
*
|
|
||||||
* @author htdat
|
|
||||||
* @since 1.4.5
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
if ( class_exists( 'WC_Gateway_Paypal_IPN_Handler' ) ) {
|
|
||||||
|
|
||||||
class Woo_Viet_WC_Gateway_Paypal_IPN_Handler extends WC_Gateway_Paypal_IPN_Handler {
|
|
||||||
|
|
||||||
protected function validate_currency( $order, $currency ) {
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function validate_amount( $order, $amount ) {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,76 +1,77 @@
|
|||||||
# Woo Viet - WooCommerce for Vietnam
|
# Woo Viet - WooCommerce for Vietnam
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
|:---|:---|
|
||||||
|
| Contributors | htdat |
|
||||||
|
|Tags| WooCommerce Vietnam, vietnam, vietnamese, vietnam provinces, paypal for vietnam dong, vnd, vietnam dong, vietnam currency, vietnam customization |
|
||||||
|
| Requires at least | 4.3 |
|
||||||
|
| Tested up to | 4.7 |
|
||||||
|
| Stable tag | 1.2 |
|
||||||
|
| License | GPLv2 or later |
|
||||||
|
| License URI | https://www.gnu.org/licenses/gpl-2.0.html |
|
||||||
|
|
||||||
|
Add features to WooCommerce stores having anything related to Vietnam: currency, shipping address, PayPal and more.
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
**"Woo Viet - WooCommerce for Vietnam" brings the features that help to run WooCommerce stores and customize them for Vietnam much easier.**
|
**"Woo Viet - WooCommerce for Vietnam" brings the features that help to run WooCommerce stores and customize them for Vietnam much easier.**
|
||||||
|
|
||||||
See here https://wordpress.org/plugins/woo-viet/
|
|
||||||
|
|
||||||
Xem phiên bản tiếng Việt tại đây https://vi.wordpress.org/plugins/woo-viet/
|
Xem phiên bản tiếng Việt tại đây https://vi.wordpress.org/plugins/woo-viet/
|
||||||
|
|
||||||
|
## FEATURES
|
||||||
|
|
||||||
|
* Change the VND currency symbol `đ` to anything, e.g: `VND`, `VNĐ`, `đồng`, etc.
|
||||||
|
* Add provinces for Vietnam when visitors select Vietnam as a country of the shipping (billing) address. This is not available in WooCommerce by default.
|
||||||
|
* Convert `000` of prices to `K` (or anything). E.g: `50000` (VND) will be `50K` (VND), or `50 thousand` (VND).
|
||||||
|
* Support `VND` for [the PayPal Standard gateway](https://docs.woocommerce.com/document/paypal-standard/). Convert `VND` prices to any PayPal supported currency before sending visitors to the PayPal pages.
|
||||||
|
|
||||||
|
## ROAD MAP
|
||||||
|
|
||||||
|
In the future, this plugin will add more and more features for the Vietnam market:
|
||||||
|
|
||||||
|
* Integrate all districts to Vietnam provinces.
|
||||||
|
* Integrate at least one solution for collecting money by phone cards.
|
||||||
|
* Integrate the Vietnam payment gateways like 1Pay, OnePay, BaoKim, Ngan Luong, etc.
|
||||||
|
* Integrate the Vietnam shipping solutions like ShipChung, Giaohangnhanh, ViettelPost, etc.
|
||||||
|
|
||||||
|
## WHERE CAN I CONTRIBUTE MY CODE OR IDEA?
|
||||||
|
|
||||||
|
* You can report bugs or contribute code on [this GitHub repo](https://github.com/htdat/woo-viet).
|
||||||
|
* Please also do let us know if the "bug" is just a grammar/spelling error in both English and Vietnamese. We try to make our products as perfect as possible.
|
||||||
|
|
||||||
|
## INSTALLATION
|
||||||
|
|
||||||
|
Follow these steps to install and use the plugin:
|
||||||
|
|
||||||
|
1. Upload the plugin files to the `/wp-content/plugins/woo-viet` directory, or install the plugin through the WordPress plugins screen directly.
|
||||||
|
1. Activate the plugin through the `Plugins` screen in WordPress.
|
||||||
|
1. Go to the `WooCommerce -> Woo Viet` screen and configure the plugin.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Follow these steps to install and use the plugin:
|
||||||
|
|
||||||
|
1. Upload the plugin files to the `/wp-content/plugins/woo-viet` directory, or install the plugin through the WordPress plugins screen directly.
|
||||||
|
1. Activate the plugin through the 'Plugins' screen in WordPress.
|
||||||
|
1. Go to the `WooCommerce -> Woo Viet` screen and configure the plugin.
|
||||||
|
|
||||||
|
|
||||||
|
## Frequently Asked Questions
|
||||||
|
|
||||||
|
### WHERE CAN I CONTRIBUTE MY CODE OR IDEA?
|
||||||
|
|
||||||
|
* You can report bugs or contribute code on [this GitHub repo](https://github.com/htdat/woo-viet).
|
||||||
|
* Please also do let us know if the "bug" is just a grammar/spelling error in both English and Vietnamese. We try to make our products as perfect as possible.
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
|
||||||
|
1. The settings page under WooCommerce -> Woo Viet.
|
||||||
|
2. Prices are changed to "K", and the symbol is now "VND".
|
||||||
|
3. List provinces when selecting Vietnam.
|
||||||
|
4. Let clients know about the currency conversion before switching to the PayPal pages.
|
||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
### 1.5.3 - 2024.01.13
|
|
||||||
|
|
||||||
* Update - Sanitize admin settings to avoid XSS. Thanks Dhabaleshwar Das.
|
|
||||||
|
|
||||||
### 1.5.2 - 2021.10.03
|
|
||||||
|
|
||||||
* Update - tested with WP 5.8.1 and WC 5.7.1. #86
|
|
||||||
* Dev - Add GitHub Actions for WPorg deploy and asset update #87
|
|
||||||
* Update provinces and cities as of July 1st, 2021 #81. Thanks @daohoangson!
|
|
||||||
|
|
||||||
### 1.5.1 - 2020.09.13
|
|
||||||
|
|
||||||
* Fix the loading of WooViet_VND_PayPal_Standard
|
|
||||||
|
|
||||||
### 1.5.0 - 2020.09.10
|
|
||||||
|
|
||||||
* Add the OnePay international gateway #74
|
|
||||||
* Add Order Button texts in OnePay gateway setting pages. (Commit 3c818d3)
|
|
||||||
* Add rating and support links in the end of the settings page #30
|
|
||||||
* Fix two issues related to supporting VND for PayPal Checkout #77
|
|
||||||
|
|
||||||
### 1.4.5 - 2019.10.22
|
|
||||||
|
|
||||||
* Fix VND for PP Standard: wrong currency and gross (total) price in email confirmation #65
|
|
||||||
* Update provinces and cities #68. Thanks @daohoangson!
|
|
||||||
|
|
||||||
### 1.4.4 - 2019.02.24
|
|
||||||
|
|
||||||
* Fix the order of Provine - District field not working after updating WooCommerce 3.5.x #60
|
|
||||||
|
|
||||||
### 1.4.3 - 2018.07.31
|
|
||||||
|
|
||||||
* Fix fatal error when handling PayPal IPN #56
|
|
||||||
* Other small improvements #53
|
|
||||||
|
|
||||||
### 1.4.2 - 2018.04.26
|
|
||||||
|
|
||||||
* Fix the fatal error when WooCommerce PayPal Express Checkout Gateway is not active.
|
|
||||||
|
|
||||||
### 1.4.1 - 2018.04.26
|
|
||||||
|
|
||||||
* Fix the SVN command, missing some files on WP.org repo.
|
|
||||||
|
|
||||||
### 1.4 - 2018.04.24
|
|
||||||
|
|
||||||
* Fix the on-hold order issue with PayPal Standard.
|
|
||||||
* Fix the issue in OnePay Domestic gateway when users cancel payment.
|
|
||||||
* Add enhancement: arrange the address fields to the Vietnam standard: Country - Province - District - Address.
|
|
||||||
* Add supporting VND for [the PayPal Express Checkout gateway](https://docs.woocommerce.com/document/paypal-express-checkout/).
|
|
||||||
* Add "Settings" link in the Plugins list page when the plugin is active.
|
|
||||||
|
|
||||||
### 1.3.1 - 2017.07.09
|
|
||||||
|
|
||||||
* Improve the OnePay domestic gateway.
|
|
||||||
* Add the plugin icon and banner.
|
|
||||||
* Add the questionnaire after 4 weeks of installation.
|
|
||||||
|
|
||||||
### 1.3 - 2017.04.22
|
|
||||||
* Add [the OnePay domestic (local ATM cards) gateway](http://onepay.com.vn/)
|
|
||||||
|
|
||||||
### 1.2 - 2017.03.03
|
|
||||||
* Integrate all districts to Vietnam provinces. Credits: [WC City Select by 8manos](https://github.com/8manos/wc-city-select) and [the Vietnam district data by 10h30](https://github.com/htdat/woo-viet/issues/4#issuecomment-277449462)
|
|
||||||
|
|
||||||
### 1.1
|
### 1.1
|
||||||
* Replace all “WooCommerce for Vietnam” to “Woo Viet”
|
* Replace all “WooCommerce for Vietnam” to “Woo Viet”
|
||||||
* Replace all “woocomerce-for-vietnam” to “woo-viet”
|
* Replace all “woocomerce-for-vietnam” to “woo-viet”
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
=== Woo Viet - WooCommerce for Vietnam ===
|
=== Woo Viet - WooCommerce for Vietnam ===
|
||||||
Contributors: htdat, thup90, longnguyen
|
Contributors: htdat
|
||||||
Tags: OnePay WooCommerce, OnePay Vietnam, WooCommerce Vietnam, vietnam, vietnamese, vietnam provinces, paypal for vietnam dong, vnd, vietnam dong, vietnam currency, vietnam customization
|
Tags: WooCommerce Vietnam, vietnam, vietnamese, vietnam provinces, paypal for vietnam dong, vnd, vietnam dong, vietnam currency, vietnam customization
|
||||||
Requires at least: 4.3
|
Requires at least: 4.3
|
||||||
Tested up to: 6.4.2
|
Tested up to: 4.7.2
|
||||||
Requires PHP: 7.0
|
Stable tag: 1.2
|
||||||
Stable tag: 1.5.3
|
|
||||||
License: GPLv2 or later
|
License: GPLv2 or later
|
||||||
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
||||||
|
|
||||||
@@ -14,27 +13,24 @@ Add features to WooCommerce stores having anything related to Vietnam: currency,
|
|||||||
|
|
||||||
**"Woo Viet - WooCommerce for Vietnam" brings the features that help to run WooCommerce stores and customize them for Vietnam much easier.**
|
**"Woo Viet - WooCommerce for Vietnam" brings the features that help to run WooCommerce stores and customize them for Vietnam much easier.**
|
||||||
|
|
||||||
Xem phiên bản tiếng Việt tại đây [https://vi.wordpress.org/plugins/woo-viet/](https://vi.wordpress.org/plugins/woo-viet/)
|
Xem phiên bản tiếng Việt tại đây https://vi.wordpress.org/plugins/woo-viet/
|
||||||
|
|
||||||
= FEATURES =
|
= FEATURES =
|
||||||
|
|
||||||
* Change the VND currency symbol `đ` to anything, e.g: `VND`, `VNĐ`, `đồng`, etc.
|
* Change the VND currency symbol `đ` to anything, e.g: `VND`, `VNĐ`, `đồng`, etc.
|
||||||
* Add provinces for Vietnam when visitors select Vietnam as a country of the shipping (billing) address. Arrange the address fields to the Vietnam standard: Country - Province - District - Address.
|
* Add provinces for Vietnam when visitors select Vietnam as a country of the shipping (billing) address. This is not available in WooCommerce by default.
|
||||||
* Add districts to Vietnam provinces.
|
* Add districts to Vietnam provinces.
|
||||||
* Convert `000` of prices to `K` (or anything). E.g: `50000` (VND) will be `50K` (VND), or `50 thousand` (VND).
|
* Convert `000` of prices to `K` (or anything). E.g: `50000` (VND) will be `50K` (VND), or `50 thousand` (VND).
|
||||||
* Support `VND` for [the PayPal Standard gateway](https://docs.woocommerce.com/document/paypal-standard/). Convert `VND` prices to any PayPal supported currency before sending visitors to the PayPal pages.
|
* Support `VND` for [the PayPal Standard gateway](https://docs.woocommerce.com/document/paypal-standard/). Convert `VND` prices to any PayPal supported currency before sending visitors to the PayPal pages.
|
||||||
* Support `VND` for [the PayPal Express Checkout gateway](https://docs.woocommerce.com/document/paypal-express-checkout/).
|
|
||||||
* Add [the OnePay domestic (local ATM cards) gateway](http://onepay.com.vn/). Implement all methods in [the official documents](https://mtf.onepay.vn/developer/?page=modul_noidia_php): QueryDR, IPN, and Return URL.
|
|
||||||
* Add [the OnePay international (Visa, Master, JCB, Amex cards) gateway](http://onepay.com.vn/). Implement all methods in [the official documents](https://mtf.onepay.vn/developer/?page=modul_quocte_php): QueryDR, IPN, and Return URL.
|
|
||||||
|
|
||||||
|
|
||||||
= ROAD MAP =
|
= ROAD MAP =
|
||||||
|
|
||||||
In the future, this plugin will add more and more features for the Vietnam market:
|
In the future, this plugin will add more and more features for the Vietnam market:
|
||||||
|
|
||||||
|
* Integrate all districts to Vietnam provinces. (available since 1.2)
|
||||||
* Integrate at least one solution for collecting money by phone cards.
|
* Integrate at least one solution for collecting money by phone cards.
|
||||||
* Integrate the Vietnam payment gateways like Momo, VNPay, BaoKim, Ngan Luong, etc.
|
* Integrate the Vietnam payment gateways like 1Pay, OnePay, BaoKim, Ngan Luong, etc.
|
||||||
* Integrate the Vietnam shipping solutions like Giaohangnhanh, Giao Hang Tiet Kiem, VNPost, ViettelPost, etc.
|
* Integrate the Vietnam shipping solutions like ShipChung, Giaohangnhanh, ViettelPost, etc.
|
||||||
|
|
||||||
= WHERE CAN I CONTRIBUTE MY CODE OR IDEA? =
|
= WHERE CAN I CONTRIBUTE MY CODE OR IDEA? =
|
||||||
|
|
||||||
@@ -69,26 +65,24 @@ Follow these steps to install and use the plugin:
|
|||||||
|
|
||||||
1. The settings page under WooCommerce -> Woo Viet.
|
1. The settings page under WooCommerce -> Woo Viet.
|
||||||
2. Prices are changed to "K", and the symbol is now "VND".
|
2. Prices are changed to "K", and the symbol is now "VND".
|
||||||
3. List provinces and districts when selecting Vietnam.
|
3. List provinces when selecting Vietnam.
|
||||||
4. Let clients know about the currency conversion before switching to the PayPal pages.
|
4. Let clients know about the currency conversion before switching to the PayPal pages.
|
||||||
5. OnePay domestic (local ATM cards) gateway.
|
|
||||||
|
|
||||||
== Changelog ==
|
== Changelog ==
|
||||||
|
|
||||||
See all change logs on [GitHub repo](https://github.com/htdat/woo-viet#changelog).
|
= 1.2 - 2017.03.03 =
|
||||||
|
* Integrate all districts to Vietnam provinces. Credits: [WC City Select by 8manos](https://github.com/8manos/wc-city-select) and [the Vietnam district data by 10h30](https://github.com/htdat/woo-viet/issues/4#issuecomment-277449462)
|
||||||
|
|
||||||
|
= 1.1 =
|
||||||
|
* Replace all “WooCommerce for Vietnam” to “Woo Viet”
|
||||||
|
* Replace all “woocomerce-for-vietnam” to “woo-viet”
|
||||||
|
* Re-upload to WordPress.org
|
||||||
|
|
||||||
|
= 1.0 =
|
||||||
|
* First release.
|
||||||
|
* Upload to WordPress.org
|
||||||
|
|
||||||
== Upgrade Notice ==
|
== Upgrade Notice ==
|
||||||
|
|
||||||
= 1.5.0 =
|
|
||||||
|
|
||||||
Version 1.5.0 comes with a new gateway OnePay International and other small improvements.
|
|
||||||
|
|
||||||
= 1.4 =
|
|
||||||
|
|
||||||
Version 1.4 arranges the address fields to the Vietnam standard (Country - Province - District - Address), supports VND for PayPal Express Checkout, and fixes issues on PayPal Standard and OnePay Domestic gateways.
|
|
||||||
|
|
||||||
= 1.3 =
|
|
||||||
The new version 1.3 comes with the feature "Add the OnePay domestic (local ATM cards) gateway]"
|
|
||||||
|
|
||||||
= 1.2 =
|
= 1.2 =
|
||||||
The new version 1.2 comes with the feature "Add districts to Vietnam provinces".
|
The new version 1.2 comes with the feature "Add districts to Vietnam provinces".
|
||||||
|
|||||||
|
After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
@@ -7,11 +7,7 @@
|
|||||||
* Author URI: https://profiles.wordpress.org/htdat
|
* Author URI: https://profiles.wordpress.org/htdat
|
||||||
* Text Domain: woo-viet
|
* Text Domain: woo-viet
|
||||||
* Domain Path: /languages
|
* Domain Path: /languages
|
||||||
* Version: 1.5.3
|
* Version: 1.2
|
||||||
*
|
|
||||||
* WC requires at least: 3.0
|
|
||||||
* WC tested up to: 8.4.0
|
|
||||||
*
|
|
||||||
* License: GPLv2+
|
* License: GPLv2+
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -20,7 +16,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
define( 'WOO_VIET_DIR', plugin_dir_path( __FILE__ ) );
|
define( 'WOO_VIET_DIR', plugin_dir_path( __FILE__ ) );
|
||||||
define( 'WOO_VIET_URL', plugins_url( '/', __FILE__ ) );
|
// define( 'WOO_VIET_URL', plugins_url( '/', __FILE__ ) );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start the instance
|
* Start the instance
|
||||||
@@ -40,39 +36,25 @@ class WooViet {
|
|||||||
* @var array The default settings for the whole plugin
|
* @var array The default settings for the whole plugin
|
||||||
*/
|
*/
|
||||||
static $default_settings = array(
|
static $default_settings = array(
|
||||||
'add_province' =>
|
'add_province' =>
|
||||||
array(
|
array(
|
||||||
'enabled' => 'yes',
|
'enabled' => 'yes',
|
||||||
),
|
),
|
||||||
'add_city' =>
|
'add_city' =>
|
||||||
array(
|
array(
|
||||||
'enabled' => 'yes',
|
'enabled' => 'yes',
|
||||||
),
|
),
|
||||||
'change_currency_symbol' =>
|
'change_currency_symbol' =>
|
||||||
array(
|
array(
|
||||||
'enabled' => 'yes',
|
'enabled' => 'yes',
|
||||||
'text' => 'VND',
|
'text' => 'VND',
|
||||||
),
|
),
|
||||||
'convert_price' =>
|
'convert_price' =>
|
||||||
array(
|
array(
|
||||||
'enabled' => 'yes',
|
'enabled' => 'yes',
|
||||||
'text' => 'K',
|
'text' => 'K',
|
||||||
),
|
),
|
||||||
'vnd_paypal_standard' =>
|
'vnd_paypal_standard' =>
|
||||||
array(
|
|
||||||
'enabled' => 'yes',
|
|
||||||
'currency' => 'USD',
|
|
||||||
'rate' => '22770',
|
|
||||||
),
|
|
||||||
'add_onepay_domestic' =>
|
|
||||||
array(
|
|
||||||
'enabled' => 'yes',
|
|
||||||
),
|
|
||||||
'add_onepay_international' =>
|
|
||||||
array(
|
|
||||||
'enabled' => 'yes',
|
|
||||||
),
|
|
||||||
'vnd_paypal_express_checkout' =>
|
|
||||||
array(
|
array(
|
||||||
'enabled' => 'yes',
|
'enabled' => 'yes',
|
||||||
'currency' => 'USD',
|
'currency' => 'USD',
|
||||||
@@ -90,7 +72,6 @@ class WooViet {
|
|||||||
protected $Currency;
|
protected $Currency;
|
||||||
protected $VND_PayPal_Standard;
|
protected $VND_PayPal_Standard;
|
||||||
protected $Admin_Page;
|
protected $Admin_Page;
|
||||||
protected $VND_PayPal_Express_Checkout;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup class.
|
* Setup class.
|
||||||
@@ -105,9 +86,9 @@ class WooViet {
|
|||||||
* Throw a notice if WooCommerce is NOT active
|
* Throw a notice if WooCommerce is NOT active
|
||||||
*/
|
*/
|
||||||
public function notice_if_not_woocommerce() {
|
public function notice_if_not_woocommerce() {
|
||||||
$class = 'notice notice-warning';
|
$class = 'notice notice-error';
|
||||||
|
|
||||||
$message = __( 'Woo Viet is not running because WooCommerce is not active. Please activate both plugins.',
|
$message = __( 'Woo Viet is not running because WooCommerce is not active. Please activate both plugins',
|
||||||
'woo-viet' );
|
'woo-viet' );
|
||||||
|
|
||||||
printf( '<div class="%1$s"><p><strong>%2$s</strong></p></div>', $class, $message );
|
printf( '<div class="%1$s"><p><strong>%2$s</strong></p></div>', $class, $message );
|
||||||
@@ -124,9 +105,6 @@ class WooViet {
|
|||||||
if ( class_exists( 'WooCommerce' ) ) {
|
if ( class_exists( 'WooCommerce' ) ) {
|
||||||
// Run this plugin normally if WooCommerce is active
|
// Run this plugin normally if WooCommerce is active
|
||||||
$this->main();
|
$this->main();
|
||||||
|
|
||||||
// Add "Settings" link when the plugin is active
|
|
||||||
add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), array( $this, 'add_settings_link' ) );
|
|
||||||
} else {
|
} else {
|
||||||
// Throw a notice if WooCommerce is NOT active
|
// Throw a notice if WooCommerce is NOT active
|
||||||
add_action( 'admin_notices', array( $this, 'notice_if_not_woocommerce' ) );
|
add_action( 'admin_notices', array( $this, 'notice_if_not_woocommerce' ) );
|
||||||
@@ -151,84 +129,10 @@ class WooViet {
|
|||||||
include( WOO_VIET_DIR . 'inc/class-wooviet-admin-page.php' );
|
include( WOO_VIET_DIR . 'inc/class-wooviet-admin-page.php' );
|
||||||
$this->Admin_Page = new WooViet_Admin_Page();
|
$this->Admin_Page = new WooViet_Admin_Page();
|
||||||
|
|
||||||
// Add the notices class
|
|
||||||
include( WOO_VIET_DIR . 'inc/class-wooviet-notices.php' );
|
|
||||||
new WooViet_Notices();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$settings = self::get_settings();
|
$settings = self::get_settings();
|
||||||
|
|
||||||
// Check if "Add the OnePay Domestic Gateway" is enabled
|
|
||||||
if ( 'yes' == $settings['add_onepay_domestic']['enabled']
|
|
||||||
AND 'VND' == get_woocommerce_currency()
|
|
||||||
) {
|
|
||||||
include( 'inc/class-wooviet-onepay-domestic.php' );
|
|
||||||
|
|
||||||
add_filter( 'woocommerce_payment_gateways', function ( $methods ) {
|
|
||||||
$methods[] = 'WooViet_OnePay_Domestic';
|
|
||||||
return $methods;
|
|
||||||
} );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the action to check the cron job for handling queryDR
|
|
||||||
* It's not possible to add in the "WooViet_OnePay_Domestic" class
|
|
||||||
* because it's NOT always loaded in the 'woocommerce_payment_gateways' hook above
|
|
||||||
*/
|
|
||||||
if ( defined( 'DOING_CRON' ) and DOING_CRON ) {
|
|
||||||
$wooviet_onepay_domestic = new WooViet_OnePay_Domestic();
|
|
||||||
/**
|
|
||||||
* @since 1.5.0
|
|
||||||
*/
|
|
||||||
add_action( 'wooviet_onepay_domestic_handle_querydr', array(
|
|
||||||
$wooviet_onepay_domestic,
|
|
||||||
'handle_onepay_querydr'
|
|
||||||
), 10, 1 );
|
|
||||||
/**
|
|
||||||
* Backward compatibility
|
|
||||||
* Actually, this does help for the short time (exactly 20 minutes) @see WooViet_OnePay_Abstract::set_onepay_querydr_cron()
|
|
||||||
* when upgrading to version 1.5.0
|
|
||||||
* as the previous cron jobs set by the previous versions has not run yet.
|
|
||||||
*
|
|
||||||
* TODO: May consider removing this completely after 2 major versions. Target: 1.7
|
|
||||||
*/
|
|
||||||
add_action( 'wooviet_handle_onepay_querydr', array(
|
|
||||||
$wooviet_onepay_domestic,
|
|
||||||
'handle_onepay_querydr'
|
|
||||||
), 10, 1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if "Add the OnePay International Gateway" is enabled
|
|
||||||
* @since 1.5.0
|
|
||||||
*/
|
|
||||||
if ( 'yes' == $settings['add_onepay_international']['enabled']
|
|
||||||
AND 'VND' == get_woocommerce_currency()
|
|
||||||
) {
|
|
||||||
include( 'inc/class-wooviet-onepay-international.php' );
|
|
||||||
|
|
||||||
add_filter( 'woocommerce_payment_gateways', function ( $methods ) {
|
|
||||||
$methods[] = 'WooViet_OnePay_International';
|
|
||||||
return $methods;
|
|
||||||
} );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the action to check the cron job for handling queryDR
|
|
||||||
* It's not possible to add in the "WooViet_OnePay_International" class
|
|
||||||
* because it's NOT always loaded in the 'woocommerce_payment_gateways' hook above
|
|
||||||
*/
|
|
||||||
if ( defined( 'DOING_CRON' ) and DOING_CRON ) {
|
|
||||||
|
|
||||||
add_action( 'wooviet_onepay_international_handle_querydr', array(
|
|
||||||
new WooViet_OnePay_International(),
|
|
||||||
'handle_onepay_querydr'
|
|
||||||
), 10, 1 );
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if "Add provinces for Vietnam " is enabled.
|
// Check if "Add provinces for Vietnam " is enabled.
|
||||||
if ( 'yes' == $settings['add_province']['enabled'] ) {
|
if ( 'yes' == $settings['add_province']['enabled'] ) {
|
||||||
include( WOO_VIET_DIR . 'inc/class-wooviet-provinces.php' );
|
include( WOO_VIET_DIR . 'inc/class-wooviet-provinces.php' );
|
||||||
@@ -256,10 +160,7 @@ class WooViet {
|
|||||||
|
|
||||||
|
|
||||||
// Check if "Support VND for the PayPal Standard gateway" is enabled
|
// Check if "Support VND for the PayPal Standard gateway" is enabled
|
||||||
if ( 'yes' == $settings['vnd_paypal_standard']['enabled']
|
if ( 'yes' == $settings['vnd_paypal_standard']['enabled'] ) {
|
||||||
AND class_exists( 'WC_Gateway_Paypal' )
|
|
||||||
AND 'VND' == get_woocommerce_currency()
|
|
||||||
) {
|
|
||||||
include( WOO_VIET_DIR . 'inc/class-wooviet-vnd-paypal-standard.php' );
|
include( WOO_VIET_DIR . 'inc/class-wooviet-vnd-paypal-standard.php' );
|
||||||
$this->VND_PayPal_Standard = new WooViet_VND_PayPal_Standard(
|
$this->VND_PayPal_Standard = new WooViet_VND_PayPal_Standard(
|
||||||
$settings['vnd_paypal_standard']['rate'],
|
$settings['vnd_paypal_standard']['rate'],
|
||||||
@@ -267,18 +168,6 @@ class WooViet {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if "Support VND for the PayPal Express Checkout gateway" is enabled
|
|
||||||
if ( 'yes' == $settings['vnd_paypal_express_checkout']['enabled']
|
|
||||||
AND class_exists( 'WC_Gateway_PPEC_Plugin' )
|
|
||||||
AND 'VND' == get_woocommerce_currency()
|
|
||||||
) {
|
|
||||||
include( WOO_VIET_DIR . 'inc/class-wooviet-vnd-paypal-express-checkout.php' );
|
|
||||||
$this->VND_PayPal_Express_Checkout = new WooViet_VND_PayPal_Express_Checkout(
|
|
||||||
$settings['vnd_paypal_express_checkout']['rate'],
|
|
||||||
$settings['vnd_paypal_express_checkout']['currency']
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -288,22 +177,7 @@ class WooViet {
|
|||||||
static function get_settings() {
|
static function get_settings() {
|
||||||
$settings = get_option( 'woo-viet', self::$default_settings );
|
$settings = get_option( 'woo-viet', self::$default_settings );
|
||||||
$settings = wp_parse_args( $settings, self::$default_settings );
|
$settings = wp_parse_args( $settings, self::$default_settings );
|
||||||
|
|
||||||
return $settings;
|
return $settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
/**
|
|
||||||
* Add "Settings" link in the Plugins list page when the plugin is active
|
|
||||||
*
|
|
||||||
* @since 1.4
|
|
||||||
* @author Longkt
|
|
||||||
*/
|
|
||||||
public function add_settings_link( $links ) {
|
|
||||||
$settings = array( '<a href="' . admin_url( 'admin.php?page=woo-viet' ) . '">' . __( 'Settings', 'woo-viet' ) . '</a>' );
|
|
||||||
$links = array_reverse( array_merge( $links, $settings ) );
|
|
||||||
|
|
||||||
return $links;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||