首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SoapFault异常: eway中的[HTTP]请求错误

SoapFault异常: eway中的[HTTP]请求错误
EN

Stack Overflow用户
提问于 2012-07-09 20:01:52
回答 1查看 5.2K关注 0票数 3

我将集成eway令牌支付集成,我正面临这个问题。

代码语言:javascript
复制
SoapFault exception: [HTTP] Bad Request

wsdl文件位于此处

代码语言:javascript
复制
https://www.eway.com.au/gateway/ManagedPaymentService/managedCreditCardPayment.asmx?wsdl

xml格式如下所示

代码语言:javascript
复制
https://www.eway.com.au/gateway/ManagedPaymentService/test/managedcreditcardpayment.asmx?op=CreateCustomer

我使用$client->__getLastRequest()获得xml文件;脚本是

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="https://www.eway.com.au/gateway/managedpayment" xmlns:ns2="eWAYHeader">
<env:Header>
<ns2:http://www.eway.com.au/gateway/managedPayment>
<item>
<key>eWAYCustomerID</key><value>87654321</value>
</item>
<item><key>Username</key><value>test@eway.com.au</value>
</item>
<item><key>Password</key><value>test123</value>
</item>
</ns2:http://www.eway.com.au/gateway/managedPayment>
</env:Header><env:Body>
<ns1:CreateCustomer>
<ns1:Title>Mr.</ns1:Title>
<ns1:FirstName>Joe</ns1:FirstName>
<ns1:LastName>Bloggs</ns1:LastName>
<ns1:Address>Bloggs Enterprise</ns1:Address>
<ns1:Suburb>Capital City</ns1:Suburb>
<ns1:State>ACT</ns1:State>
<ns1:Company>Bloggs</ns1:Company>
<ns1:PostCode>2111</ns1:PostCode>
<ns1:Country>au</ns1:Country>
<ns1:Email>test@eway.com.au</ns1:Email>
<ns1:Fax>0298989898</ns1:Fax>
<ns1:Phone>0297979797</ns1:Phone>
<ns1:Mobile>9841381980</ns1:Mobile>
<ns1:CustomerRef>Ref123</ns1:CustomerRef>
<ns1:JobDesc>Web developer</ns1:JobDesc>
<ns1:Comments>Please Ship ASASP</ns1:Comments>
<ns1:URL>http://www.test.com.au</ns1:URL>
<ns1:CCNumber>4444333322221111</ns1:CCNumber>
<ns1:CCNameOnCard>Test Account </ns1:CCNameOnCard>
<ns1:CCExpiryMonth>1</ns1:CCExpiryMonth>
<ns1:CCExpiryYear>13</ns1:CCExpiryYear>
</ns1:CreateCustomer>
</env:Body>
</env:Envelope>

xml结构对soap是否有两种影响:

或者这是类似于soap头的问题吗?

我已经像这样设置了头部

代码语言:javascript
复制
$data = array('eWAYCustomerID'=>'87654321',
                'Username' => "test@eway.com.au", 
                'Password' => "test123"

                );

$header = new SoapHeader('eWAYHeader',$url,$data);

$client->__setSoapHeaders($header);

我得到了:

代码语言:javascript
复制
SoapFault exception: [HTTP] Bad Request in D:\wamp\www\eway\newfile.php:196
Stack trace:
#0 [internal function]: SoapClient->__doRequest('__call('CreateCustomer', Array)
#2 D:\wamp\www\eway\newfile.php(196): SoapClient->CreateCustomer(Array)
#3 {main}

当我调用此函数时,总是出现此错误

代码语言:javascript
复制
$customerinfo = 
        array(
        'Title'=>'Mr.',
        'FirstName' => 'Joe',
        'LastName'=>'Bloggs',
        'Address'=>'Bloggs Enterprise',
        'Suburb'=>'Capital City',
        'State'=>'ACT',
        'Company'=>'Bloggs',
        'PostCode'=>'2111',
        'Country'=>'au',
        'Email'=>'test@eway.com.au',
        'Fax'=>'0298989898',
        'Phone'=>'0297979797',
        'Mobile'=>'9841381980',
        'CustomerRef'=>'Ref123',
        'JobDesc'=>'Web developer',
        'Comments'=>'Please Ship ASASP',
        'URL'=>'http://www.test.com.au',
        'CCNumber'=>'4444333322221111',
        'CCNameOnCard'=>'Test Account ',
        'CCExpiryMonth'=>'01',
        'CCExpiryYear'=>'13'

);

$client->CreateCustomer($customerinfo);

任何帮助都会更有价值。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-09 22:35:52

请尝试使用以下代码:

代码语言:javascript
复制
<?php
$apiUrl         = 'https://www.eway.com.au/gateway/ManagedPaymentService/test/managedcreditcardpayment.asmx?WSDL';
$options        = array( 'trace' => 1, 'exceptions' => 1);
try{
    $client     = new SoapClient($apiUrl, $options);
    $data       = array(
        'eWAYCustomerID'    => '87654321',
        'Username'          => "test@eway.com.au",
        'Password'          => "test123"
    );

    $header = new SoapHeader('https://www.eway.com.au/gateway/managedpayment', 'eWAYHeader', $data, false);
    $client->__setSoapHeaders($header);

    $customerinfo =  array(
            'Title'=>'Mr.',
            'FirstName' => 'Joe',
            'LastName'=>'Bloggs',
            'Address'=>'Bloggs Enterprise',
            'Suburb'=>'Capital City',
            'State'=>'ACT',
            'Company'=>'Bloggs',
            'PostCode'=>'2111',
            'Country'=>'au',
            'Email'=>'test@eway.com.au',
            'Fax'=>'0298989898',
            'Phone'=>'0297979797',
            'Mobile'=>'9841381980',
            'CustomerRef'=>'Ref123',
            'JobDesc'=>'Web developer',
            'Comments'=>'Please Ship ASASP',
            'URL'=>'http://www.test.com.au',
            'CCNumber'=>'4444333322221111',
            'CCNameOnCard'=>'Test Account ',
            'CCExpiryMonth'=>'01',
            'CCExpiryYear'=>'13'

    );

    $result = $client->CreateCustomer($customerinfo);
    var_dump($result);

}catch(Exception $e){
    echo $e->getMessage();
}

这对我很有效。

备注:

  1. 始终尝试将代码包装在try{} constructor.

{}块中

  • 确保检查php_openssl扩展是否已启用

  • 禁用wsdl缓存并启用exceptions

  • 注意SoapHeader catch

希望这对你有帮助。

问候

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11394612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档