【强烈推荐】Zend_xmlrpc构建webservice服务器接口教程 Calling parameters do not match signature

本文介绍使用Zend Framework中的Zend_xmlrpc_server构建WebService服务器的方法,包括如何正确设置函数注释以匹配XML-RPC调用参数类型,以及解决Callingparametersdonotmatchsignature错误的经验分享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用Zend_xmlrpc构建webservice服务器

标签: zendwebserviceserverjsonincludestring
514人阅读 评论(0) 收藏 举报
分类:


===========================
Calling parameters do not match signature 报错请看红色部分
@param array $value (注意:这是server端中函数的一个形参,必须要在这里体现,传过来是数组,是array,如果是字符串,则是string)
============================================
最近公司网站需要开通接口供别人调用,用了Zend framework中的Zend_xmlrpc_server来构建一个server端,这中间需要注意很多问题,对调用函数的注释有些要求,我花了很久的时间才弄明白,特地写出来,供同样遇到这样问题的人进行参考.

如下:server端

<?php
require_once 'Zend/XmlRpc/Server.php';

/**
 * 返回 MD5 值
 *
 * @param array $value (注意:这是server端中函数的一个形参,必须要在这里体现,传过来是数组,是array,如果是字符串,则是string)
 * @return array MD5
 */
function md5Value($value)
{
    return json_encode($value);
}

$server = new Zend_XmlRpc_Server();
$server->addFunction('md5Value');//这里是用addFunction附加一个函数
echo $server->handle();//返回一个对象
?>

client端 (进行XMLRPC调用)

include('Zend/Loader.php');
Zend_Loader::registerAutoload();
$client = new Zend_XmlRpc_Client('http://127.0.0.1/test/server/index.php');
$data=array(    //说明:如果传过去的参数是数组,则必须如下要包三层,一个三维数组.

                   array(

                           array(
                                     "a"=>"1234",
                                     "b"=>"5678"
                                   )

                           )

                    );
$result=$client->call('md5Value',$data);
print_r($result);

结果(json数据):

[{"a":"1234","b":"5678"}]

希望大家有更好的主意,可以一起分享

==================================

【重点】,协议的解析

因为我用到的odoo 的 xmlrpc ,只用用的是火狐的 poster调试的

我记录了。协议发过来的日志,然后写函数,出现了错误

<?xml version='1.0'?>
<methodCall>
<methodName>login</methodName>
<params>
<param>
<value><string>admin</string></value>
</param>
<param>
<value><string>admin</string></value>
</param>
</params>
</methodCall>

注意这个函数发过来的参数是2个字符串,而不是 一个数组,所以对应的函数是

/**
 * Echo back a string

 * @param string $u  注意要必须要写,zendxmlrpc 会对比参数类型的,如果没有写,就当成了struct 数据类型的
 * @param string $p
 * @return null
 */
function login($u, $p){
 


}


而不是 

/**
 * Echo back a string

 * @param array $p  注意要必须要写,zendxmlrpc 会对比参数类型的,如果没有写,就当成了struct 数据类型的
 * @return null
 */

function login($p){
 


}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值