VictorVone
@VictorVone
Travel, Coffee, Hockey, Racing, Bikes

При покупке в интернет-магазине через Приват24 с телефона — не приходит емейл о покупке, а через ПК-версию приходит, что не так?

<?php
/*
Plugin Name: WooCommerce Privat24 Gateway
*/

add_action('plugins_loaded', 'init_WC_Privat24_Payment_Gateway', 0);

function init_WC_Privat24_Payment_Gateway() {

    if(!class_exists('WC_Payment_Gateway')) return;

    class WC_Privat24_Payment_Gateway extends WC_Payment_Gateway{

        public function __construct(){

            $this->id = 'privat24';
            $this->has_fields         = false;
            $this->method_title       = 'Privat24';
            $this->method_description = __( 'Privat24', 'woocommerce_privat24' );
            $this->liveurl            = 'https://api.privatbank.ua/p24api/ishop';
            $this->init_form_fields();
            $this->init_settings();
            $this->title              =  $this->settings['title'];
            $this->description        =  $this->settings['description'];
            $this->merchant_id        = $this->settings['merchant_id'];
            $this->merchant_password  = $this->settings['merchant_password'];
            $this->icon               = apply_filters('woocommerce_privat24_icon', 'https://www.privat24.ua/img/78f32b1095f8275e1b7fc46ebed4614b.svg');
            // Actions
            add_action('woocommerce_update_options_payment_gateways', array(&$this, 'process_admin_options'));
            add_action( 'woocommerce_receipt_'. $this->id, array( $this, 'receipt_page' ) );
            add_action('woocommerce_api_wc_privat24', array($this, 'check_ipn_response'));
        }

        public function init_form_fields(){

            $this->form_fields = array(
                'enabled' => array(
                    'title' => __( 'Включить/Отключить', 'woocommerce_privat24' ),
                    'type' => 'checkbox',
                    'label' => __( 'Включить', 'woocommerce_privat24' ),
                    'default' => 'yes'
                                ),
                'title' => array(
                    'title' => __( 'Заголовок', 'woocommerce_privat24' ),
                    'type' => 'text',
                    'description' => __( 'Заголовок, который отображается на странице оформления заказа', 'woocommerce_privat24' ),
                    'default' => 'Privat24',
                    'desc_tip' => true,
                                ),
                'description' => array(
                    'title' => __( 'Описание', 'woocommerce_privat24' ),
                    'type' => 'textarea',
                    'description' => __( 'Описание, которое отображается в процессе выбора формы оплаты', 'woocommerce_privat24' ),
                    'default' => __( 'Оплатить через электронную платежную систему Приват24', 'woocommerce_privat24' ),
                ),
                'merchant_id' => array(
                    'title' => __( 'Merchant ID', 'woocommerce_privat24' ),
                    'type' => 'text',
                    'description' => __( 'Уникальный идентификатор магазина в системе Privat24.', 'woocommerce_privat24' ),
					'default' => '137099',
                ),
                'merchant_password' => array(
                    'title' => __( 'Пароль', 'woocommerce_privat24' ),
                    'type' => 'password',
                    'description' => __( 'Пароль мерчанта', 'woocommerce_privat24' ),
					'default' => '7bG892213076TR28nN0HlNB3rZoY7e4',
                ),
            );
        }

        function process_payment($order_id){
            $order = new WC_Order($order_id);
            return array(
                'result' => 'success',
                'redirect'  => add_query_arg('order', $order->id, add_query_arg('key', $order->order_key, get_permalink(woocommerce_get_page_id('pay'))))
            );
        }

        public function receipt_page($order){
            echo '<p>'.__('Спасибо за Ваш заказ, пожалуйста, нажмите кнопку ниже, чтобы заплатить.', 'woocommerce').'</p>';
            echo $this->generate_form($order);
        }

        public function generate_form($order_id){
            $order = new WC_Order( $order_id );
            $action_adr = $this->liveurl;
            $result_url = str_replace( 'https:', 'http:', add_query_arg( 'wc-api', 'wc_privat24', get_permalink(woocommerce_get_page_id('thanks')) ) );
            $args = array(
                            'amt'         => $order->order_total,
                            'ccy'         => get_woocommerce_currency(),
                            'merchant'    => $this->merchant_id,
                            'order'       => $order_id,
                            'details'     => "Оплата за заказ - $order_id",
                            'ext_details' => "Оплата за заказ - $order_id",
                            'pay_way'     => 'privat24',
                            'return_url'  => $result_url,
                            'server_url'  => '',

            			);

            $args_array = array();

            foreach ($args as $key => $value){
            			$args_array[] = '<input type="hidden" name="'.esc_attr($key).'" value="'.esc_attr($value).'" />';
            }

            return
                    '<form action="'.esc_url($action_adr).'" method="POST" id="privat24_payment_form">'.
                    '<input type="submit" class="button alt" id="submit_privat24_button" value="'.__('Оплатить', 'woocommerce').'" /> <a class="button cancel" href="'.$order->get_cancel_order_url().'">'.__('Отказаться от оплаты & вернуться в корзину', 'woocommerce').'</a>'."\n".
                    implode("\n", $args_array).
                    '</form>';
        }


        function check_ipn_response(){
            global $woocommerce;

            $posted = $_POST['payment'];
            $hash = sha1(md5($posted.$this->merchant_password));
            if (isset($_POST['payment']) && $hash === $_POST['signature']){
                 $items=explode("&", $_POST['payment']);
                 $ar=array();
                 foreach($items as $it){
                    $key=""; $value="";
                    list($key, $value)=explode("=", $it, 2);
                    $payment_items[$key]=$value;
                 }

                  $order = new WC_Order($payment_items['order']);
                  $order->update_status('processing', __('Платеж успешно оплачен', 'woocommerce'));
                  $order->add_order_note( __('Клиент успешно оплатил заказ', 'woocommerce') );
                  $woocommerce->cart->empty_cart();

            }else{
                wp_die('IPN Request Failure');
            }

        }

    }

}

add_filter( 'woocommerce_payment_gateways', 'add_WC_Privat24_Payment_Gateway' );

function add_WC_Privat24_Payment_Gateway( $methods ){
    $methods[] = 'WC_Privat24_Payment_Gateway';
    return $methods;
}
?>


Вопрос даже не в том, что не так, а как такое возможно, работники тех.поддержки ответили скромно, что Приват24 не поддерживается и все идет через LiqPay, но так как сам плагин работает, то хочется докопаться до истины.
  • Вопрос задан
  • 217 просмотров
Пригласить эксперта
Ответы на вопрос 1
lamer350
@lamer350
กำลังสูงสุด
Я лично в этом плагине вообще не вижу функции по отправке на email сообщения об покупке, скорее всего это у вас делает сам woocomerce и копать нужно там. К тому же вы не уточнили у вас мобильная версия с отдельным беком? Тогда вполне логично было бы копаться в коде моб версии.
Если адаптивная версия - то у вас в принципе не может возникать таких проблем, единственное что приходит в голову - либо с телефона неправильно вводите email, либо скрываете поле при адаптации и оно остается пустым.

Или все же вопрос именно о чеке? который отправляет приват? Если так, то от вас тут ничего не зависит, да и по памяти, действительно никогда ликпей или приват не запрашивал почту на моб устройствах и вы уж точно никак на это не сможете повлиять и от вашего плагина это не зависит.

Общем больше вопросов чем ответов, как то вы скромно описали проблему.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы