带有certifcate的PHP soap请求

时间:2016-11-25 17:11:02

标签: php soap

   $method ='MerchantFinancialOperationWS';


    $configs = array(
        'soap_version' => SOAP_1_2,
        'cache_wsdl' => WSDL_CACHE_NONE,
        'exceptions' => false,
        'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
        'local_cert' => $cert_file,
        'passphrase' => $cert_password
    );
    if($debug) $configs['trace'] = true;

    if(substr($url, -5) != '?WSDL') $url.= '?WSDL';
    $webService = new SoapClient($url, $configs);

$data = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:fin="http://financial.services.merchant.channelmanagermsp.sibs/">
    <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
        <wsa:Action>http://financial.services.merchant.channelmanagermsp.sibs/MerchantFinancialOperationWS/requestFinancialOperationRequest</wsa:Action>
        <wsa:ReplyTo>
            <wsa:Address>https://enderecodeteste.pt</wsa:Address>
        </wsa:ReplyTo>
    </soapenv:Header>
    <soapenv:Body>
        <fin:requestFinancialOperation>
            <arg0>
                <messageType>N0003</messageType>
                <aditionalData>TESTE</aditionalData>
                <alias>
                    <aliasName>351#994999999</aliasName>
                    <aliasTypeCde>001</aliasTypeCde>
                </alias>
                <financialOperation>
                    <amount>400</amount>
                    <currencyCode>9782</currencyCode>
                    <operationTypeCode>022</operationTypeCode>
                    <merchantOprId>11111</merchantOprId>
                </financialOperation>
                <merchant>
                    <iPAddress>255.255.255.255</iPAddress>
                    <posId>880924 </posId>
                </merchant>
                <messageProperties>
                    <channel>01</channel>
                    <apiVersion>1</apiVersion>
                    <channelTypeCode>VPOS</channelTypeCode>
                    <networkCode>MULTIB</networkCode>
                    <serviceType>01</serviceType>
                    <timestamp>2014-10-31T13:58:49.2934+01:00</timestamp>
                </messageProperties>
            </arg0>
        </fin:requestFinancialOperation>
    </soapenv:Body>
</soapenv:Envelope>';
  $result = $webService->requestFinancialOperation($data);

我一直在尝试使用pem证书来实现肥皂请求,而我只是想出了想法。我知道我的代码应该是错的,但我不知道正确的方向是什么。我一直在研究,但发现很少有没有关于此的文档,我必须使用的网络服务背后的团队也无法提供帮助。

我已经可以使用SoapUI与服务进行通信了,所以我知道web服务正常工作

1 个答案:

答案 0 :(得分:0)

部分问题是您在不需要时发送XML。 PHP的内置SOAP客户端将为您处理XML,因此您可以专注于对象(SOAP中的O!)。您需要构造一个数据结构(对象或数组)并将其传递给您要运行的操作。首先查找您想要使用的操作的签名:

$webService = new SoapClient($url, $configs);
var_dump($webService->__getFunctions());

这为您提供了API - 请注意,它指示了输入参数和输出中所需的数据结构。要查看这些数据结构的样子:

var_dump($webService->__getTypes());

现在,您可以构建一个具有相同字段和结构的PHP对象并将其传入。您的代码将按以下方式显示:

$webService = new SoapClient($url, $configs);
$parameter = new stdClass();
$parameter->someField = 'N0003';
$parameter->anotherField = 'TESTE';
$result = $webService->requestFinancialOperation($parameter);