Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Странный результат функции rpcf_get_all_services_for_user (0x2700) #18

Closed
EvgeniyKorepov opened this issue Jun 17, 2018 · 3 comments

Comments

@EvgeniyKorepov
Copy link

EvgeniyKorepov commented Jun 17, 2018

Версия билинга 5.3-003, используется api_53-003.xml. PHP 5.4.45-0+deb7u12 (cli)
Решил перевести хозяйство на ваш класс. Кстати чудесный продукт, спасибо вам!
Но столкнулся с странным форматом результата функции rpcf_get_all_services_for_user.

В старой версии urfa-php результат выглядит вот так:

Array
(
    [count] => 1
    [services] => Array
        (
            [0] => Array
                (
                    [id] => 190
                    [type] => 3
                    [name] => Интернет
                    [tarif_name] => ФЛ/Unlim 880
                    [cost] => 0
                    [slink_id] => 72722
                    [period] => 1235
                )
        )
)

В вашей версии вот так:

Array
(
    [slink_id_count] => Array
        (
            [0] => Array
                (
                    [service_id] => 190
                    [service_type_array] => 3
                    [service_name_array] => Интернет
                    [tariff_name_array] => ФЛ/Unlim 880
                    [service_cost_array] => 0
                    [slink_id_array] => 72722
                    [discount_period_id_array] => 1235
                )
        )
)

Понятно что в старой урфе искусственно, ручным кодом, приведено к такому результату.
Но в вашей версии смущает индекс массива [slink_id_count], меня прямо выворачивает от его бессмысленности ;-)
Успокойте меня пожалуйста - так и должно быть? ;-)

Вот, для удобства, описание функции из xml:

<function name="rpcf_get_all_services_for_user" id="0x2700">                   
    <input>                                                                    
        <integer name="account_id"/>                                           
    </input>                                                                   
    <output>                                                                   
        <integer name="slink_id_count"/>                                       
        <for name="i" from="0" count="slink_id_count">                         
            <integer name="service_id"/>                                       
            <if variable="service_id" value="-1" condition="ne">               
                <set src="service_id" dst="service_id_array" dst_index="i"/>   
                <integer name="service_type_array" array_index="i"/>           
                <string name="service_name_array" array_index="i"/>            
                <string name="tariff_name_array" array_index="i"/>             
                <double name="service_cost_array" array_index="i"/>            
                <integer name="slink_id_array" array_index="i"/>               
                <integer name="discount_period_id_array" array_index="i"/>     
            </if>                                                              
            <if variable="service_id" value="-1" condition="eq">               
                <set dst="service_id_array" dst_index="i" value="-1"/>         
                <set dst="service_type_array" dst_index="i" value="-1"/>       
                <set dst="service_name_array" dst_index="i" value=""/>         
                <set dst="tariff_name_array" dst_index="i" value=""/>          
                <set dst="service_cost_array" dst_index="i" value="-1"/>       
                <set dst="slink_id_array" dst_index="i" value="-1"/>           
                <set dst="discount_period_id_array" dst_index="i" value="-1"/> 
            </if>                                                              
        </for>                                                                 
    </output>                                                                  
</function>                                                                    
@k-shym
Copy link
Owner

k-shym commented Jun 17, 2018

Названия используются из API XML, а конкретно в вашем примере из <integer name="slink_id_count"/>, поэтому имя переменой не изменится пока у вас текущий api.xml. Если Вас это прям напрягает, вы можете поменять имя slink_id_count в api.xml, на удобное вам.

P.S. Имя массива берется из integer(перед массивом) по причине плохого описания цикла for (где-то есть имя у цикла, где-то его нет), а у поля integer всегда есть имя у всех функций.

@EvgeniyKorepov
Copy link
Author

Все ясно и понятно. Спасибо!

@EvgeniyKorepov
Copy link
Author

@k-shym вы не против будете, если я добавлю ваш продукт к себе в wiki http://wiki.flintnet.ru ?
Там будет ссылка на гитхаб, плюс еще хочу сделать страничку по получению аргументов функций (онлайн аналог вашего cmd.php). Чтоб можно было выбрать функцию по названию (из списка), по коду, и получить и скопировать в буфер описание аргументов. А то сегодня утомился в консоли это делать.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants