淘宝奇门接口PHP例子

淘宝奇门接口PHP例子奇门为淘宝的一个 ERP EnterpriseRe 和 WMS WarehouseMan 的一个标准中间件接口

大家好,欢迎来到IT知识分享网。

介绍

使用案例

传统做法:我有一间成人用品的工厂,网友小明在我的网上商城里面购买了一个充气娃娃,现在的流程是小梅查到商城有订单后,小梅去仓库拿对应的商品进行包装后,然后再跑去快递公司发货给小明。

新的做法:我有一间成人用品的工厂,我先把一批充气娃娃压到了申通快递公司,然后叫申通的工作人员清点好我压的充气娃娃的数量,并录入WMS(当然,这个快递公司的WMS已经接入到奇门)。网友小明在我的网上商城里面购买了一个充气娃娃,现在的流程是当小明下单并支付后,商城系统利用奇门接口把【订单信息和商品所在仓库的信息】传递给奇门(当然,账号是我的工厂的奇门账号),奇门也给对应编号的WMS系统发送订单信息,申通公司知道有新订单要发出后,拿对应的商品进行包装后,发货给小明,并在WMS填写好该订单发货的信息,然后传递给奇门,奇门再传递给商城系统,商城系统对应的接口程序修改小明的订单状态为已发货并修改快递单号和快递公司。


文件:

奇门请求body创建类 文件名Qimenbody.class.php

<?php // 奇门请求body创建类 Class Qimenbody { 
      // 得到发送XML public function getBody($name, $param) { 
      switch ($name) { // 商品同步接口  case "taobao.qimen.singleitem.synchronize": return $this->singleitemSynchronize($param); break; // 组合商品接口  case "taobao.qimen.combineitem.synchronize": return $this->combineitemSynchronize($param); break; // 入库单创建接口  case "taobao.qimen.entryorder.create": return $this->entryorderCreate($param); break; // 入库单查询接口 case "taobao.qimen.entryorder.query": return $this->entryorderQuery($param); break; // 退货入库单创建接口  case "taobao.qimen.returnorder.create": return $this->returnorderCreate($param); break; // 退货入库单查询接口  case "taobao.qimen.returnorder.query": return $this->returnorderQuery($param); break; // 出库单创建接口 case "taobao.qimen.stockout.create": return $this->stockoutCreate($param); break; // 出库单查询接口 case "taobao.qimen.stockout.query": return $this->stockoutQuery($param); break; // 发货单创建接口  case "taobao.qimen.deliveryorder.create": return $this->deliveryorderCreate($param); break; // 发货单查询接口  case "taobao.qimen.deliveryorder.query": return $this->deliveryorderQuery($param); break; // 订单流水查询接口  case "taobao.qimen.orderprocess.query": return $this->orderprocessQuery($param); break; // 订单状态查询接口 (批量) case "taobao.qimen.orderstatus.batchquery": return $this->orderstatusBatchquery($param); break; // 发货单缺货查询接口 case "taobao.qimen.itemlack.query": return $this->itemlackQuery($param); break; // 取消某些创建的单据, 如入库单、出库单、退货单等 case "taobao.qimen.order.cancel": return $this->orderCancel($param); break; // 库存查询接口 case "taobao.qimen.inventory.query": return $this->inventoryQuery($param); break; // 库存盘点查询接口 case "taobao.qimen.inventorycheck.query": return $this->inventorycheckQuery($param); break; // 仓内加工单创建接口  case "taobao.qimen.storeprocess.create": return $this->storeprocessCreate($param); break; // 菜鸟自动流转查询接口 (扩展) case "taobao.qimen.autotransfer.query": return $this->autotransferQuery($param); break; default: exit('No match body!'); break; } } // 创建发货单BODY, 其他BODY参照白皮书 public function deliveryorderCreate($param) { 
      if ( empty($param) ) { exit('参数为空!'); } $deliveryOrderCode = $param['order_sn']; // 出库单号, string (50) , 必填 $preDeliveryOrderCode = $param['order_sn']; // 原出库单号(ERP分配), string (50) , 条件必填,条件为换货出库 $preDeliveryOrderId = $param['order_sn']; // 原出库单号(WMS分配), string (50) , 条件必填,条件为换货出库 $orderType = "JYCK"; // 出库单类型, string (50) , 必填, JYCK=一般交易出库单, HHCK=换货出库单, BFCK=补发出库单,QTCK=其他出库单 $warehouseCode = "A"; // 仓库编码, string (50),必填 ,统仓统配等无需ERP指定仓储编码的情况填OTHER $sourcePlatformCode = "OTHER"; // 订单来源平台编码, string (50) , 必填,TB= 淘宝 、TM=天猫 、JD=京东、DD=当当、PP=拍拍、YX=易讯、EBAY=ebay、=网购、AMAZON=亚马逊、SN=苏宁、GM=国美、WPH=唯品会、JM=聚美、LF=乐蜂、MGJ=蘑菇街、JS=聚尚、PX=拍鞋、YT=银泰、YHD=1号店、VANCL=凡客、YL=邮乐、YG=优购、1688=阿里巴巴、POS=POS门店、OTHER=其他, (只传英文编码) $createTime = date('Y-m-d H:i:s'); // 发货单创建时间, string (19) , YYYY-MM-DD HH:MM:SS, 必填 $placeOrderTime = $param['add_time']; // 前台订单 (店铺订单) 创建时间 (下单时间) , string (19) , YYYY-MM-DD HH:MM:SS, 必填 $operateTime = date('Y-m-d H:i:s'); // 操作 (审核) 时间, string (19) , YYYY-MM-DD HH:MM:SS, 必填 $shopNick = $param['shopNick']; // 店铺名称, string (200) , 必填 $logisticsCode = "STO"; // 物流公司编码, string (50) , SF=顺丰、EMS=标准快递、EYB=经济快件、ZJS=宅急送、YTO=圆通 、ZTO=中通 (ZTO) 、HTKY=百世汇通、UC=优速、STO=申通、TTKDEX=天天快递 、QFKD=全峰、FAST=快捷、POSTB=邮政小包 、GTO=国通、YUNDA=韵达、JD=京东配送、DD=当当宅配、OTHER=其他,必填, (只传英文编码) $sendName = $param['sendName']; // 姓名, string (50) , 必填 $sendMobile = $param['sendMobile']; // 移动电话, string (50) , 必填 $sendProvince = $param['sendProvince']; // 省份, string (50) , 必填 $sendCity = $param['sendCity']; // 城市, string (50) , 必填 $sendDetailAddress = $param['sendDetailAddress']; // 详细地址, string (200) , 必填 $name = $param['name']; // 姓名, string (50) , 必填 $mobile = $param['mobile']; // 移动电话, string (50) , 必填 $province = $param['province']; // 省份, string (50) , 必填 $city = $param['city']; // 城市, string (50) , 必填 $detailAddress = $param['address']; // 详细地址, string (200) , 必填 $type = "INVOICE"; // 发票类型, string (50) , INVOICE=普通发票,VINVOICE=增值税普通发票, EVINVOICE=电子增票, 条件必填 (条件为invoiceFlag为Y) $ownerCode = "123"; // 货主编码, string (50) , 必填 $itemCode = $param['goods_id']; // 商品编码, string (50) , 必填 $itemId = "1"; // 仓储系统商品编码, string (50) ,条件必填 $planQty = $param['goods_number']; // 应发商品数量, int, 必填 $actualPrice = $param['total']; // 实际成交价, double (18, 2) , 必填 $createOrder = <<<EOF <?xml version="1.0" encoding="utf-8"?> <request> <deliveryOrder> <deliveryOrderCode>{$deliveryOrderCode}</deliveryOrderCode> <preDeliveryOrderCode>{$preDeliveryOrderCode}</preDeliveryOrderCode> <preDeliveryOrderId>{$preDeliveryOrderId}</preDeliveryOrderId> <orderType>{$orderType}</orderType> <warehouseCode>{$warehouseCode}</warehouseCode> <sourcePlatformCode>{$sourcePlatformCode}</sourcePlatformCode> <createTime>{$createTime}</createTime> <placeOrderTime>{$placeOrderTime}</placeOrderTime> <operateTime>{$operateTime}</operateTime> <shopNick>{$shopNick}</shopNick> <logisticsCode>{$logisticsCode}</logisticsCode> <senderInfo> <name>{$sendName}</name> <mobile>{$sendMobile}</mobile> <province>{$sendProvince}</province> <city>{$sendCity}</city> <detailAddress>{$sendDetailAddress}</detailAddress> </senderInfo> <receiverInfo> <name>{$name}</name> <mobile>{$mobile}</mobile> <province>{$province}</province> <city>{$city}</city> <detailAddress>{$detailAddress}</detailAddress> </receiverInfo> </deliveryOrder> <orderLines> <orderLine> <ownerCode>{$ownerCode}</ownerCode> <itemCode>{$itemCode}</itemCode> <itemId>{$itemId}</itemId> <planQty>{$planQty}</planQty> <actualPrice>{$actualPrice}</actualPrice> </orderLine> </orderLines> </request> EOF; return $createOrder; } // ........................................ // ........................................ // ........................................ // ........................................ // ........................................ // 其余的得到BODY函数,请参照白皮书编写。 // ........................................ // ........................................ // ........................................ // ........................................ // ........................................ }

值得注意的问题:提交BODY的XML里面,若有你业务逻辑不需要填写的地方,要去掉那一项。不然提交后的返回值是失败的。

奇门接口类 文件名Qimen.class.php

<?php // 奇门类 class Qimen { 
     private $secret = '11111'; // 奇门提供的安全码(签名用) private $param = array( // 按接口提供的逐一填写 "format" => 'xml', "app_key" => '0000000000', "v" => '2.0', "sign_method" => 'md5', "customerId" => '00000000000000', ); / * 签名 * @param $secret 安全码 * @param $param 提交参数 * @param $body 提交文档内容 */ public function sign($secret, $param, $body) { 
     if ( empty($body) ) { exit('Body can\'t empty!'); } if ( empty($secret) ) { exit('Secret error!'); } ksort($param); $outputStr = ''; foreach ($param as $k => &$v) { if ( empty($v) ) { exit('Param can\'t error!'); } $outputStr .= $k . $v; } $outputStr = $secret . $outputStr . $body . $secret; return strtoupper(md5($outputStr)); } // 业务逻辑 public function request() { 
     // --------------------------------------------------------------------------------------- // // // // // // // 写业务逻辑..为省代码篇幅,要交给奇门去请求的(也就是拼接到BODY的) 使用数组 $bodyParam 传参数合并BODY $bodyParam = array( 'order_sn' => '', 'add_time' => '', 'shopNick' => '小小网店', 'sendName' => '李梅', 'sendMobile' => '0', 'sendProvince' => '广东省', 'sendCity' => '云浮市', 'sendDetailAddress' => '云安县六都镇XXX号', 'name' => '小明', 'mobile' => '0', 'province' => '广东省', 'city' => '广州市', 'address' => '科韵路XXX号', 'goods_id' => "10086", 'goods_number' => "5", 'total' => "500", ); // // // // // // // // --------------------------------------------------------------------------------------- // 交给奇门 require('./Qimenbody.class.php'); $qimenBody = new \Qimenbody(); $method = "taobao.qimen.deliveryorder.create"; $body = $qimenBody->getBody($method, $bodyParam); // 创建发货单BODY $this->param['method'] = $method; // 此处填写要应对应BODY,具体参考白皮书的 ‘ERP调用的奇门API名称’ $this->param['timestamp'] = date("Y-m-d H:i:s"); // 时间 $this->param['sign'] = $this->sign($this->secret, $this->param , $body); // 利用body签名 $url = "http://qimenapi.tbsandbox.com/top/router/qimen/service?" . http_build_query($this->param); $return = $this->httpCurl($url, $body, 'post'); // --------------------------------------------------------------------------------------- // // // // // // // // 处理返回值信息,返回信息请查看白皮书中的出参规范 echo $return; // // // // // // // // --------------------------------------------------------------------------------------- } / * 请求数据 * @param $url 请求地址 * @param $data 提交数据 * @param $requestType 请求类型 */ public function httpCurl($url, $data, $requestType = 'get') { 
     //初始化curl $ch = curl_init(); //设置超时 curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); if (strtolower($requestType) == 'post') { curl_setopt ( $ch, CURLOPT_POST, 1 ); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data ); } $return = curl_exec($ch); curl_close($ch); return $return; } }

使用例子

$qimen = new \Qimen(); $qimen->request();

若想将奇门当成第三方类库使用的话,请将上面类的request方法替换成下面的代码。

 public function request($method$bodyParam) { 
     // 交给奇门 require('./Qimenbody.class.php'); $qimenBody = new \Qimenbody(); $body = $qimenBody->getBody($method, $bodyParam); // 创建发货单BODY $this->param['method'] = $method; // 此处填写要应对应BODY,具体参考白皮书的 ‘ERP调用的奇门API名称’ $this->param['timestamp'] = date("Y-m-d H:i:s"); // 时间 $this->param['sign'] = $this->sign($this->secret, $this->param , $body); // 利用body签名 $url = "http://qimenapi.tbsandbox.com/top/router/qimen/service?" . http_build_query($this->param); $return = $this->httpCurl($url, $body, 'post'); return $return; } 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/132965.html

(0)
上一篇 2025-07-27 16:15
下一篇 2025-07-27 16:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信