BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 23 июн 2025, 19:06

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 22 ] 
Автор Сообщение
СообщениеДобавлено: 09 фев 2015, 17:06 
Не в сети

Зарегистрирован: 18 июн 2012, 12:08
Сообщения: 68
Карма: 0
Использую динамические экшены,ниже код который использую для проверки статуса договора при проведении платежа.
Вопрос каким образом можно изменять значения передаваемых действию параметров в динамическом акшене?
В данному случае мне требуется изменить значение парамтера 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();
}

}


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09 фев 2015, 17:22 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
у вас какая версия ? Если 6.1, то можно через web-сервис сделать.

Через action скорее всего никак. сумма считывается там из request(метод getParameter), а него нет метода установки параметра(setParameter).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 фев 2015, 13:00 
Не в сети

Зарегистрирован: 18 июн 2012, 12:08
Сообщения: 68
Карма: 0
Спасибо за ответ.Да у нас 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


Третьи стороны:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 фев 2015, 13:34 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
А вариант скрптом на событие платежа вешать корректирущий расход или платеж вам не подходит?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 фев 2015, 14:58 
Не в сети

Зарегистрирован: 18 июн 2012, 12:08
Сообщения: 68
Карма: 0
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":{}}
Что не так?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 фев 2015, 15:17 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
вам надо переопределить веб-сервис на дин-коде, что-то сделать в нём (например, поменять сумму) и вызывать отнаследованный метод оригинального веб-сервиса, чтобы он дальше сделал свою работу.
http://wiki.bgbilling.ru/index.php/%D0% ... 0%BE%D0%B2

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 фев 2015, 15:43 
Не в сети

Зарегистрирован: 18 июн 2012, 12:08
Сообщения: 68
Карма: 0
dimOn писал(а):
вам надо переопределить веб-сервис на дин-коде, что-то сделать в нём (например, поменять сумму) и вызывать отнаследованный метод оригинального веб-сервиса, чтобы он дальше сделал свою работу.
http://wiki.bgbilling.ru/index.php/%D0% ... 0%BE%D0%B2

Да это я понял.Проблема сейчас в другом,я выше описал:в самом обращении к сервису(через soap или json).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 фев 2015, 16:12 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Цитата:
Проблема в том что targetNamespace="http://common.balance.contract.kernel.bgbilling.bitel.ru/" не доступно(не резолвится даже) и мы не можем получить описание ни одного элемента,в частности элемента:
Он и не должен резолвиться, это просто имя (хотя сам не понимаю, почему принято писать http://). Все описание в самой wsdl.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 фев 2015, 16:26 
Не в сети

Зарегистрирован: 18 июн 2012, 12:08
Сообщения: 68
Карма: 0
А все разобрался.Описание элементов вот здесь представлено:
<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 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Рекомендую использовать JSON-RPC. Он попроще выходит и меньше страдает в плане зависимостей, если вдруг сервис поменяется. Редактирование платежа там нормально работает, т.к. в BGCRM мы это API используем.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 13 фев 2015, 16:53 
Не в сети

Зарегистрирован: 18 июн 2012, 12:08
Сообщения: 68
Карма: 0
Администратор писал(а):
Рекомендую использовать 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="Изменение платежа" />
Но это не дало результата.
Что не так?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 фев 2015, 15:23 
Не в сети

Зарегистрирован: 18 июн 2012, 12:08
Сообщения: 68
Карма: 0
Помогите плиз.В чем может быть проблема?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2015, 12:58 
Не в сети

Зарегистрирован: 18 июн 2012, 12:08
Сообщения: 68
Карма: 0
Пробую использовать 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));
?>


Последний раз редактировалось e.fatoby 18 фев 2015, 16:53, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2015, 13:51 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
это возвращает сам метод, значит он вызвался.
в запросе не хватает даты платежа

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2015, 16:52 
Не в сети

Зарегистрирован: 18 июн 2012, 12:08
Сообщения: 68
Карма: 0
dimOn писал(а):
это возвращает сам метод, значит он вызвался.
в запросе не хватает даты платежа

Спасибо большое, действительно даты платежа не хватало.
Хотя в описании <xs:attribute name="date" type="xs:dateTime"/>
не стоит use="required".
Ну будем пользоваться значит soap.Жаль что c JSON-RPC вопрос так и остался открытым.
Спасибо всем.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2015, 17:24 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
описания генерятся автоматически, required-параметры не используются там для этих случаев в коде

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 мар 2015, 14:33 
Не в сети

Зарегистрирован: 18 июн 2012, 12:08
Сообщения: 68
Карма: 0
Добрый день всем!
При использовании динамического сервиса платежа возникла проблемка:
Платеж отрабатывает верно с учетом всех изменений,которые заложены в моем коде(конвертация в другую валюту),однако изменяется статус договора,даже на дебетовых договорах.Т.е если договор переведен в статус отключен,после проведения платежа,если баланс положительный он его активирует.
Отключем динамический сервис,все работает ровно.В чем может быть проблема,куда копать?

Информация о версии:

Клиент: вер. 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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 мар 2015, 12:33 
Не в сети

Зарегистрирован: 18 июн 2012, 12:08
Сообщения: 68
Карма: 0
В чем же может быть проблема?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 мар 2015, 13:28 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Я проблему не понял, проблема в чём? И главное причём тут динамический сервис, если код тот что выше - то он же ничего не делает, только статус проверяет?

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 мар 2015, 17:21 
Не в сети

Зарегистрирован: 18 июн 2012, 12:08
Сообщения: 68
Карма: 0
При использовании дебетовых договоров,если статус договора перевети в состояние отключен,то независимо от изменения его баланса(платеж или расход) и его значения(положительный или отрицательный) этот статус не меняется.Для примера у Вас баланс отрицательный,статус договора отключен(выставлен вручную),вы делаете пополнение,баланс становится положительным,значение статуса договора не меняется.Это стандартное поведение биллинга.
Так вот при включении динамического сервиса,при изменении баланса в положительную сторону(платеж),статус договора становится активным автоматически,независимо от того что он был установлен вручную в статус отключен.
Выше приведенный код более не используется - это был динамический метод,а я стал использовать сервис.
Вот код:
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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 мар 2015, 19:31 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Цитата:
Так вот при включении динамического сервиса,при изменении баланса в положительную сторону(платеж),статус договора становится активным автоматически,независимо от того что он был установлен вручную в статус отключен.

Так, но постойте - у вас же тут вообще вот такой есть код:
Код:
if( status == 3 )
{
throw new BGMessageException( "Договор отключен");
}

т.е. если этот веб-сервис СРАБАТЫВАЕТ и договор ОТКЛЮЧЕН - там вообще просто рисуется сообщение и ничего дальше не делается. Платёж не должен даже апдейтится.
Т.е. платёж не добавляется же? Или как?

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 мар 2015, 18:45 
Не в сети

Зарегистрирован: 18 июн 2012, 12:08
Сообщения: 68
Карма: 0
не добовляется,просто выбрасывает ошибку и все.
А да я ошибся когда описывал.Верно так: при статусе Закрыт(3),он выдает ошибку и ничего не делает.
А при статусе отключен попоняется баланс,как положено.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.067s | 61 Queries | GZIP : On ]