k-shym / urfa-client
基于api.xml的NetUp UTM5通用PHP计费系统客户端
2.1.0
2023-07-09 14:31 UTC
Requires
- php: >=5.4
- ext-filter: *
- ext-hash: *
- ext-json: *
- ext-openssl: *
- ext-simplexml: *
Requires (Dev)
- php: >=7.3
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: 3.*
README
URFAClient
基于api.xml的NetUp UTM5通用PHP计费系统客户端
安装(composer)
composer require k-shym/urfa-client "^2.0"
依赖关系
- UTM 5.2.1-008 >=
- PHP 5.4 >=
- 扩展:JSON、OpenSSL、SimpleXML、Hash、Filter
参数描述
CMD
bin/urfaclient -h
The options are as follows:
[-a, --api <path> ] Path to api.xml
[-f, --function <name>] Name function from api.xml
[-t, --type <type>] Type return (array, json, xml), default: array
[-l, --list] List of functions from api.xml
[-h, --help ] This help
[-v, --version ] Version URFAClient
示例
以rpcf_add_user_new函数为例,说明如何使用该库,我们有XML描述
<function name="rpcf_add_user_new" id="0x2125"> <input> <string name="login"/> <string name="password"/> <string name="full_name" default=""/> <integer name="is_juridical" default="0"/> <string name="jur_address" default=""/> <string name="act_address" default=""/> <string name="flat_number" default=""/> <string name="entrance" default=""/> <string name="floor" default=""/> <string name="district" default=""/> <string name="building" default=""/> <string name="passport" default=""/> <integer name="house_id" default="0"/> <string name="work_tel" default=""/> <string name="home_tel" default=""/> <string name="mob_tel" default=""/> <string name="web_page" default=""/> <string name="icq_number" default=""/> <string name="tax_number" default=""/> <string name="kpp_number" default=""/> <string name="email" default=""/> <integer name="bank_id" default="0"/> <string name="bank_account" default=""/> <string name="comments" default=""/> <string name="personal_manager" default=""/> <integer name="connect_date" default="0"/> <integer name="is_send_invoice" default="0"/> <integer name="advance_payment" default="0"/> <integer name="switch_id" default="0"/> <integer name="port_number" default="0"/> <integer name="binded_currency_id" default="810"/> <integer name="parameters_count" default="size(parameter_value)"/> <for name="i" from="0" count="size(parameter_value)"> <integer name="parameter_id" array_index="i"/> <string name="parameter_value" array_index="i"/> </for> <integer name="groups_count" default="size(groups)"/> <for name="i" from="0" count="size(groups)"> <integer name="groups" array_index="i"/> </for> <integer name="is_blocked" default="0"/> <double name="balance" default="0.0"/> <double name="credit" default="0.0"/> <double name="vat_rate" default="0.0"/> <double name="sale_tax_rate" default="0.0"/> <integer name="int_status" default="1"/> </input> <output> <integer name="user_id"/> <if variable="user_id" value="0" condition="eq"> <integer name="error_code"/> <string name="error_description"/> </if> <if variable="user_id" value="0" condition="ne"> <integer name="basic_account"/> </if> </output> </function>
因此,我们需要在关联数组中描述输入参数(input元素)。如果元素中存在default属性,则参数为非必需。
从api.xml中获取rpcf_add_user_new函数的完整参数描述
bin/urfaclient -f rpcf_add_user_new -t json
{ "login": "", "password": "", "full_name": "", "is_juridical": 0, "jur_address": "", "act_address": "", "flat_number": "", "entrance": "", "floor": "", "district": "", "building": "", "passport": "", "house_id": 0, "work_tel": "", "home_tel": "", "mob_tel": "", "web_page": "", "icq_number": "", "tax_number": "", "kpp_number": "", "email": "", "bank_id": 0, "bank_account": "", "comments": "", "personal_manager": "", "connect_date": 0, "is_send_invoice": 0, "advance_payment": 0, "switch_id": 0, "port_number": 0, "binded_currency_id": 0, "parameters_count": [ { "parameter_id": 0, "parameter_value": "" } ], "groups_count": [ { "groups": 0 } ], "is_blocked": 0, "balance": 0, "credit": 0, "vat_rate": 0, "sale_tax_rate": 0, "int_status": 0 }
根据此描述,保留所需的参数,参数顺序不重要。
如前所述,UTM5的开发者没有对函数描述格式达成统一。因此,对于数组元素中的for参数,取什么名字是个问题。因此,我们决定使用计数器属性名* _count作为参数名。在我们的例子中将是这样的
[ // ... 'parameters_count' => [ [ 'parameter_id' => 0, 'parameter_value' => 'м', ], [ 'parameter_id' => 1, 'parameter_value' => '13.06.2014', ], ], 'groups_count' => [ [ 'groups' => 1000, ], [ 'groups' => 1001, ], ], // ... ];
如果遇到error元素,将抛出异常XML Described error:,然后是错误属性。
if条件非常简单,如果为真,则进入内部。内容处理方式如上所述。
最终,我们得到创建用户的最低参数集
require __DIR__ . '/vendor/autoload.php'; use URFAClient\URFAClient; $urfa = URFAClient::init([ 'login' => 'init', 'password' => 'init', 'address' => 'localhost', ]); $result = $urfa->rpcf_add_user_new([ 'login'=>'test', 'password'=>'test', ]); $result = $urfa->rpcf_add_user_new('{ "login": "test2", "password": "test2" }');
变量$result将包含在output元素中描述的数据
测试
docker-compose up -d
docker exec -t urfa composer install
docker exec -t urfa vendor/bin/phpunit --coverage-text
可能的问题
- 在UTM-5.3-003、UTM-5.4-004和UTM-5.5-015版本上进行了测试
- 未测试api.xml中的所有功能
- 更新api.xml时,务必检查使用的功能
对于出现的问题,请发送api.xml和UTM5的完整版本。祝你好运!