使用xmlrpc_encode_request创建XML-RPC请求

时间:2014-07-21 10:49:54

标签: xml-rpc

我想生成一个包含struct作为标记的请求。如在xmlrc_ecode_request中那样,如果我将第二个变量作为任何值传递,那么" int"生成标签,如果我传递任何字符串"字符串"标签是用值生成的。 我需要生成如下所示:

<?xml version="1.0"?>
<methodCall>
    <methodName>Request.getName</methodName>
    <params>
        <param>
            <value>
                <struct>
                   <member>
                      <name>RequestNumber</name>
                      <value><string>00471627612</string></value>
                      <name>Request2</name>
                      <value><string>471627612</string></value>
                    </member>
                 </struct>
             </value>
         </param>
    </params>
</methodCall>

请帮我生成上述请求。 谢谢, 萨米特

2 个答案:

答案 0 :(得分:0)

您可以使用array作为参数:

$method = 'Request.getName';
$params = [
    'RequestNumber' => '00471627612',
    'Request2' => '471627612'
];
$request = xmlrpc_encode_request($method, $params, ['encoding' => 'utf-8']);
print_r($request);

xmlrpc_encode_request()不允许将数组放入相同的member标记(在PHP 5.6.2上检查)。所以你的新结构将如下所示:

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
    <methodName>Request.getName</methodName>
    <params>
        <param>
            <value>
                <struct>
                    <member>
                        <name>RequestNumber</name>
                        <value>
                            <string>00471627612</string>
                        </value>
                    </member>
                    <member>
                        <name>Request2</name>
                        <value>
                            <string>471627612</string>
                        </value>
                    </member>
                </struct>
            </value>
        </param>
    </params>
</methodCall>

答案 1 :(得分:0)

为了以这种方式生成输出,您只需要传递一个关联数组。所以这: <?xml version="1.0" encoding="iso-8859-1"?> <methodCall> <methodName>methodname</methodName> <params> <param> <value> <string>username</string> </value> </param> <param> <value> <string>password</string> </value> </param> <param> <value> <struct> <member> <name>first_name</name> <value> <string>John</string> </value> </member> <member> <name>last_name</name> <value> <string>Smith</string> </value> </member> </struct> </value> </param> </params> </methodCall>

输出:

img

请注意,第一个数组只是值,第二个是关联(名称/值对),它创建结构化块。只需添加另一个数组即可创建另一个块。