使用Web服务错误-SOAP PHP

使用Web服务错误-SOAP PHP,php,web-services,soap,Php,Web Services,Soap,我正在尝试发送数据以使用Web服务。 但它返回错误: 错误:服务器无法读取请求。-->有一个错误 XML文档(2734)。-->指定的类型是抽象的: name='PaymentDataRequest', 名称空间=https://www.pagador.com.br/webservice/pagador",在 有人能帮我吗? 这里是我的XML: <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi

我正在尝试发送数据以使用Web服务。 但它返回错误:

错误:服务器无法读取请求。-->有一个错误 XML文档(2734)。-->指定的类型是抽象的: name='PaymentDataRequest', 名称空间=https://www.pagador.com.br/webservice/pagador",在

有人能帮我吗? 这里是我的XML:

<?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
    <AuthorizeTransaction xmlns="https://www.pagador.com.br/webservice/pagador">
      <request>
        <OrderData>
          <MerchantId>xxxxxxxxxxxxxxx</MerchantId>
          <OrderId>Test0003</OrderId>
          <BraspagOrderId xsi:nil="true" />
        </OrderData>
        <CustomerData>
          <CustomerIdentity>99999999999</CustomerIdentity>
          <CustomerName>Teste</CustomerName>
          <CustomerEmail>compradot@teste.com</CustomerEmail>
          <CustomerAddressData xsi:nil="true" />
          <DeliveryAddressData xsi:nil="true" />
        </CustomerData>
        <PaymentDataCollection>
          <PaymentDataRequest xsi:type="CreditCardDataRequest">
            <PaymentMethod>997</PaymentMethod>
            <Amount>100</Amount>
            <Currency>BRL</Currency>
            <Country>BRA</Country>
            <NumberOfPayments>1</NumberOfPayments>
            <PaymentPlan>0</PaymentPlan>
            <TransactionType>2</TransactionType>
            <CardHolder>Comprador Teste</CardHolder>
            <CardNumber>0000000000000001</CardNumber>
            <CardSecurityCode>111</CardSecurityCode>
            <CardExpirationDate>07/2017</CardExpirationDate>
            <AdditionalDataCollection xsi:nil="true" />
          </PaymentDataRequest>
        </PaymentDataCollection>
        <RequestId>80a51fb5-f9d7-44b8-bdc2-da2d533f3b8d</RequestId>
        <Version>1.0</Version>
      </request>
    </AuthorizeTransaction>
  </soap:Body>
</soap:Envelope>

XXXXXXXXXXXXX
Test0003
99999999999
睾丸
compradot@teste.com
997
100
BRL
胸罩
1.
0
2.
买办睾丸
0000000000000001
111
07/2017
80a51fb5-f9d7-44b8-bdc2-da2d533f3b8d
1
代码:

$parameters=newstdclass();
$parameters->request=newstdclass();
$parameters->request->OrderData->MerchantId='xxxxxxxxx';
$parameters->request->OrderData->OrderId='Test0004';
$parameters->request->CustomerData->CustomerIdentity='99999999';
$parameters->request->CustomerData->CustomerName='Teste';
$parameters->request->CustomerData->CustomerEmail->compradot@teste.com';
$parameters->request->CustomerData->CustomerEmail->compradot@teste.com';
$parameters->request->PaymentDataCollection->PaymentDataRequest='997';
$parameters->request->PaymentDataCollection->PaymentDataRequest->Amount='100';
$parameters->request->PaymentDataCollection->PaymentDataRequest->Currency='BRL';
$parameters->request->PaymentDataCollection->PaymentDataRequest->Country='BRA';
$parameters->request->PaymentDataCollection->PaymentDataRequest->NumberOfPayments='1';
$parameters->request->PaymentDataCollection->PaymentDataRequest->PaymentPlan='0';
$parameters->request->PaymentDataCollection->PaymentDataRequest->TransactionType='2';
$parameters->request->PaymentDataCollection->PaymentDataRequest->持卡人='Compador Teste';
$parameters->request->PaymentDataCollection->PaymentDataRequest->CardNumber='000000000000000 1';
$parameters->request->PaymentDataCollection->PaymentDataRequest->CardSecurityCode='111';
$parameters->request->PaymentDataCollection->PaymentDataRequest->CardExpirationDate='2017年7月';
$parameters->request->RequestId='80a51fb5-f9d7-44b8-bdc2-da2d533f3b8d';
$parameters->request->Version='1.0';
试一试{
$braspag=新的SoapClient('https://homologacao.pagador.com.br/webservice/pagadorTransaction.asmx?WSDL',
排列(
“跟踪”=>1,
“例外情况”=>1,
'style'=>SOAP\u文档,
'use'=>SOAP\u LITERAL,
“soap_版本”=>soap_1_1,
'编码'=>'UTF-8'
)
);
$AuthorizeTransactionResponse=$braspag->AuthorizeTransaction($parameters);
打印($AuthorizationTransactionResponse);
echo$AuthorizeTransactionResponse->AuthorizeTransactionResponse;
} 
catch(SoapFault$fault){
回显“Ocorreu um erro:”,$fault->getMessage();
}
回声“
”; 打印(参数); 回声“
”; 回声“; echo htmlspecialchars($braspag->\uu getLastRequestHeaders())。“\n”; echo htmlspecialchars($braspag->\uu getLastRequest())。“\n”; echo“Response:\n”.htmlspecialchars($braspag->\uu getLastResponseHeaders())。“\n”; echo htmlspecialchars($braspag->\uu getLastResponse())。“\n”; 回声“;
答复:

  <s:complexType name="PaymentDataRequest" abstract="**true**">
    <s:sequence>
      <s:element minOccurs="1" maxOccurs="1" name="PaymentMethod" type="s:short"/>
      <s:element minOccurs="1" maxOccurs="1" name="Amount" type="s:long"/>
      <s:element minOccurs="0" maxOccurs="1" name="Currency" type="s:string"/>
      <s:element minOccurs="0" maxOccurs="1" name="Country" type="s:string"/>
      <s:element minOccurs="0" maxOccurs="1" name="AdditionalDataCollection" type="tns:ArrayOfAdditionalDataRequest"/>
    </s:sequence>

xxxxxxxx
真的
Test0003
74025d35-2bae-48cb-b84e-07e5a1df4a50
40dd42b0-7d86-4c90-ac0c-266e454bc2fc
997
100
0118041611250
20130118041611250
6.
手术成功
0
来自WSDL链接

我只能推测:



PaymentDataRequest是抽象的;如果您使用像我这样的SOAP UI在开始实际实现之前对Braspag进行第一次测试,那么您需要扩展PaymentDataRequest的CreditCardDataRequest

如上所述,SparKotॐ

并添加缺少的参数

0
1.
0
1.
买办
0000000000000001
999
05/2013

我怎么能给他打电话$参数->请求->支付数据收集->支付数据请求->信用卡数据请求->显然PHP当时出现了问题(2009年);不支持此功能。它仍然盛行吗?[PHP错误报告]()这个XML真的是由您的代码生成的吗?我看不到将PaymentDataRequest类型设置为CreditCardDataRequest(但SoapClient可能会根据使用的字段神奇地找到合适的类型…?)。我不知道,但我会检查!谢谢
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <AuthorizeTransactionResponse xmlns="https://www.pagador.com.br/webservice/pagador">
         <AuthorizeTransactionResult>
            <CorrelationId>xxxxxxxx</CorrelationId>
            <Success>true</Success>
            <ErrorReportDataCollection/>
            <OrderData>
               <OrderId>Test0003</OrderId>
               <BraspagOrderId>74025d35-2bae-48cb-b84e-07e5a1df4a50</BraspagOrderId>
            </OrderData>
            <PaymentDataCollection>
               <PaymentDataResponse xsi:type="CreditCardDataResponse">
                  <BraspagTransactionId>40dd42b0-7d86-4c90-ac0c-266e454bc2fc</BraspagTransactionId>
                  <PaymentMethod>997</PaymentMethod>
                  <Amount>100</Amount>
                  <AcquirerTransactionId>0118041611250</AcquirerTransactionId>
                  <AuthorizationCode>20130118041611250</AuthorizationCode>
                  <ReturnCode>6</ReturnCode>
                  <ReturnMessage>Operation Successful</ReturnMessage>
                  <Status>0</Status>
                  <CreditCardToken xsi:nil="true"/>
               </PaymentDataResponse>
            </PaymentDataCollection>
         </AuthorizeTransactionResult>
      </AuthorizeTransactionResponse>
   </soap:Body>
</soap:Envelope>
  <s:complexType name="PaymentDataRequest" abstract="**true**">
    <s:sequence>
      <s:element minOccurs="1" maxOccurs="1" name="PaymentMethod" type="s:short"/>
      <s:element minOccurs="1" maxOccurs="1" name="Amount" type="s:long"/>
      <s:element minOccurs="0" maxOccurs="1" name="Currency" type="s:string"/>
      <s:element minOccurs="0" maxOccurs="1" name="Country" type="s:string"/>
      <s:element minOccurs="0" maxOccurs="1" name="AdditionalDataCollection" type="tns:ArrayOfAdditionalDataRequest"/>
    </s:sequence>
<pag:ServiceTaxAmount>0</pag:ServiceTaxAmount>
<pag:NumberOfPayments>1</pag:NumberOfPayments>
<pag:PaymentPlan>0</pag:PaymentPlan>
<pag:TransactionType>1</pag:TransactionType>
<pag:CardHolder>Comprador de Teste</pag:CardHolder>
<pag:CardNumber>0000000000000001</pag:CardNumber>
<pag:CardSecurityCode>999</pag:CardSecurityCode>
<pag:CardExpirationDate>05/2013</pag:CardExpirationDate>
<pag:CreditCardToken />
<pag:SaveCreditCard />