我正在为一个国家组织的州章组织设计一个网站。国家组织实施了我需要用于州网站的成员登录。
我的网站是PHP,看起来国家组织的服务器使用的是SOAP和ColdFusion。我是使用SOAP的新手,所以我可能错过了很多东西。
国家组织向我发送了这些信息:
要在表单上收集的字段
mausername
mapassword静态变量
componenttype价值:章 组件价值:NM
authusername价值:NMChap
authpassword价值:美国
authpagealias价值:登录网络服务位于: https://www.apta.org/AM/APTAAPPS/ComponentAuthWebService/aptamemberauthorize.cfc?WSDL
将返回以下字段: 电子邮件,FirstName,LastName,LoggedIn,Phone_Release,UserName
如果LoggedIn返回“true”,则该成员已被认证为组件的成员。
这已在此处实施和测试:http://aptadevisg.apta.org/am/aptaapps/test/NM_Chap_test_form.cfm
根据这些信息并阅读SOAP文档,这就是我提出的:
$apta_server = 'https://www.apta.org/AM/APTAAPPS/ComponentAuthWebService/aptamemberauthorize.cfc?WSDL';
$post_data['mausername'] = '107150';
$post_data['mapassword'] = 'barnes';
$post_data['componenttype'] = 'Chapter';
$post_data['components'] = 'NM';
$post_data['authusername'] = 'NMChap';
$post_data['authpassword'] = 'USA';
$post_data['authpagealias'] = 'Login';
$options = array('trace' => 1, 'exceptions' => 0);
$options['location'] = 'https://www.apta.org/AM/APTAAPPS/ComponentAuthWebService/MemberAuth';
try
{
$client = new soapclient($apta_server, $options);
}
catch (Exception $e)
{
}
$client->debug_flag = 1;
try
{
$result = $client->__soapCall('MemberAuth', array($post_data));
echo '<h1>Soap Result</h1><pre>';
print_r($result);
echo '</pre>';
}
catch (SoapFault $fault)
{
echo '<h1>Soap Fault</h1><pre>';
print_r($fault);
echo '</pre>';
}
echo '<pre>getFunctions<br>';
print_r($client->__getFunctions());
echo '</pre>';
echo '<pre>getTypes<br>';
print_r($client->__getTypes());
echo '</pre>';
echo '<pre>getLastResponseHeaders<br>';
print_r($client->__getLastResponseHeaders());
echo '</pre>';
echo '<pre>getLastResponse<br>';
print_r($client->__getLastResponse());
echo '</pre>';
当我打印出__soapCall()的结果时,我收到一条消息:“看起来我们没有XML文档。”
我真的不知道我在做什么关于SOAP,所以任何帮助都会非常感激。您可以在http://rc19.info/test_login.php
查看测试登录尝试的结果答案 0 :(得分:0)
首先,你有$ options ['location']错误。尝试实际的Web服务的位置:
$options['location'] = 'https://www.apta.org/AM/APTAAPPS/ComponentAuthWebService/aptamemberauthorize.cfc';
其次,虽然没有必要,但您不必调用$ client-&gt; __ call(“MemberAuth”)。您可以执行$ client-&gt; MemberAuth()并传递参数:
$result = $client->MemberAuth($post_data['mausername'],$post_data['mapassword'],$post_data['componenttype'],$post_data['components'],$post_data['authusername'],$post_data['authpassword'],$post_data['authpagealias']);
答案 1 :(得分:0)
你那里有一个多余的array
(你可以看到$client->__lastRequest()
,所以改变:
$result = $client->__soapCall('MemberAuth', array($post_data));
要:
$result = $client->__soapCall('MemberAuth', $post_data);
之后,我得到一个'无法连接到主机'(如果我按照WSDL的端口,https://aptaweb.apta.org/AM/APTAAPPS/ComponentAuthWebService/aptamemberauthorize.cfc),或者重定向(302)到网站,并设置了一堆cookie我选择你的(https://www.apta.org/AM/APTAAPPS/ComponentAuthWebService/MemberAuth)。使用stream_context
与$context = stream_context_create(array('http'=>array('max_redirects'=>1)));
和$client->__getLastRequestHeaders();
一起查看重定向的实际效果。
很奇怪,Bob的https://www.apta.org/AM/APTAAPPS/ComponentAuthWebService/aptamemberauthorize.cfc解决方案有效,但据我所知,wsdl本身并没有表明。