forum.bitel.ru http://forum.bitel.ru/ |
|
Изменение параметров в динамическом коде акшена http://forum.bitel.ru/viewtopic.php?f=22&t=10163 |
Страница 1 из 1 |
Автор: | e.fatoby [ 09 фев 2015, 17:06 ] |
Заголовок сообщения: | Изменение параметров в динамическом коде акшена |
Использую динамические экшены,ниже код который использую для проверки статуса договора при проведении платежа. Вопрос каким образом можно изменять значения передаваемых действию параметров в динамическом акшене? В данному случае мне требуется изменить значение парамтера summa. Запрос - bgbilling/executer?id=new&module=contract&summa=1000.0&pt=4&action=UpdateContractPayment&comment=&date=xxxx&cid=xxxx Найти API класса ActionUpdateContractPayment не удалось. public class PaymentStatusCheck extends bitel.billing.server.contract.action.ActionUpdateContractPayment { @Override public void doAction() throws SQLException, BGException { int cid = Integer.parseInt(getParameter( "cid", "0" )); ContractManager contManager = new ContractManager( con ); int status = contManager.getContractById(cid).getStatus(); if( status == 3 ) { throw new BGMessageException( "Договор отключен"); } super.doAction(); } } |
Автор: | stark [ 09 фев 2015, 17:22 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
у вас какая версия ? Если 6.1, то можно через web-сервис сделать. Через action скорее всего никак. сумма считывается там из request(метод getParameter), а него нет метода установки параметра(setParameter). |
Автор: | e.fatoby [ 12 фев 2015, 13:00 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
Спасибо за ответ.Да у нас 6,1 версия. Начали использовать web сервис.Есть некоторые проблемы с wsdl: Заходим: http://xxxxx/bgbilling/executer/ru.bite ... rvice?wsdl Получаем заголовок: <definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://common.balance.contract.kernel.bgbilling.bitel.ru/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://common.balance.contract.kernel.bgbilling.bitel.ru/" name="PaymentService"> Проблема в том что targetNamespace="http://common.balance.contract.kernel.bgbilling.bitel.ru/" не доступно(не резолвится даже) и мы не можем получить описание ни одного элемента,в частности элемента: <message name="paymentUpdate"> <part name="parameters" element="tns:paymentUpdate"/> </message> Который служит входным месаджем для процедуры: operation name="paymentUpdate"> <input wsam:Action="http://common.balance.contract.kernel.bgbilling.bitel.ru/PaymentService/paymentUpdateRequest" message="tns:paymentUpdate"/> <output wsam:Action="http://common.balance.contract.kernel.bgbilling.bitel.ru/PaymentService/paymentUpdateResponse" message="tns:paymentUpdateResponse"/> <fault message="tns:BGException" name="BGException" wsam:Action="http://common.balance.contract.kernel.bgbilling.bitel.ru/PaymentService/paymentUpdate/Fault/BGException"/> <fault message="tns:BGMessageException" name="BGMessageException" wsam:Action="http://common.balance.contract.kernel.bgbilling.bitel.ru/PaymentService/paymentUpdate/Fault/BGMessageException"/> </operation> Как быть? Информация о версии: Клиент: вер. 6.1.778 / 04.09.2014 12:33:01 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_67 Сервер: вер. 6.1.957 / 03.09.2014 18:51:16 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_67 bill: вер. 6.1.249 / 19.08.2014 12:44:47 card: вер. 6.1.199 / 22.08.2014 15:53:18 dba: вер. 6.1.161 / 18.06.2014 14:18:37 inet: вер. 6.1.583 / 03.09.2014 20:13:45 npay: вер. 6.1.178 / 04.09.2014 14:36:11 reports: вер. 6.1.188 / 01.09.2014 10:03:42 rscm: вер. 6.1.171 / 04.09.2014 12:33:11 voiceip: вер. 6.1.179 / 07.07.2014 13:57:50 Третьи стороны: |
Автор: | stark [ 12 фев 2015, 13:34 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
А вариант скрптом на событие платежа вешать корректирущий расход или платеж вам не подходит? |
Автор: | e.fatoby [ 12 фев 2015, 14:58 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
stark писал(а): А вариант скрптом на событие платежа вешать корректирущий расход или платеж вам не подходит? К сожалению нет,там получается должна идти конвертация.Учет в биллинге ведется в одной валюте,а информация о платеже идет другой. Впринципе рассматривается также вариант с использование JSON (насколько я понял в это случае также моджно использовать Динамические веб-сервисы),я пробывал: http://xxxxxxx/bgbilling/executer/json/ ... entService {"method" : "paymentUpdate", "user" : { "user" : "admin", "pswd" : "xxxxx" }, "params" : { "payment" : { "id" : -1 , "userId" : 0, "contractId" : 279, "typeId" : 1 , "date" : "2014-12-17" , "comment" : "test" , "sum" : 1000.0 } } } ОДнако выходит вот такая ошибка: {"status":"error","message":"ru.bitel.bgbilling.kernel.container.security.server.ServiceAction.isCoincide@60![8,15]: 'payment.getId() > 0;' attempting to call method on null","data":{}} Что не так? |
Автор: | dimOn [ 12 фев 2015, 15:17 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
вам надо переопределить веб-сервис на дин-коде, что-то сделать в нём (например, поменять сумму) и вызывать отнаследованный метод оригинального веб-сервиса, чтобы он дальше сделал свою работу. http://wiki.bgbilling.ru/index.php/%D0% ... 0%BE%D0%B2 |
Автор: | e.fatoby [ 12 фев 2015, 15:43 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
dimOn писал(а): вам надо переопределить веб-сервис на дин-коде, что-то сделать в нём (например, поменять сумму) и вызывать отнаследованный метод оригинального веб-сервиса, чтобы он дальше сделал свою работу. http://wiki.bgbilling.ru/index.php/%D0% ... 0%BE%D0%B2 Да это я понял.Проблема сейчас в другом,я выше описал:в самом обращении к сервису(через soap или json). |
Автор: | Amir [ 12 фев 2015, 16:12 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
Цитата: Проблема в том что targetNamespace="http://common.balance.contract.kernel.bgbilling.bitel.ru/" не доступно(не резолвится даже) и мы не можем получить описание ни одного элемента,в частности элемента: Он и не должен резолвиться, это просто имя (хотя сам не понимаю, почему принято писать http://). Все описание в самой wsdl.
|
Автор: | e.fatoby [ 12 фев 2015, 16:26 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
А все разобрался.Описание элементов вот здесь представлено: <xsd:schema> <xsd:import namespace="http://common.balance.contract.kernel.bgbilling.bitel.ru/" schemaLocation="http://xxxxxx/bgbilling/executer/ru.bitel.bgbilling.kernel.contract.balance/PaymentService?xsd=2"/> </xsd:schema> Спасибо. |
Автор: | Администратор [ 12 фев 2015, 16:39 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
Рекомендую использовать JSON-RPC. Он попроще выходит и меньше страдает в плане зависимостей, если вдруг сервис поменяется. Редактирование платежа там нормально работает, т.к. в BGCRM мы это API используем. |
Автор: | e.fatoby [ 13 фев 2015, 16:53 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
Администратор писал(а): Рекомендую использовать JSON-RPC. Он попроще выходит и меньше страдает в плане зависимостей, если вдруг сервис поменяется. Редактирование платежа там нормально работает, т.к. в BGCRM мы это API используем. Спасибо за ответ. Дело в том что при использовании JSON возникает проблема я выше описывал.Еще раз повторю: http://xxxxxxx/bgbilling/executer/json/ ... entService {"method" : "paymentUpdate", "user" : { "user" : "admin", "pswd" : "xxxxx" }, "params" : { "payment" : { "id" : -1 , "userId" : 0, "contractId" : 279, "typeId" : 1 , "comment" : "test" , "sum" : 1000.0 } } } ОДнако выходит вот такая ошибка: {"status":"error","message":"ru.bitel.bgbilling.kernel.container.security.server.ServiceAction.isCoincide@60![8,15]: 'payment.getId() > 0;' attempting to call method on null","data":{}} Как я понимаю проблема связана с доступами. В action/kernel.xml я изменил: <service id="90" name="PaymentService" operation="paymentUpdate" title="Изменение платежа" expression="payment.getId() gt 0"/> на <service id="90" name="PaymentService" operation="paymentUpdate" title="Изменение платежа" /> Но это не дало результата. Что не так? |
Автор: | e.fatoby [ 16 фев 2015, 15:23 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
Помогите плиз.В чем может быть проблема? |
Автор: | e.fatoby [ 18 фев 2015, 12:58 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
Пробую использовать SOAP - ниже пример на php.Однако запрос выполнить не получается.Подскажите в чем проблема. Ошибка: PHP Fatal error: Uncaught SoapFault exception: [S:Server] Ошибка параметров запроса. in soap.php:39 Stack trace: #0 /home/jeka/Desktop/soap.php(39): SoapClient->__call('paymentUpdate', Array) #1 /home/jeka/Desktop/soap.php(39): SoapClient->paymentUpdate(Object(PaymentUpdate)) #2 {main} thrown in soap.php on line 39 <?php class PaymentUpdate { public $payment; public $distribution; } class Payment { public $id; public $comment; public $contractId; public $date; public $sum; public $summa; public $timeChange; public $typeId; public $userId; } $wsdl = "http://xxxxxx:8080/bgbilling/executer/ru.bitel.bgbilling.kernel.contract.balance/PaymentService?wsdl"; $client = new SoapClient($wsdl,array('login'=>"admin",'password'=>"xxxxxx")); $pay = new PaymentUpdate(); $pay->payment = new Payment(); $pay->distribution = "test"; $pay->payment->id = -1; $pay->payment->comment = "test"; $pay->payment->contractId = 279; $pay->payment->summa = 100.0; $pay->payment->sum = 100.0; $pay->payment->typeId = 3; $pay->payment->userId = 0; var_dump($client->paymentUpdate($pay)); ?> |
Автор: | dimOn [ 18 фев 2015, 13:51 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
это возвращает сам метод, значит он вызвался. в запросе не хватает даты платежа |
Автор: | e.fatoby [ 18 фев 2015, 16:52 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
dimOn писал(а): это возвращает сам метод, значит он вызвался. в запросе не хватает даты платежа Спасибо большое, действительно даты платежа не хватало. Хотя в описании <xs:attribute name="date" type="xs:dateTime"/> не стоит use="required". Ну будем пользоваться значит soap.Жаль что c JSON-RPC вопрос так и остался открытым. Спасибо всем. |
Автор: | dimOn [ 18 фев 2015, 17:24 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
описания генерятся автоматически, required-параметры не используются там для этих случаев в коде |
Автор: | e.fatoby [ 12 мар 2015, 14:33 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
Добрый день всем! При использовании динамического сервиса платежа возникла проблемка: Платеж отрабатывает верно с учетом всех изменений,которые заложены в моем коде(конвертация в другую валюту),однако изменяется статус договора,даже на дебетовых договорах.Т.е если договор переведен в статус отключен,после проведения платежа,если баланс положительный он его активирует. Отключем динамический сервис,все работает ровно.В чем может быть проблема,куда копать? Информация о версии: Клиент: вер. 6.1.778 / 04.09.2014 12:33:01 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_67 Сервер: вер. 6.1.957 / 03.09.2014 18:51:16 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_67 bill: вер. 6.1.249 / 19.08.2014 12:44:47 card: вер. 6.1.199 / 22.08.2014 15:53:18 dba: вер. 6.1.161 / 18.06.2014 14:18:37 inet: вер. 6.1.583 / 03.09.2014 20:13:45 npay: вер. 6.1.178 / 04.09.2014 14:36:11 reports: вер. 6.1.188 / 01.09.2014 10:03:42 rscm: вер. 6.1.171 / 04.09.2014 12:33:11 voiceip: вер. 6.1.179 / 07.07.2014 13:57:50 |
Автор: | e.fatoby [ 16 мар 2015, 12:33 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
В чем же может быть проблема? |
Автор: | dimOn [ 16 мар 2015, 13:28 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
Я проблему не понял, проблема в чём? И главное причём тут динамический сервис, если код тот что выше - то он же ничего не делает, только статус проверяет? |
Автор: | e.fatoby [ 16 мар 2015, 17:21 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
При использовании дебетовых договоров,если статус договора перевети в состояние отключен,то независимо от изменения его баланса(платеж или расход) и его значения(положительный или отрицательный) этот статус не меняется.Для примера у Вас баланс отрицательный,статус договора отключен(выставлен вручную),вы делаете пополнение,баланс становится положительным,значение статуса договора не меняется.Это стандартное поведение биллинга. Так вот при включении динамического сервиса,при изменении баланса в положительную сторону(платеж),статус договора становится активным автоматически,независимо от того что он был установлен вручную в статус отключен. Выше приведенный код более не используется - это был динамический метод,а я стал использовать сервис. Вот код: package ru.bitel.bgbilling; import java.math.BigDecimal; import java.util.Date; import javax.jws.WebService; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.common.BGMessageException; import ru.bitel.bgbilling.kernel.contract.balance.common.PaymentService; import ru.bitel.common.Utils; import ru.bitel.bgbilling.kernel.contract.balance.common.bean.Payment; import bitel.billing.server.contract.bean.ContractManager; import java.lang.reflect.*; import java.sql.*; import java.math.RoundingMode; @WebService(endpointInterface = "ru.bitel.bgbilling.kernel.contract.balance.common.PaymentService") public class PaymentServiceImpl extends ru.bitel.bgbilling.kernel.contract.balance.server.PaymentServiceImpl implements PaymentService { @Override public java.util.List<java.lang.Integer> paymentUpdate(Payment payment, java.lang.String distribution) throws BGException { int cid = payment.getContractId(); int uid = payment.getUserId(); int tip = payment.getTypeId(); String comment = payment.getComment(); Connection con = getConnection(); ContractManager contManager = new ContractManager( con ); int status = contManager.getContractById(cid).getStatus(); int attrId = 1; Float courseInt = 1.00f; try { PreparedStatement ps = con.prepareStatement( "SELECT comment FROM entity_spec_attr where id = ?;"); ps.setInt(1,attrId); ResultSet rs = ps.executeQuery(); while (rs.next()) { courseInt = Float.parseFloat( rs.getString("comment") ); } } catch (SQLException ex) { throw new BGMessageException( "SQL проблема"); } if( status == 3 ) { throw new BGMessageException( "Договор отключен"); } if ( tip == 4 ) { BigDecimal course = new BigDecimal(courseInt); payment.setSum( payment.getSum().divide(course,2,RoundingMode.HALF_UP) ); } return super.paymentUpdate(payment,distribution); } } аттрибуты под id=1 я использую для хранения курса из таблицы entity_spec_attr |
Автор: | dimOn [ 16 мар 2015, 19:31 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
Цитата: Так вот при включении динамического сервиса,при изменении баланса в положительную сторону(платеж),статус договора становится активным автоматически,независимо от того что он был установлен вручную в статус отключен. Так, но постойте - у вас же тут вообще вот такой есть код: Код: if( status == 3 ) { throw new BGMessageException( "Договор отключен"); } т.е. если этот веб-сервис СРАБАТЫВАЕТ и договор ОТКЛЮЧЕН - там вообще просто рисуется сообщение и ничего дальше не делается. Платёж не должен даже апдейтится. Т.е. платёж не добавляется же? Или как? |
Автор: | e.fatoby [ 18 мар 2015, 18:45 ] |
Заголовок сообщения: | Re: Изменение параметров в динамическом коде акшена |
не добовляется,просто выбрасывает ошибку и все. А да я ошибся когда описывал.Верно так: при статусе Закрыт(3),он выдает ошибку и ничего не делает. А при статусе отключен попоняется баланс,как положено. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |