经过两天实践成功在FastAdmin集成SOAP

服务器配置我就不说了。

在服务端一定把服务的定义写在控制器外面,例如。

class Modulestock extends Frontend{
    protected $noNeedLogin = ['*'];
    public function info($moduleid = ''){
        $item = new \app\index\model\Module();
        $itemstock = new \app\index\model\Modulestock();
        $iteminfo = $item->with('stocks')->find(['itemid'=>$moduleid]);
        $tanteng = new \stdClass();
        $tanteng->itemid = $iteminfo['itemid'];
        $tanteng->name = $iteminfo['name'];
        $tanteng->enname = $iteminfo['enname'];
        $iteminfo2 = array();
        return $iteminfo;
    }
}

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : (isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '');

$server = new \SoapServer(null,array('uri' => "abcd"));
$server->setClass("\app\index\controller\Modulestock");
//$server->service($HTTP_RAW_POST_DATA);
$server->handle();

注意uri,自己定义,在客户端调用的时候,要保持一致。

客户端调用

try{
    $soap = new \SoapClient(null,array(
	"location" => "http://www.andiff.net/admin/modulestock/info",
	"uri"      => "abcd",  //资源描述符服务器和客户端必须对应
	'trace'    => true,
	'encoding' =>'utf-8'));
	//$soap->__soapCall('querySherry',$paras);
	$s = $soap->info($this->request->param('ids'));
	$arr = $s->relation;
	$arr2 = array();
	foreach ($arr['stocks'] as $k => $v) {
		$arr2[$k]=get_object_vars($v);
	}
	$this->view->assign("s2",$arr2);
	$this->view->assign("s",$s->data);
	return $this->view->fetch();
}catch(Exction $e){
	echo print_r($e->getMessage(),true);
}

这段代码可以放在任意一个控制器里面,说白了,服务端定义好了,客户端怎么调用都可以。

猜你喜欢

转载自blog.csdn.net/u010261924/article/details/80356278