帮助使用SOAP进行登录

时间:2010-08-02 17:54:15

标签: php soap

我正在为一个国家组织的州章组织设计一个网站。国家组织实施了我需要用于州网站的成员登录。

我的网站是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

查看测试登录尝试的结果

2 个答案:

答案 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本身并没有表明。