9ответ(ов) в теме
Aleks
не в сети 10 месяцев
На сайте с 06.04.2016
Участник
Тем 68
Сообщения 330
1
10:00
Версия WP-Recall: 16.6.17

Здравствуйте! Помогите разобраться. пишу дополнение подключение платёжной системы, вот по этому примеру

Вы не можете просматривать опубликованные ссылки

в настройках магазина всё отображается и подключается.
При пополнений счёта или оплаты товара счёт не пополняется автоматом, но при этом платёж успешно проходит и перебрасывает как положено на страницу успешной оплаты. Подскажите что не так.

Вот код


	add_action('init','rcl_add_Advcash_payment');

	function rcl_add_Advcash_payment(){
		$pm = new Rcl_Advcash_Payment();
		$pm->register_payment('Advcash');
	}

	class Rcl_Advcash_Payment extends Rcl_Payment{

		public $form_pay_id;

		function register_payment($form_pay_id){
			$this->form_pay_id = $form_pay_id;
			parent::add_payment($this->form_pay_id, array(
				'class'=>get_class($this),
				'request'=>'get_param',
				'name'=>'Advcash',
				'image'=>rcl_addon_url('assets/advcash.jpg',__FILE__)
			));
			if(is_admin()) $this->add_options();
		}

		function add_options(){
			add_filter('rcl_pay_option',(array($this,'options')));
			add_filter('rcl_pay_child_option',(array($this,'child_options')));
		}

		function options($options){
			$options[$this->form_pay_id] = __('Advcash','rcl');
			return $options;
		}

		function child_options($child){

			$opt = new Rcl_Options();

			$child .= $opt->child(
				array(
					'name'=>'connect_sale',
					'value'=>$this->form_pay_id
				),
				array(
					$opt->title(__('Настройки подключения "Advcash"','rcl')),
					$opt->label(__('Название магазина или компании)','rcl')),
					$opt->option('text',array('name'=>'ac_name')),
					$opt->notice(__('Название компании указанное в настройках на сайте Advcash','rcl')),
					$opt->label(__('Логин аккаунта (E-mail)','rcl')),
					$opt->option('text',array('name'=>'ac_login')),
					$opt->label(__('Ключ','rcl')),
					$opt->option('text',array('name'=>'ac_sekret'))
				)
			);

			return $child;
		}
   

        function pay_form($data){
        	global $rmag_options;
            $desc = ($data->description)? $data->description: 'Платеж от '.get_the_author_meta('user_email',$data->user_id);
        
        $baggage_data = ($data->baggage_data)? $data->baggage_data: false;

        //получаем данные из настроек подключения
        	$login = $rmag_options['ac_login'];
        //формируем описание платежа по его типу
        	$desc = ($data->pay_type==1)? 'Пополнение личного счета': 'Оплата заказа';
        	$currency = $rmag_options['primary_cur'];
        	$ac_name = $rmag_options['ac_name'];
        	$sekret = $rmag_options['ac_sekret'];
            $coment =($data->pay_type==1)? 'Пополнение личного счета': 'Оплата заказа';
        //формируем массив данных полей формы платежа, 
        //где ключами массива являются имена параметров отправляемых 
        //в платежную систему, а значениями - отправляемые данные
        	$fields = array(
        		'ac_account_email'=>$login,
        		'ac_sci_name'=>$ac_name,
        		'ac_amount'=>$data->pay_summ,
        		'ac_order_id'=>$data->pay_id,
        		'ac_currency'=>$currency,
        		'ac_sign'=>$sekret,
        		'description'=>$desc,
        		''=>$data->user_id,
        		''=>$data->pay_type,
        		''=>$baggage_data,
                'ac_comments'=>$coment

        	);

        //Третьим параметром указываем куда именно будут отправляться данные платежа
        	$form = parent::form($fields,$data,"https://wallet.advcash.com/sci/");

        	return $form;
        }

        function result($data){
        	global $rmag_options;
            $ac_sekret = $rmag_options['ac_sekret'];
        
        define(strtoupper(md5($ac_sekret)));

        //получаем необходимые данные от платежной системы
        	$data->pay_summ = $_REQUEST['ac_amount'];
        	$data->pay_id = $_REQUEST['ac_order_id'];
        	$data->user_id = $_REQUEST[''];
        	$data->pay_type = $_REQUEST[''];
        	$data->baggage_data = $_REQUEST[''];
            $data->ac_sign =$_REQUEST['ac_sekret'];


        //формируем хеш, согласно алгоритма платежной системы
        	$sign = strtoupper(hash( 'sha256',
        		$_REQUEST['ac_sci_name']
        		. $_REQUEST['ac_account_email']
        		. $_REQUEST['ac_amount']
        		. $_REQUEST['ac_order_id']
        		. $_REQUEST['ac_sign']
        	));

        //сверяем полученный хеш и присланный
        	if($sign!=$_REQUEST['hash']){
            //если хеш не совпадает, то отправляем письмо об ошибке
            //и прекращаем работу скрипта
        		rcl_mail_payment_error($sign);
        		exit;
        	}

        //Проверяем наличие платежа
        //и если его нет, то произвоидим платеж
        	if(!parent::get_pay($data)){
        		parent::insert_pay($data);
                exit ($_POST['ac_order_id'] . '|success');
        	}
        }

        function success(){
        	global $rmag_options;
        //получаем ИД платежа и ИД пользователя в массив
        	$data = array(
        		'pay_id' => $_REQUEST['ac_order_id'],
        		'user_id' => $_REQUEST['']
        	);
        //Передаем полученный массив в родительский класс на проверку
        	if(parent::get_pay((object)$data)){
            //Если платеж присутствует, то перенаправляем пользователя
            //на страницу с текстом об удачной оплате
        		wp_redirect(get_permalink($rmag_options['page_successfully_pay'])); exit;
        	} else {
        		wp_die('Платеж не найден в базе данных!');
        	}

        }
      }
    } 

Редакции сообщения
21.09.2017 10:06AleksПричина: не указано
21.09.2017 10:15Андрей CSПричина: не указано
0
Вова (Otshelnik-Fm)
не в сети 3 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18654
2
10:12

Код вставляем кнопкой "Многострочный код"!

0
Андрей CS
не в сети 2 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16928
3
10:22

'request'=>'get_param',

вместо get_param надо вставить наименование присылаемого платежной системой параметра во время оповещения вашего сервера, т.е. любого одного, который присылается на RESULT. В вашем случае, можно использовать ac_order_id, если этот параметр действительно шлется.
''=>$data->user_id,
''=>$data->pay_type,
''=>$baggage_data,

тут не понял что происходит, параметры должны иметь имена, смотрите в описании АПИ этой платежной системы, как передавать пользовательские параметры, должны обязательно передаваться ИД пользователя и тип платежа.
$data->user_id = $_REQUEST[''];
$data->pay_type = $_REQUEST[''];
$data->baggage_data = $_REQUEST[''];

тут таже история
$data = array(
'pay_id' => $_REQUEST['ac_order_id'],
'user_id' => $_REQUEST['']
);

и здесь $_REQUEST[''] не должен быть пустым

0
Aleks
не в сети 10 месяцев
На сайте с 06.04.2016
Участник
Тем 68
Сообщения 330
4
13:00

Добрый день!
В прошлый раз не было времени закончить, решил сегодня продолжить. Помогите разобраться, так и не получается добиться результата автоматического начисления.
Сейчас добился что уже приходит письмо об неудачной оплате, сам платеж через платёжную систему поступил нормально.
вот содержимое письма:

ac_src_wallet - U737340335739
ac_dest_wallet - U818561063395
ac_amount - 1.00
ac_merchant_amount - 1.00
ac_merchant_currency - USD
ac_fee - 0.00
ac_buyer_amount_without_commission - 1.00
ac_buyer_amount_with_commission - 1.00
ac_buyer_currency - USD
ac_transfer - 7611525a-9ad6-4cff-b45a-0ee602567a6e
ac_sci_name - ProxyBrain_test
ac_start_date - 2017-09-27 09:25:09
ac_order_id - 1506515075
ac_ps - ADVANCED_CASH
ac_transaction_status - COMPLETED
ac_buyer_email - alexx15830@yandex.ru
ac_buyer_verified - false
ac_hash - 2bbfefce89fbd699cde54f73b896c3f1c59a40eb1a8e4b3da82b16193f33084d
USER_ID - 2
Cформированный хеш - B56F52342FB1CF1C80B5DBAEF6B57D6F
Текущий пост - 136
RESULT - 136
SUCCESS - 138

Я так понимаю что у меня HASH не совпадает. вот часть кода:

 function pay_form($data){
                global $rmag_options;

                $pm_account = $rmag_options['pm_account'];
                $pm_name = $rmag_options['pm_name'];
                $currency = $rmag_options['primary_cur'];

                $fields = array(
                    'ac_sci_name'=>$pm_account,
                    'ac_account_email'=>$pm_name,
                    'ac_order_id'=>$data->pay_id,
                    'ac_amount'=>$data->pay_summ,
                    'ac_currency'=>$currency,
                    'ac_hash'=>$data->pay_type,
                    'USER_ID'=>$data->user_id,
                );

                $form = parent::form($fields,$data,"https://wallet.advcash.com/sci/");

                return $form;
            }

            function result($data){
                global $rmag_options;

                $pm_phrase = $rmag_options['pm_phrase'];

                define('ALTERNATE_PHRASE_HASH', strtoupper(md5($pm_phrase)));

                $array = array(
                    $_REQUEST['ac_order_id'],
                    $_REQUEST['ac_account_email'],
                    $_REQUEST['ac_amount'],
                    $_REQUEST['ac_currency'],
                    ALTERNATE_PHRASE_HASH,
                    $_REQUEST['TIMESTAMPGMT']
                );

                $hash = strtoupper(md5(implode(':',$array)));

                if($hash!=$_REQUEST['ac_HASH']){
                    rcl_mail_payment_error($hash);           
                    die('HASH failed.');
                }

                $data->pay_summ = $_REQUEST['ac_amount'];
                $data->pay_id = $_REQUEST['ac_order_id'];
                $data->user_id = $_REQUEST['USER_ID'];
                $data->pay_type = $_REQUEST['ac_hash'];

                if(!parent::get_pay($data)){
                    parent::insert_pay($data);
                    die('PAYMENT OK.');
                }
            }

Что не так делаю?

Вот здесь инструкция по настройкам если нужна:

Вы не можете просматривать опубликованные ссылки
Редакции сообщения
27.09.2017 13:02AleksПричина: не указано
0
Андрей CS
не в сети 2 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16928
5
15:42

начинать надо с формирования формы платежа, там есть несколько вопросов, например, тут

'ac_account_email'=>$pm_name,

почему ac_account_email? ведь $pm_name никакой не email
и тут
'ac_hash'=>$data->pay_type,

что за хеш? там передается тип платежа. Зачем вы запутываете сами себя давая неверные наименования передаваемым параметрам?
Секретный хеш из данных полей не формируете при передаче в платежную систему, это минус, но может у вас данная проверка в настройках отключена.
При получении данных на страницу RESULT хеш уже проверяется, но что то мне подсказывает, что неверно. Как я понял, для проверки хеша надо склеивать значения всех параметров формы платежа вместе с секретным ключом, а у вас в проверке не участвуют как минимум два параметра: 'ac_hash' и 'USER_ID', но они же передаются с платежной формы и видимо возвращаются на RESULT, значит и в формировании хеша тоже участвуют, надо дополнить ими массив данных при проверке подписи:
$array = array(
	$_REQUEST['ac_order_id'],
	$_REQUEST['ac_account_email'],
	$_REQUEST['ac_amount'],
	$_REQUEST['ac_currency'],
	$_REQUEST['USER_ID'],
	$_REQUEST['ac_hash'],
	ALTERNATE_PHRASE_HASH,
	$_REQUEST['TIMESTAMPGMT']
);

$hash = strtoupper(md5(implode(':',$array)));

видимо как то так, проверяйте

0
Aleks
не в сети 10 месяцев
На сайте с 06.04.2016
Участник
Тем 68
Сообщения 330
6
17:12

Андрей CS сказал(а)
начинать надо с формирования формы платежа, там есть несколько вопросов, например, тут

'ac_account_email'=>$pm_name,

почему ac_account_email? ведь $pm_name никакой не email

ac_account_email -это логин входа в платежную систему

'ac_hash'=>$data->pay_type,

Здесь я сам не могу понять какие параметры нужны для pay_type

проверку подписи отключил в настройках платёжной системы.

Вот так выглядит форма которая сгенерирована в системе чтоб было понятно откуда ac_account_email

<form method="post" action="https://wallet.advcash.com/sci/">
         <input type="hidden" name="ac_account_email" value="test@mail.ru" />
         <input type="hidden" name="ac_sci_name" value="ProxyBrain_test" />
         <input type="text" name="ac_amount" value="1.00" />
         <input type="text" name="ac_currency" value="USD" />
         <input type="text" name="ac_order_id" value="123456789" />
         <input type="text" name="ac_sign" value="c5aec96d51fa363e5f07d80483e7f06f04dbcf0a982fe5de3dc7255f3c2ba2a8" />
         <!-- Optional Fields -->
         <input type="hidden" name="ac_success_url" value="http://test.ru/uspesh" />
         <input type="hidden" name="ac_success_url_method" value="GET" />
         <input type="hidden" name="ac_fail_url" value="http://test.ru/fail" />
         <input type="hidden" name="ac_fail_url_method" value="GET" />
         <input type="hidden" name="ac_status_url" value="http://test.ru/success" />
         <input type="hidden" name="ac_status_url_method" value="GET" />
         <input type="text" name="ac_comments" value="Comment" />
         <input type="submit" />
</form>

Формирование цифровой подписи
Для генерирования цифровой подписи (ac_sign) Вам необходимо объединить
следующие параметры Формы «Запрос платежа» с паролем SCI (secret),
указанным при создании SCI.
ac_account_email:ac_sci_name:ac_amount:ac_currency:secret:ac_order_id
Разделитель ":".
ac_sign является SHA-256 hash в строке, сгенерированной выше.

Здесь уже пробовал по разному ничего не выходит.

0
SIR
не в сети 4 года
На сайте с 09.06.2017
Участник
Тем 34
Сообщения 359
7
19:24

Aleks сказал(а)

Андрей CS сказал(а)
начинать надо с формирования формы платежа, там есть несколько вопросов, например, тут

'ac_account_email'=>$pm_name,

почему ac_account_email? ведь $pm_name никакой не email

ac_account_email -это логин входа в платежную систему

'ac_hash'=>$data->pay_type,

Здесь я сам не могу понять какие параметры нужны для pay_type

проверку подписи отключил в настройках платёжной системы.

Вот так выглядит форма которая сгенерирована в системе чтоб было понятно откуда ac_account_email

<form method="post" action="https://wallet.advcash.com/sci/">
         <input type="hidden" name="ac_account_email" value="test@mail.ru" />
         <input type="hidden" name="ac_sci_name" value="ProxyBrain_test" />
         <input type="text" name="ac_amount" value="1.00" />
         <input type="text" name="ac_currency" value="USD" />
         <input type="text" name="ac_order_id" value="123456789" />
         <input type="text" name="ac_sign" value="c5aec96d51fa363e5f07d80483e7f06f04dbcf0a982fe5de3dc7255f3c2ba2a8" />
         <!-- Optional Fields -->
         <input type="hidden" name="ac_success_url" value="http://test.ru/uspesh" />
         <input type="hidden" name="ac_success_url_method" value="GET" />
         <input type="hidden" name="ac_fail_url" value="http://test.ru/fail" />
         <input type="hidden" name="ac_fail_url_method" value="GET" />
         <input type="hidden" name="ac_status_url" value="http://test.ru/success" />
         <input type="hidden" name="ac_status_url_method" value="GET" />
         <input type="text" name="ac_comments" value="Comment" />
         <input type="submit" />
</form>

Формирование цифровой подписи
Для генерирования цифровой подписи (ac_sign) Вам необходимо объединить
следующие параметры Формы «Запрос платежа» с паролем SCI (secret),
указанным при создании SCI.
ac_account_email:ac_sci_name:ac_amount:ac_currency:secret:ac_order_id
Разделитель ":".
ac_sign является SHA-256 hash в строке, сгенерированной выше.

Здесь уже пробовал по разному ничего не выходит.

Вот здесь небольшое видео по настройке

Вы не можете просматривать опубликованные ссылки
0
Aleks
не в сети 10 месяцев
На сайте с 06.04.2016
Участник
Тем 68
Сообщения 330
8
19:56

SIR сказал(а)

Вот здесь небольшое видео по настройке Youtube

Уже смотрел и не раз. там просто форма, а здесь автоматическое зачисление, для моих целей не подходит.

0
SIR
не в сети 4 года
На сайте с 09.06.2017
Участник
Тем 34
Сообщения 359
9
22:34

Aleks сказал(а)

SIR сказал(а)

Вот здесь небольшое видео по настройке Youtube

Уже смотрел и не раз. там просто форма, а здесь автоматическое зачисление, для моих целей не подходит.

Тихо подозреваю, что скоро появится плагин в магазине:)

0
Вы не имеете права на публикацию сообщений в этой теме