How to build a correct SOAP request with PHP

后端 未结 2 608
温柔的废话
温柔的废话 2020-12-03 09:21

I need to format/build a request for this SOAP \"service\": http://api.notificationmessaging.com/NMSOAP/NotificationService?wsdl

Ideally I would like to use the nati

相关标签:
2条回答
  • 2020-12-03 09:36

    "Is there a more direct approach where I could write the XML?"

    By using a SoapVar and setting the encode parameter of the constructor to XSD_ANYXML you can write the raw XML.

    There should be a way where the WSDL helps build the XML though.

    You could try something like this:

    $wsdl   = "http://api.notificationmessaging.com/NMSOAP/NotificationService?wsdl"; 
    $client = new SoapClient($wsdl, array(  'soap_version' => SOAP_1_1,
                                            'trace' => true,
                                          )); 
    try {
    
        $xml = '<arg0>
                <content>
                    <entry>
                        <key>1</key>
                        <value>
                        <![CDATA[
                        <table width="600">
                        <tr>
                        <td>
                        <font size="2" face="Arial">Our powerful algorithms already
                        found a matching profile that matches your criteria:
                        <br>Celina72&nbsp;</font>
                        <img src="http://mypath/to/my/image.gif" width="50"
                        height="50" border="0" />
                        </td>]]></value>
                    </entry>
                </content>
                <dyn>
                    <entry>
                        <key>FIRSTNAME</key>
                        <value>john</value>
                    </entry>
                </dyn>
                <email>johnblum@flowerpower.com</email>
                <encrypt>BdX7CqkmjSivyBgIcZoN4sPVLkx7FaXGiwsO</encrypt>
                <notificationId>6464</notificationId>
                <random>985A8B992601985A</random>
                <senddate>2008-12-12T00:00:00</senddate>
                <synchrotype>NOTHING</synchrotype>
                <uidkey>EMAIL</uidkey>
            </arg0>';
    
        $args = array(new SoapVar($xml, XSD_ANYXML));    
        $res  = $client->__soapCall('sendObject', $args);
        return $res;
    } catch (SoapFault $e) {
        echo "Error: {$e}";
    }
    
    echo "<hr>Last Request";
    echo "<pre>", htmlspecialchars($client->__getLastRequest()), "</pre>";
    
    0 讨论(0)
  • 2020-12-03 09:53

    i know that the topic is about 1 year old, but i find some good informations in it, that give me a very good help , and i finaly succed to make it work with the php method sendObject() so i hope my contribution will help others people too...

    at first the call of sendObject() this way : $client->__soapCall seems not working at all you have to call it directly : $client->sendObject

    in this topic, i think that it is a using of the API of emailvision (smartfocus, now...) this method sendObject does not need a generated token by openApiConnection()

    oki, now , it is the code to make it work

    <?php
    
    
        $email = 'johann.******@gmail.com';
        $encrypt = '******************************';
        $notification_id = '**************';
        $random = '********************';
        $senddate = '2013-09-09T00:00:00';
        $synchrotype = 'NOTHING';
        $uidkey = 'EMAIL';
    
    
        $params = array(
            'arg0' => array(
                'content' => array( 1 => 'mon_test'),
                'dyn' => array( 'FIRSTNAME' => 'yoyo'),
                'email' => $email,
                'encrypt' => $encrypt,
                'notificationId' => $notification_id,
                'random' => $random,
                'senddate' => $senddate,
                'synchrotype' => $synchrotype,
                'uidkey' => $uidkey
            )
        );
    
    
        $client = new       SoapClient('http://api.notificationmessaging.com/NMSOAP/NotificationService?wsdl', array(  'trace' => 1, 'exceptions' => 0  ) );
    
        $res = $client->sendObject( $params );
    
    echo "<br /><br /><br />";
    echo "REQUEST 1 :" . htmlspecialchars($client->__getLastRequest()) . "<br />";
    echo "RESPONSE 1 :" . htmlspecialchars($client->__getLastResponse()) . "<br /><br /><br />";
    

    ?>

    you have to know that $encrypt ,$notification_id , $random are generated by creating a transactionnal message, you can get this informations in the interface of campagn commander

    take care of the schema of input xml, there is a node arg0, then you have to make a level arg0 in your array parameters

    to make it work directly with xml :

    <?php
    $wsdl   = "http://api.notificationmessaging.com/NMSOAP/NotificationService?wsdl"; 
    $client = new SoapClient($wsdl, array(  'soap_version' => SOAP_1_1, 'trace' => true,  )); 
    try {
    
        $xml = '
    
                <ns1:sendObject>
                    <arg0>
    
                        <content>
                            <entry>
                                <key>1</key>
                                <value>
                                    <![CDATA[
                                    <table width="600">
                                    <tr>
                                    <td>
                                    <font size="2" face="Arial">Our powerful algorithms already found a matching profile that matches your criteria:
                                    <br>Celina72&nbsp;</font>
                                    <img src="http://mypath/to/my/image.gif" width="50" height="50" border="0" />
                                    </td>]]>
                                </value>
                            </entry>
                        </content>
    
                        <dyn>
                            <entry>
                                <key>FIRSTNAME</key>
                                <value>john</value>
                            </entry>
                        </dyn>
    
                        <email>johann*******@gmail.com</email>
                        <encrypt>*********************</encrypt>
                        <notificationId>**************</notificationId>
                        <random>**********************</random>
                        <senddate>2008-12-12T00:00:00</senddate>
                        <synchrotype>NOTHING</synchrotype>
                        <uidkey>EMAIL</uidkey>
    
                    </arg0>
                </ns1:sendObject>
    
    
    
            ';
    
        $args = array(new SoapVar($xml, XSD_ANYXML));    
        $res  = $client->__soapCall('sendObject', $args);
        //return $res;
    } 
    catch (SoapFault $e) {
        echo "Error: {$e}";
    }
    
    echo "<hr>Last Request";
    echo "<pre>", htmlspecialchars($client->__getLastRequest()), "</pre>";
    
    echo "<hr>Last Response";
    echo "<pre>", htmlspecialchars($client->__getLastResponse()), "</pre>";
    
    ?>
    

    it s important to write the first node like this : <ns1:sendObject>

    <api:sendObject> does not work

    0 讨论(0)
提交回复
热议问题