【问题标题】:PHP SOAP API call with XML request带有 XML 请求的 PHP SOAP API 调用
【发布时间】:2017-07-13 09:19:45
【问题描述】:

我以前没有使用过 SOAP API。 我想使用 XML 数据请求执行 SOAP API。 我试过但没有成功。 https://www.getpayments.com/docs/#processrealtimetokenpayment 这是我要调用的支付网关 URL。

我使用了以下代码:

$xml = '<?xml version="1.0" encoding="utf-8"?>
  <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:px="https://px.ezidebit.com.au/">
  <soapenv:Header />
  <soapenv:Body>
    <px:ProcessRealtimeTokenPayment>
      <px:digitalKey>715C0799-307B-4BF4-7B1D-4153201FC0A1</px:digitalKey>
      <px:token>3723758</px:token>
      <px:paymentAmountInCents>1600</px:paymentAmountInCents>
      <px:customerName>Hiren Patel</px:customerName>
      <px:paymentReference>123456789</px:paymentReference>
    </px:ProcessRealtimeTokenPayment>
  </soapenv:Body>
</soapenv:Envelope>';
$soapUrl = "https://api.demo.ezidebit.com.au/v3-5/pci?singleWsdl";
$soap_do = curl_init(); 
curl_setopt($soap_do, CURLOPT_URL,            $soapUrl );   
curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($soap_do, CURLOPT_TIMEOUT,        10); 
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);  
curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($soap_do, CURLOPT_POST,           true ); 
curl_setopt($soap_do, CURLOPT_POSTFIELDS,    $xml); 
curl_setopt($soap_do, CURLOPT_HTTPHEADER,     array('Content-Type: text/xml; charset=utf-8', 'Content-Length: '.strlen($xml) )); 
$result = curl_exec($soap_do);
$err = curl_error($soap_do);  
curl_close($soap_do);
echo "<pre>";print_r($result);
die;

它抛出以下错误:

a:ActionNotSupported带有Action的消息 由于接收方无法处理“ProcessRealtimeTokenPayment” 到 EndpointDispatcher 的 ContractFilter 不匹配。这可能是 因为合同不匹配(不匹配的操作之间 发送方和接收方)或发送方之间的绑定/安全不匹配 和接收器。检查发送方和接收方是否相同 合同和相同的约束力(包括安全要求,例如 Message, Transport, None).Curl 调用成功。

请任何人都可以指导我吗? 提前谢谢你。

【问题讨论】:

  • 为什么不使用 SoapClient? php.net/manual/en/class.soapclient.php
  • @IvoP 对不起,我不熟悉它。你能举个例子吗?
  • 弗拉基米尔已经做到了。看看你的代码有多少可读性。而且您不必担心维护输入中特殊字符的 xml 完整性。
  • wdsl 提到了证书。你提供了吗?

标签: php xml web-services soap


【解决方案1】:

这是一个使用 SoapClient 的示例:

<?php

$soap = new SoapClient(
    'https://api.demo.ezidebit.com.au/v3-5/pci?singleWsdl',
    array(
        'trace' => 1,
        'exceptions' => 1
    )
);

$soap->ProcessRealtimeCreditCardPayment(
    array(
        'DigitalKey' => '715C0799-307B-4BF4-7B1D-4153201FC0A1',
        'Token' => '3723758',
        'PaymentAmountInCents' => '1600',
        'CustomerName' => 'Hiren Patel',
        'PaymentReference' => '123456789'
    )
);

echo $soap->__getLastRequest() . "\n";
echo $soap->__getLastResponse() . "\n";

您可以将其保存到文件中并运行:

php file.php

【讨论】:

    猜你喜欢
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多