В настройках есть "время жизни заказа" но при использовании его с мерчатом получаются нестыковки, пример:
Я оформил заказ, перешел на страницу оплаты агрегатора и не оплачиваю к примеру больше часа (который установлены в настройках),
на сайте удаляется заказ, но я могу оплатить его т.к. не прописан в мерчанте параметр WMI_EXPIRED_DATE, и таким образом одни и те же места будут куплены несколькими клиентами.
Прошу подсказать как прописать его правильно?
Я так понимаю тут надо вписать
$fields = array(
'WMI_EXPIRED_DATE'=> Срок истечения оплаты. Дата указывается в западно-европейском часовом поясе (UTC+0) и должна быть больше текущей (ISO 8601), например: 2013-10-29T11:39:26.(ЭТО С САЙТА ИНФА
)
'WMI_MERCHANT_ID'=>$merchant_id,
....
Очень надо эту проверку так как переписал код под свои нужды чтоб проверка не в часах а в минутах была.
Еще вопрос есть ли ченджлог по версиям плагина где-то?
Могу я скачать последнюю версию плагина не обновляя его на сайте?
Просто не ставил еще плагин "codeseller-updater" не знаю как он работает с обновлениями, дает ссылку на файл последней версии или обновляет сразу.
Про все тех вопросы не отвечу, а по codeseller-updater - обновит сразу. Поэтому проще лично для вас завести поддомен. Обновить его там, а потом по ftp скачать к себе и посмотреть изменения.
Увы change log-а нет, и как вы будете его в дальнейшем обновлять - ума не приложу. В ядро лезть нельзя. Вся дальнейшая работоспособность на вашей совести.
Решать возникающие проблемы при вашем вмешательстве - только если вы вчистую установите оригинальный и последней версии Wp Reservation Place
А зачем именно через WMI_EXPIRED_DATE? Такой вариант тоже может не подойти, тк заказ может быть оплачен несколькими пользователями. Лучше проверяйте наличие или оплату заказа в момент оплаты:
сразу после
$data->pay_summ = $_REQUEST['LMI_PAYMENT_AMOUNT']; $data->pay_id = $_REQUEST['LMI_PAYMENT_NO']; $data->email_user = $_REQUEST['FIELD_1']; $data->pay_type = $_REQUEST['FIELD_2'];
добавить
$order = wpr_get_order($data->pay_id); if(!$order||$order[0]->res_status!=0){ //заказа не существует или уже оплачен exit; }
Это код из вебмани.
$data->pay_summ = $_REQUEST['LMI_PAYMENT_AMOUNT'];
$data->pay_id = $_REQUEST['LMI_PAYMENT_NO'];
$data->email_user = $_REQUEST['FIELD_1'];
$data->pay_type = $_REQUEST['FIELD_2'];
Мне для Единой Кассы надо.
ПС: ну еслиб я силен так как вы был, я б не покупал плагин, сам бы написал )))
сорри, вот код для ЕК:
сразу после:
$data->pay_summ = $_REQUEST["WMI_PAYMENT_AMOUNT"]; $data->pay_id = $_REQUEST["WMI_PAYMENT_NO"]; $data->email_user = $_REQUEST["USER_ID"]; $data->pay_type = $_REQUEST["TYPE_PAY"];
добавить
$order = wpr_get_order($data->pay_id); if(!$order||$order[0]->res_status!=0){ //заказа не существует или уже оплачен $this->print_answer("Retry", "Заказа не существует или уже оплачен"); }
Результат: Спасибо! Оплата прошла успешно.
Еще раз объясню последовательность:
я заказываю билет, заполняю форму, перехожу в агрегатор по ссылке оплатить, жду когда заказ удалится на странице "заказы" в админке и продолжаю оформление и он пропускает оплатить.
Этот код на каком этапе проверку делает, уже в агрегаторе или еще на сайте?
$order = wpr_get_order($data->pay_id);
if(!$order||$order[0]->res_status!=0){
//заказа не существует или уже оплачен
$this->print_answer("Retry", "Заказа не существует или уже оплачен");
}
эта проверка проверяется на сайте перед тем как агрегатор проведет оплату, он посылает на сайт запрос с данными заказа, если сайт возвращает положительный ответ, то агрегатор продолжает процедуру оплаты, если же сайт возвращает отрицательный ответ, то процесс оплаты должен прерываться.
Не срабатывет ваш код.
Если прописать
$fields = array(
'WMI_MERCHANT_ID'=>$merchant_id,
'WMI_PAYMENT_AMOUNT'=>$data->pay_summ.'.00',
'WMI_CURRENCY_ID'=>$code_cur,
'WMI_PAYMENT_NO'=>$data->pay_id,
'WMI_DESCRIPTION'=>$desc,
'WMI_EXPIRED_DATE'=>'2016-10-19 16:31:00',
'WMI_SUCCESS_URL'=>get_permalink($wrp_options['page_successfully_pay']),
'WMI_FAIL_URL'=>get_permalink($wrp_options['page_fail_pay']),
'USER_ID'=>$data->email_user,
'TYPE_PAY'=>$data->pay_type,
'CMS'=>30
);
тогда при переходе в агрегатор не пропускает уже вот скрин предупреждения об ошибке
значит надо доводить, чтобы код заработал.
Я же говорю WMI_EXPIRED_DATE не выход, если в течении этого времени платежную форму открою несколько пользователей, то оплата пройдет для них всех на одни и те же места.
Проблемы для работы моей проверки я не вижу, она проверяет наличие заказа и его статус, если оплата прошла, значит заказ был в наличии. Выложите код файла в котором вносили изменения тут
посмотрю
Закомментировал что я вписывал: // 'WMI_EXPIRED_DATE'=>'2016-10-19 16:31:00', // pay_id); if(!$order||$order[0]->res_status!=0){ //заказа не существует или уже оплачен $this->print_answer("Retry", "Заказа не существует или уже оплачен"); }
ок, давайте сделаем так как вам надо.
значение времени существования заказа можно получить так
$order = wpr_get_order($data->pay_id); $hours = (get_option('wprp_order_live_hours'))? get_option('wprp_order_live_hours'): 2; $expired = date("Y-m-D H:i:s", strtotime($order[0]->timeaction) + ($hours*3600));
правильность формирования даты можно проверить в коде формы платежа