magento api新增方法

来源:互联网 发布:穿越火线检测数据异常 编辑:程序博客网 时间:2024/06/05 18:36

我们拿这个方法举例http://devdocs.magento.com/guides/m1x/api/soap/sales/salesOrderShipment/sales_order_shipment.info.html

Arguments:

TypeNameDescriptionstringsessionIdSession IDstringshipmentIncrementId 
Order shipment increment ID传入的参数是shipmentIncrementId。后面我们新增一个方法传入orderIncrementId,返回的内容是一样的。


首先来看一下salesOrderShipmentInfo这个接口在magento里是怎么样的。

3个文件

1.\app\code\core\Mage\Sales\Model\Order\Shipment\Api.php中

/**     * Retrieve shipment information     *     * @param string $shipmentIncrementId     * @return array     */    public function info($shipmentIncrementId)    {        $shipment = Mage::getModel('sales/order_shipment')->loadByIncrementId($shipmentIncrementId);        /* @var $shipment Mage_Sales_Model_Order_Shipment */        if (!$shipment->getId()) {            $this->_fault('not_exists');        }        $result = $this->_getAttributes($shipment, 'shipment');        $result['items'] = array();        foreach ($shipment->getAllItems() as $item) {            $result['items'][] = $this->_getAttributes($item, 'shipment_item');        }        $result['tracks'] = array();        foreach ($shipment->getAllTracks() as $track) {            $result['tracks'][] = $this->_getAttributes($track, 'shipment_track');        }        $result['comments'] = array();        foreach ($shipment->getCommentsCollection() as $comment) {            $result['comments'][] = $this->_getAttributes($comment, 'shipment_comment');        }        return $result;    }
2.\app\code\core\Mage\Sales\etc\api.xml中

<sales_order_shipment>                <title>Shipment API</title>                <model>sales/order_shipment_api</model>                <acl>sales/order/shipment</acl>                <methods>                    <list translate="title" module="sales">                        <title>Retrieve list of shipments by filters</title>                        <method>items</method>                        <acl>sales/order/shipment/info</acl>                    </list>                    <info translate="title" module="sales">                        <title>Retrieve shipment information</title>                        <acl>sales/order/shipment/info</acl>                    </info>                    <info2 translate="title" module="sales">                        <title>Retrieve shipment information2</title>                        <acl>sales/order/shipment/info</acl>                    </info2>                    .....            </sales_order_shipment>
3.\app\code\core\Mage\Sales\etc\wsdl.xml中

<message name="salesOrderShipmentInfoRequest"><part name="sessionId" type="xsd:string" /><part name="shipmentIncrementId" type="xsd:string" /></message><message name="salesOrderShipmentInfoResponse"><part name="result" type="typens:salesOrderShipmentEntity" /></message>#.......<operation name="salesOrderShipmentInfo"><documentation>Retrieve shipment information</documentation><input message="typens:salesOrderShipmentInfoRequest" /><output message="typens:salesOrderShipmentInfoResponse" /></operation>#.......<operation name="salesOrderShipmentInfo"><soap:operation soapAction="urn:{{var wsdl.handler}}Action" /><input><soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /></input><output><soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /></output></operation>

好了,看到上面3个文件,下面我们就新增一个salesOrderShipmentInfo2

要求传入的参数是

Arguments:

TypeNameDescriptionstringsessionIdSession IDstring
orderIncrementId

orderIncrementId
第一步在api.xml文件里,紧接着info新增如下代码:

<info2 translate="title" module="sales">                        <title>Retrieve shipment information2</title>                        <acl>sales/order/shipment/info</acl>                    </info2>
第二部在wsdl.xml里,紧接着salesOrderShipmentInfo新增3段

<!--2016-07-27 start-->    <message name="salesOrderShipmentInfo2Request">        <part name="sessionId" type="xsd:string" />        <part name="orderIncrementId" type="xsd:string" />    </message>    <message name="salesOrderShipmentInfo2Response">        <part name="result" type="typens:salesOrderShipmentEntity" />    </message>    <!--2016-07-27 end-->
        <!--2016-07-27 start-->        <operation name="salesOrderShipmentInfo2">            <documentation>Retrieve shipment information</documentation>            <input message="typens:salesOrderShipmentInfo2Request" />            <output message="typens:salesOrderShipmentInfo2Response" />        </operation>        <!--2016-07-27 end-->
        <!--2016-07-27 start-->        <operation name="salesOrderShipmentInfo2">            <soap:operation soapAction="urn:{{var wsdl.handler}}Action" />            <input>                <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />            </input>            <output>                <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />            </output>        </operation>        <!--2016-07-27 end-->
然后在Api.php文件里,新增一个info2方法,接收orderIncrementId,先通过orderIncrementId获取到shipmentIncrementId。剩下代码就和info()一样了。

/**     * Retrieve shipment information2     *     * @param string $orderIncrementId     * @return array     */    public function info2($orderIncrementId)    {        // 根据订单号先去查询$shipmentIncrementId        $orderIncrementId = (int)$orderIncrementId;        $read= Mage::getSingleton('core/resource')->getConnection('core_read');        $sql = "select increment_id from sales_flat_shipment_grid where order_increment_id=".$orderIncrementId;        $results = $read->fetchAll($sql);        if(!$results[0]['increment_id']){            $this->_fault('not_exists');        }else{            $shipmentIncrementId = $results[0]['increment_id'];        }        $shipment = Mage::getModel('sales/order_shipment')->loadByIncrementId($shipmentIncrementId);        /* @var $shipment Mage_Sales_Model_Order_Shipment */        if (!$shipment->getId()) {            $this->_fault('not_exists');        }        $result = $this->_getAttributes($shipment, 'shipment');        $result['items'] = array();        foreach ($shipment->getAllItems() as $item) {            $result['items'][] = $this->_getAttributes($item, 'shipment_item');        }        $result['tracks'] = array();        foreach ($shipment->getAllTracks() as $track) {            $result['tracks'][] = $this->_getAttributes($track, 'shipment_track');        }        $result['comments'] = array();        foreach ($shipment->getCommentsCollection() as $comment) {            $result['comments'][] = $this->_getAttributes($comment, 'shipment_comment');        }        return $result;    }

完成之后,先刷新缓存在测试。

$url = "http://192.168.9.12/magento/api/v2_soap/?wsdl"; $client = new SoapClient($url);// If somestuff requires api authentification,// then get a session token$session = $client->login('uername', 'password');$result = $client->salesOrderShipmentInfo2($session,100066780);//返回二维数组echo'<pre>';print_r($result);
浏览器访问这个地址:http://192.168.9.12/magento/api/v2_soap/?wsdl

然后ctrl+f搜索:salesOrderShipmentInfo2,发现有了,说明这个方法存在的。













0 0
原创粉丝点击