在 PHP、SoapClient、XML 中集成
Integration in PHP, SoapClient, XML
有人可以帮我解决这个问题吗,这是我在 PHP 中的代码,我正在尝试从 xml
中的 Web 服务获取信息
$cliente = newSoapClient("http://000.000.000.000/uat_abbott_service/AbbottService.svc?wsdl", array("trace" => 1, "exception" => 0));
$parametros_entCredencial = array();
$parametros_entCredencial['Login'] = 'PAGUE';
$parametros_entCredencial['Password'] = 'P4gu3';
$parametros_entCredencial['SucursalId'] = '1';
$parametros_entCredencial['SucursalCaja'] = '11';
$parametros_entCredencial['EmpleadoId'] = '22222';
$parametros_entPaciente = array();
$parametros_entPaciente['Documento'] = '9837720122';
$parametros_entPaciente['Tarjeta'] = '';
$parametros_ValidarPaciente = array();
$parametros_ValidarPaciente = array_merge($parametros_entCredencial, $parametros_entPaciente);
$parametros_ValidarPaciente = (object)$parametros_ValidarPaciente;
var_dump($parametros_ValidarPaciente);
echo "<br />";
$respuesta = $cliente->ValidarPaciente($parametros_ValidarPaciente);
var_dump($respuesta);
echo "<br />";
echo "Last Request<br />";
var_dump( $cliente->__getLastRequest() );
echo "Last answer<br />";
var_dump( $cliente->__getLastResponse() );
echo "end<br />";
我可以连接到网络服务,但是我的代码有问题,总是响应 "Object not instantiated" 而 __getLastRequest 总是空的...
我该如何解决这个...?
谢谢
另外...
当我得到函数和类型时
函数
ValidarPacienteResponse ValidarPaciente(ValidarPaciente $parameters)
CotizarVentaResponse CotizarVenta(CotizarVenta $parameters)
ConfirmarVentaResponse ConfirmarVenta(ConfirmarVenta $parameters)
ValidarCancelacionResponse ValidarCancelacion(ValidarCancelacion $parameters)
CancelarVentaResponse CancelarVenta(CancelarVenta $parameters)
ConciliarVentaResponse ConciliarVenta(ConciliarVenta $parameters)
ConciliarCancelacionResponse ConciliarCancelacion(ConciliarCancelacion $parameters)
类型
struct entCredencial { string Login; string Password; string SucursalId;
string SucursalCaja; string EmpleadoId; }
struct entPaciente { string Documento; string Tarjeta; }
struct entToken { string Token; entMensaje Mensaje; }
struct entMensaje { short Codigo; }
struct ArrayOfentMedicamento { entMedicamento entMedicamento; }
struct entMedicamento { string Codigo; string CodigoDeBarras; int Cantidad; }
struct entCotizacion { string Id; entMensaje Mensaje; entCompra Compra; entSugerenciaCompra SugerenciaCompra; }
struct entCompra { ArrayOfentMedicamentoCompra Medicamentos; }
struct ArrayOfentMedicamentoCompra { entMedicamentoCompra entMedicamentoCompra; }
struct entMedicamentoCompra { string IdentificadorCompra; entMedicamento Medicamento; ArrayOfentBeneficio Beneficios; }
struct ArrayOfentBeneficio { entBeneficio entBeneficio; }
struct entBeneficio { string IdentificadorCompra; string Codigo; string CodigoDeBarras; int Cantidad; boolean Entregado; }
struct entSugerenciaCompra { ArrayOfentMedicamentoCompra Medicamentos; }
struct entTransaccion { string IdConfirmacion; string Ticket; entMensaje Mensaje; }
struct entCancelacion { entToken Token; ArrayOfentMedicamentoCompra Medicamentos; }
struct ValidarPaciente { entCredencial usuario; entPaciente paciente; }
struct ValidarPacienteResponse { entToken ValidarPacienteResult; }
struct CotizarVenta { entToken token; ArrayOfentMedicamento medicamentos; }
struct CotizarVentaResponse { entCotizacion CotizarVentaResult; }
struct ConfirmarVenta { entToken token; string ticket; entCotizacion cotizacion; }
struct ConfirmarVentaResponse { entTransaccion ConfirmarVentaResult; }
struct ValidarCancelacion { entCredencial usuario; entTransaccion transaccion; }
struct ValidarCancelacionResponse { entCancelacion ValidarCancelacionResult; }
struct CancelarVenta { entToken token; entTransaccion transaccion; }
struct CancelarVentaResponse { entTransaccion CancelarVentaResult; }
struct ConciliarVenta { entCredencial usuario; string ticket; }
struct ConciliarVentaResponse { entTransaccion ConciliarVentaResult; }
struct ConciliarCancelacion { entCredencial usuario; string ticket; }
struct ConciliarCancelacionResponse { entTransaccion ConciliarCancelacionResult; }
也许我只需要知道如何测试和验证所有功能,我在下载 .exe 后使用 https://www.soapui.org 的 soapui y 只需放入 WS link 和 wooalaaaaaa,我可以得到进行简单数组和 soap 调用的结构
这是我在 php
中的解决方案
先一个对象转数组的函数就知道答案了
function obj2array($obj) {
$out = array();
foreach ($obj as $key => $val) {
switch(true) {
case is_object($val):
$out[$key] = obj2array($val);
break;
case is_array($val):
$out[$key] = obj2array($val);
break;
default:
$out[$key] = $val;
}
}
return $out;
}
现在连接到 ws
$cliente = new SoapClient("http://000.000.00.00/uat_abbott_service/AbbottService.svc?wsdl", array("trace" => 1, "exception" => 0));
使用 soapui
像 xml 中的节点一样准备数组
$usuario = array('Login' => 'USERWS',
'Password' => 'PASSWORD-WS',
'SucursalId' => '1',
'SucursalCaja'=>'11',
'EmpleadoId'=>'22222');
$Paciente = array('Documento'=>'CONSULT',
'Tarjeta'=>''
);
调用函数
$respuesta = $cliente->ValidarPaciente(array('usuario'=> $usuario, 'paciente'=> $Paciente));
将结果转换为数组
$result = obj2array($respuesta);
显示答案
echo "Token ".$result["ValidarPacienteResult"]["Token"]."<br />";
echo "Mensaje ".$result["ValidarPacienteResult"]["Mensaje"]["Codigo"]."<br />";
有人可以帮我解决这个问题吗,这是我在 PHP 中的代码,我正在尝试从 xml
中的 Web 服务获取信息$cliente = newSoapClient("http://000.000.000.000/uat_abbott_service/AbbottService.svc?wsdl", array("trace" => 1, "exception" => 0));
$parametros_entCredencial = array();
$parametros_entCredencial['Login'] = 'PAGUE';
$parametros_entCredencial['Password'] = 'P4gu3';
$parametros_entCredencial['SucursalId'] = '1';
$parametros_entCredencial['SucursalCaja'] = '11';
$parametros_entCredencial['EmpleadoId'] = '22222';
$parametros_entPaciente = array();
$parametros_entPaciente['Documento'] = '9837720122';
$parametros_entPaciente['Tarjeta'] = '';
$parametros_ValidarPaciente = array();
$parametros_ValidarPaciente = array_merge($parametros_entCredencial, $parametros_entPaciente);
$parametros_ValidarPaciente = (object)$parametros_ValidarPaciente;
var_dump($parametros_ValidarPaciente);
echo "<br />";
$respuesta = $cliente->ValidarPaciente($parametros_ValidarPaciente);
var_dump($respuesta);
echo "<br />";
echo "Last Request<br />";
var_dump( $cliente->__getLastRequest() );
echo "Last answer<br />";
var_dump( $cliente->__getLastResponse() );
echo "end<br />";
我可以连接到网络服务,但是我的代码有问题,总是响应 "Object not instantiated" 而 __getLastRequest 总是空的... 我该如何解决这个...?
谢谢
另外... 当我得到函数和类型时
函数
ValidarPacienteResponse ValidarPaciente(ValidarPaciente $parameters)
CotizarVentaResponse CotizarVenta(CotizarVenta $parameters)
ConfirmarVentaResponse ConfirmarVenta(ConfirmarVenta $parameters)
ValidarCancelacionResponse ValidarCancelacion(ValidarCancelacion $parameters)
CancelarVentaResponse CancelarVenta(CancelarVenta $parameters)
ConciliarVentaResponse ConciliarVenta(ConciliarVenta $parameters)
ConciliarCancelacionResponse ConciliarCancelacion(ConciliarCancelacion $parameters)
类型
struct entCredencial { string Login; string Password; string SucursalId;
string SucursalCaja; string EmpleadoId; }
struct entPaciente { string Documento; string Tarjeta; }
struct entToken { string Token; entMensaje Mensaje; }
struct entMensaje { short Codigo; }
struct ArrayOfentMedicamento { entMedicamento entMedicamento; }
struct entMedicamento { string Codigo; string CodigoDeBarras; int Cantidad; }
struct entCotizacion { string Id; entMensaje Mensaje; entCompra Compra; entSugerenciaCompra SugerenciaCompra; }
struct entCompra { ArrayOfentMedicamentoCompra Medicamentos; }
struct ArrayOfentMedicamentoCompra { entMedicamentoCompra entMedicamentoCompra; }
struct entMedicamentoCompra { string IdentificadorCompra; entMedicamento Medicamento; ArrayOfentBeneficio Beneficios; }
struct ArrayOfentBeneficio { entBeneficio entBeneficio; }
struct entBeneficio { string IdentificadorCompra; string Codigo; string CodigoDeBarras; int Cantidad; boolean Entregado; }
struct entSugerenciaCompra { ArrayOfentMedicamentoCompra Medicamentos; }
struct entTransaccion { string IdConfirmacion; string Ticket; entMensaje Mensaje; }
struct entCancelacion { entToken Token; ArrayOfentMedicamentoCompra Medicamentos; }
struct ValidarPaciente { entCredencial usuario; entPaciente paciente; }
struct ValidarPacienteResponse { entToken ValidarPacienteResult; }
struct CotizarVenta { entToken token; ArrayOfentMedicamento medicamentos; }
struct CotizarVentaResponse { entCotizacion CotizarVentaResult; }
struct ConfirmarVenta { entToken token; string ticket; entCotizacion cotizacion; }
struct ConfirmarVentaResponse { entTransaccion ConfirmarVentaResult; }
struct ValidarCancelacion { entCredencial usuario; entTransaccion transaccion; }
struct ValidarCancelacionResponse { entCancelacion ValidarCancelacionResult; }
struct CancelarVenta { entToken token; entTransaccion transaccion; }
struct CancelarVentaResponse { entTransaccion CancelarVentaResult; }
struct ConciliarVenta { entCredencial usuario; string ticket; }
struct ConciliarVentaResponse { entTransaccion ConciliarVentaResult; }
struct ConciliarCancelacion { entCredencial usuario; string ticket; }
struct ConciliarCancelacionResponse { entTransaccion ConciliarCancelacionResult; }
也许我只需要知道如何测试和验证所有功能,我在下载 .exe 后使用 https://www.soapui.org 的 soapui y 只需放入 WS link 和 wooalaaaaaa,我可以得到进行简单数组和 soap 调用的结构
这是我在 php
中的解决方案先一个对象转数组的函数就知道答案了
function obj2array($obj) {
$out = array();
foreach ($obj as $key => $val) {
switch(true) {
case is_object($val):
$out[$key] = obj2array($val);
break;
case is_array($val):
$out[$key] = obj2array($val);
break;
default:
$out[$key] = $val;
}
}
return $out;
}
现在连接到 ws
$cliente = new SoapClient("http://000.000.00.00/uat_abbott_service/AbbottService.svc?wsdl", array("trace" => 1, "exception" => 0));
使用 soapui
像 xml 中的节点一样准备数组$usuario = array('Login' => 'USERWS',
'Password' => 'PASSWORD-WS',
'SucursalId' => '1',
'SucursalCaja'=>'11',
'EmpleadoId'=>'22222');
$Paciente = array('Documento'=>'CONSULT',
'Tarjeta'=>''
);
调用函数
$respuesta = $cliente->ValidarPaciente(array('usuario'=> $usuario, 'paciente'=> $Paciente));
将结果转换为数组
$result = obj2array($respuesta);
显示答案
echo "Token ".$result["ValidarPacienteResult"]["Token"]."<br />";
echo "Mensaje ".$result["ValidarPacienteResult"]["Mensaje"]["Codigo"]."<br />";