Ответы в темах

Просмотр 15 ответов — с 1 по 15 (всего 179)
  • Разработчики плагина ответили, надо уточнить у ребят из Woocommerce. Поскольку у нас в документации нет методов, отвечающих за это….
    Все — замкнутый круг (

    WooCommerce не имеет к этому отношения.

    Вы зря так утверждаете — вот например, если я выбираю стандартный «Банковский перевод», то тоже, после подтверждения заказа, перебрасывает на страницу заказа…
    Я понимаю, что разработчик плагина должен был что-то дописать, что бы этого перенаправления не было — но это должно быть связано с функционалом woocommerce (

    Вот тут тоже наш человек на англоязычном форуме так же «бился головой от стену» безрезультатно https://wordpress.org/support/topic/how-to-remove-the-extra-step/

    Там кода-то 300 строчек во всем плагине…

    <?php
    /*
      Plugin Name: Unitpay
      Plugin URI:  http://unitpay.ru/
      Description: Unitpay Plugin for WooCommerce
      Version: 1.0.1
      Author: unitpay.ru
     */
    if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
    
    /* Add a custom payment class to WC
    ------------------------------------------------------------ */
    add_action('plugins_loaded', 'woocommerce_unitpay', 0);
    function woocommerce_unitpay(){
        load_plugin_textdomain( 'unitpay', false, dirname( plugin_basename( __FILE__ ) ) . '/lang/' );
    
        if (!class_exists('WC_Payment_Gateway'))
            return; // if the WC payment gateway class is not available, do nothing
        if(class_exists('WC_UNITPAY'))
            return;
        class WC_UNITPAY extends WC_Payment_Gateway{
            public function __construct(){
    
                $plugin_dir = plugin_dir_url(__FILE__);
    
                global $woocommerce;
    
                $this->id = 'unitpay';
                $this->icon = apply_filters('woocommerce_unitpay_icon', ''.$plugin_dir.'unitpay.png');
                $this->has_fields = false;
    
                // Load the settings
                $this->init_form_fields();
                $this->init_settings();
    
                // Define user set variables
                $this->public_key = $this->get_option('public_key');
                $this->secret_key = $this->get_option('secret_key');
                $this->title = 'Unitpay';
                $this->description = __('Payment system Unitpay', 'unitpay');
    
                // Actions
                add_action('woocommerce_receipt_' . $this->id, array($this, 'receipt_page'));
    
                // Save options
                add_action('woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );
    
                // Payment listener/API hook
                add_action('woocommerce_api_wc_' . $this->id, array($this, 'callback'));
    
            }
    
            public function admin_options() {
                ?>
                <h3><?php _e('UNITPAY', 'unitpay'); ?></h3>
                <p><?php _e('Setup payments parameters.', 'unitpay'); ?></p>
    
                <table class="form-table">
    
                    <?php
                    // Generate the HTML For the settings form.
                    $this->generate_settings_html();
                    ?>
                </table><!--/.form-table-->
    
                <?php
            } // End admin_options()
    
            function init_form_fields(){
                $this->form_fields = array(
                    'enabled' => array(
                        'title' => __('Enable/Disable', 'unitpay'),
                        'type' => 'checkbox',
                        'label' => __('Enabled', 'unitpay'),
                        'default' => 'yes'
                    ),
                    'public_key' => array(
                        'title' => __('PUBLIC KEY', 'unitpay'),
                        'type' => 'text',
                        'description' => __('Copy PUBLIC KEY from your account page in unitpay system', 'unitpay'),
                        'default' => ''
                    ),
                    'secret_key' => array(
                        'title' => __('SECRET KEY', 'woocommerce'),
                        'type' => 'text',
                        'description' => __('Copy SECRET KEY from your account page in unitpay system', 'unitpay'),
                        'default' => ''
                    )
    
                );
            }
    
            /**
             * Generate form
             **/
            public function generate_form($order_id){
                $order = new WC_Order( $order_id );
    
                $sum = number_format($order->order_total, 2, '.', '');
                $account = $order_id;
                $desc = __('Payment for Order №', 'unitpay') . $order_id;
                $currency = $order->get_order_currency();
                $cur_locale = get_locale();
                $locale = $cur_locale == 'ru_RU'?'ru':'en';
                $signature = hash('sha256', join('{up}', array(
                    $account,
                    $currency,
                    $desc,
                    $sum,
                    $this->secret_key
                )));
    
                return
                    '<form action="https://unitpay.ru/pay/' . $this->public_key . '" method="POST" id="unitpay_form">'.
                    '<input type="hidden" name="sum" value="' . $sum . '" />'.
                    '<input type="hidden" name="account" value="' . $account . '" />'.
                    '<input type="hidden" name="desc" value="' . $desc . '" />'.
                    '<input type="hidden" name="currency" value="' . $currency . '" />'.
                    '<input type="hidden" name="locale" value="' . $locale . '" />'.
                    '<input type="hidden" name="signature" value="' . $signature . '" />'.
                    '<input type="submit" class="button alt" id="submit_unitpay_form" value="'.__('Pay', 'unitpay').'" />
    			 <a class="button cancel" href="'.$order->get_cancel_order_url().'">'.__('Cancel payment and return back to card', 'unitpay').'</a>'."\n".
                    '</form>';
            }
    
            /**
             * Process the payment and return the result
             **/
            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'))))
                );
            }
    
            function receipt_page($order){
                echo '<p>'.__('Thank you for your order, press button to pay.', 'unitpay').'</p>';
                echo $this->generate_form($order);
            }
    
            function callback(){
                header('Content-type:application/json;  charset=utf-8');
    
                $method = '';
                $params = array();
    
                if ((isset($_GET['params'])) && (isset($_GET['method'])) && (isset($_GET['params']['signature']))){
                    $params = $_GET['params'];
                    $method = $_GET['method'];
                    $signature = $params['signature'];
    
                    if (empty($signature)){
                        $status_sign = false;
                    }else{
                        $secret_key = $this->secret_key;
                        $status_sign = $this->verifySignature($params, $method, $secret_key);
                    }
                }else{
                    $status_sign = false;
                }
    
    //    $status_sign = true;
    
                if ($status_sign){
                    switch ($method) {
                        case 'check':
                            $result = $this->check( $params );
                            break;
                        case 'pay':
                            $result = $this->payment( $params );
                            break;
                        case 'error':
                            $result = $this->error( $params );
                            break;
                        default:
                            $result = array('error' =>
                                array('message' => __('Wrong method', 'unitpay'))
                            );
                            break;
                    }
                }else{
                    $result = array('error' =>
                        array('message' => __('Wrong signature', 'unitpay'))
                    );
                }
    
                echo json_encode($result);
                die();
            }
    
            function verifySignature($params, $method, $secret)
            {
                return $params['signature'] == $this->getSignature($method, $params, $secret);
            }
            function getSignature($method, array $params, $secretKey)
            {
                ksort($params);
                unset($params['sign']);
                unset($params['signature']);
                array_push($params, $secretKey);
                array_unshift($params, $method);
                return hash('sha256', join('{up}', $params));
            }
    
            function check( $params )
            {
                $order = new WC_Order( $params['account'] );
    
                if (!$order->id){
                    $result = array('error' =>
                        array('message' => __('Order not created', 'unitpay'))
                    );
                }else{
    
                    $sum = number_format($order->order_total, 2, '.','');
                    $currency = $order->get_order_currency();
    
                    if ((float)$sum != (float)$params['orderSum']) {
                        $result = array('error' =>
                            array('message' => __('Wrong order sum', 'unitpay'))
                        );
                    }elseif ($currency != $params['orderCurrency']) {
                        $result = array('error' =>
                            array('message' => __('Wrong order currency', 'unitpay'))
                        );
                    }
                    else{
                        $result = array('result' =>
                            array('message' => __('Request successfully', 'unitpay'))
                        );
                    }
                }
    
                return $result;
            }
    
            function payment( $params )
            {
    
                $order = new WC_Order( $params['account'] );
    
                if (!$order->id){
                    $result = array('error' =>
                        array('message' => __('Order not created', 'unitpay'))
                    );
                }else{
    
                    $sum = number_format($order->order_total, 2, '.','');
                    $currency = $order->get_order_currency();
    
                    if ((float)$sum != (float)$params['orderSum']) {
                        $result = array('error' =>
                            array('message' => __('Wrong order sum', 'unitpay'))
                        );
                    }elseif ($currency != $params['orderCurrency']) {
                        $result = array('error' =>
                            array('message' => __('Wrong order currency', 'unitpay'))
                        );
                    }
                    else{
    
                        $order->payment_complete();
    
                        $result = array('result' =>
                            array('message' => __('Request successfully', 'unitpay'))
                        );
                    }
                }
    
                return $result;
            }
    
            function error( $params )
            {
                $order = new WC_Order( $params['account'] );
    
                if (!$order){
                    $result = array('error' =>
                        array('message' => __('Order not created', 'unitpay'))
                    );
                }
                else{
                    $order->update_status('failed', __('Payment error', 'unitpay'));
                    $result = array('result' =>
                        array('message' => __('Request successfully', 'unitpay'))
                    );
                }
                return $result;
            }
    
        }
    
        /**
         * Add the gateway to WooCommerce
         **/
        function add_unitpay_gateway($methods){
            $methods[] = 'WC_UNITPAY';
            return $methods;
        }
    
        add_filter('woocommerce_payment_gateways', 'add_unitpay_gateway');
    }
    ?>

    я так понимаю, это должна быть какая-то функция, которая меняет стандартный функционал…
    В интернете искал и видел много подобных вопросов — но, как и вы, всех их авторов куда-то посылают… спасибо за помощь ((

    только одному Вам известных шлюзов

    например Unitpay, Робокасса..

    пробовал, почему-то не получается((

    своих мозгов мало, поэтому изначальный код для вставки дополнительных полей «нагуглил»:

    class trueMetaBox {
    	function __construct($options) {
    		$this->options = $options;
    		$this->prefix = $this->options['id'] .'_';
    		add_action( 'add_meta_boxes', array( &$this, 'create' ) );
    		add_action( 'save_post', array( &$this, 'save' ), 1, 2 );
    	}
    	function create() {
    		foreach ($this->options['post'] as $post_type) {
    			if (current_user_can( $this->options['cap'])) {
    				add_meta_box($this->options['id'], $this->options['name'], array(&$this, 'fill'), $post_type, $this->options['pos'], $this->options['pri']);
    			}
    		}
    	}
    	function fill(){
    		global $post; $p_i_d = $post->ID;
    		wp_nonce_field( $this->options['id'], $this->options['id'].'_wpnonce', false, true );
    		?>
    		<table class="form-table"><tbody><?php
    		foreach ( $this->options['args'] as $param ) {
    			if (current_user_can( $param['cap'])) {
    			?><tr><?php
    				if(!$value = get_post_meta($post->ID, $this->prefix .$param['id'] , true)) $value = $param['std'];
    				switch ( $param['type'] ) {
    					case 'text':{ ?>
    						<th scope="row"><label for="<?php echo $this->prefix .$param['id'] ?>"><?php echo $param['title'] ?></label></th>
    						<td>
    							<input name="<?php echo $this->prefix .$param['id'] ?>" type="<?php echo $param['type'] ?>" id="<?php echo $this->prefix .$param['id'] ?>" value="<?php echo $value ?>" placeholder="<?php echo $param['placeholder'] ?>" class="regular-text" /><br />
    							<span class="description"><?php echo $param['desc'] ?></span>
    						</td>
    						<?php
    						break;							
    					}
    					case 'number':{ ?>
    						<th scope="row"><label for="<?php echo $this->prefix .$param['id'] ?>"><?php echo $param['title'] ?></label></th>
    						<td>
    							<input name="<?php echo $this->prefix .$param['id'] ?>" type="<?php echo $param['type'] ?>" id="<?php echo $this->prefix .$param['id'] ?>" value="<?php echo $value ?>" placeholder="<?php echo $param['placeholder'] ?>" class="regular-text" /><br />
    							<span class="description"><?php echo $param['desc'] ?></span>
    						</td>
    						<?php
    						break;							
    					}					
    					case 'textarea':{ ?>
    						<th scope="row"><label for="<?php echo $this->prefix .$param['id'] ?>"><?php echo $param['title'] ?></label></th>
    						<td>
    							<textarea name="<?php echo $this->prefix .$param['id'] ?>" type="<?php echo $param['type'] ?>" id="<?php echo $this->prefix .$param['id'] ?>" value="<?php echo $value ?>" placeholder="<?php echo $param['placeholder'] ?>" class="large-text" /><?php echo $value ?></textarea><br />
    							<span class="description"><?php echo $param['desc'] ?></span>
    						</td>
    						<?php
    						break;							
    					}
    					case 'checkbox':{ ?>
    						<th scope="row"><label for="<?php echo $this->prefix .$param['id'] ?>"><?php echo $param['title'] ?></label></th>
    						<td>
    							<label for="<?php echo $this->prefix .$param['id'] ?>"><input name="<?php echo $this->prefix .$param['id'] ?>" type="<?php echo $param['type'] ?>" id="<?php echo $this->prefix .$param['id'] ?>"<?php echo ($value=='on') ? ' checked="checked"' : '' ?> />
    							<?php echo $param['desc'] ?></label>
    						</td>
    						<?php
    						break;							
    					}
    					case 'select':{ ?>
    						<th scope="row"><label for="<?php echo $this->prefix .$param['id'] ?>"><?php echo $param['title'] ?></label></th>
    						<td>
    							<label for="<?php echo $this->prefix .$param['id'] ?>">
    							<select name="<?php echo $this->prefix .$param['id'] ?>" id="<?php echo $this->prefix .$param['id'] ?>"><option>...</option><?php
    								foreach($param['args'] as $val=>$name){
    									?><option value="<?php echo $val ?>"<?php echo ( $value == $val ) ? ' selected="selected"' : '' ?>><?php echo $name ?></option><?php
    								}
    							?></select></label><br />
    							<span class="description"><?php echo $param['desc'] ?></span>
    						</td>
    						<?php
    						break;							
    					}
    				} 
    			?></tr><?php
    			}
    		}
    		?></tbody></table><?php
    	}
    	function save($post_id, $post){
    		if ( !wp_verify_nonce( $_POST[ $this->options['id'].'_wpnonce' ], $this->options['id'] ) ) return;
    		if ( !current_user_can( 'edit_post', $post_id ) ) return;
    		if ( !in_array($post->post_type, $this->options['post'])) return;
    		foreach ( $this->options['args'] as $param ) {
    			if ( current_user_can( $param['cap'] ) ) {
    				if ( isset( $_POST[ $this->prefix . $param['id'] ] ) && trim( $_POST[ $this->prefix . $param['id'] ] ) ) {
    					update_post_meta( $post_id, $this->prefix . $param['id'], trim($_POST[ $this->prefix . $param['id'] ]) );
    				} else {
    					delete_post_meta( $post_id, $this->prefix . $param['id'] );
    				}
    			}
    		}
    	}
    }

    ну так я все так и делаю, как учит Wp-Kama…
    … странное дело: сегодня просто включил компьютер и все заработало правильно, хотя ничего нового не сделал

    а вот нашел:
    #fancybox-content>div {overflow: hidden !important;}
    🙂

    Понятно что кастомными типами записей в wordpress можно сделать все, в том числе и базу документов с фильтром поиска… Вопрос: почему не получается найти готовое решение в виде плагина — задача в общем-то тривиальная? )

    Здравствуйте! Подскажите, Вам не удалось решить данную задачу с хранилищем документов и поиском?.. Столкнулся с точно такой же проблемой — вот уж не думал, что для WordPress нет подходящего плагина ((( WP-Filebase «более-менее» подходит кажется, но плагин больше не поддерживается, к тому же там нет расширенного поиска по полям.

    нет готового решения? жаль((

    в том-то и дело, что хостинг уже поменяли после этого (со всеми кракозябрами)… вся надежда на то, что можно со старого хостинга как-то бэкап вытащить…
    Просто я ещё надеялся что есть какая-нибудь утилита или онлайн сервис, которые могут все названия файлов автоматом назад перекодировать (ведь проблема-то достаточно распространенная)

    Бекапы с небитыми названиями есть?

    А если найдем файлы бэкапа, то что делать? там, в самом архиве, названия, по идее, нормальные должны быть?

    Бекапы с небитыми названиями есть?

    самого архива нет

Просмотр 15 ответов — с 1 по 15 (всего 179)