magento api新增方法

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

Arguments:

Type Name Description
string sessionId Session ID
string shipmentIncrementId 
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:

Type Name Description
string sessionId Session ID
string
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值