微信小店的後台中提供了訂單查詢功能,但只有商家能使用,如果用戶需要查看自己的訂單,則要使用微信小店的接口來開發實現。這需要用到根據訂單狀態/創建時間獲取訂單詳情的接口。
根據訂單狀態/創建時間獲取訂單詳情的接口如下。
https:// api.weixin.qq.com/merchant/order/getbyid?access_token=ACCESS_TOKEN
該接口的POST數據格式如下,參數說明如表10-3所示。
{ "status": 2, "begintime": 1397130460, "endtime": 1397130470 }
表10-3 訂單查詢接口的參數說明
返回數據格式如下,參數說明如表10-4所示。
{ "errcode": 0, "errmsg": "success", "order_list": [ { "order_id": "7197417460812533543", "order_status": 6, "order_total_price": 6, "order_create_time": 1394635817, "order_express_price": 5, "buyer_openid": "oDF3iY17NsDAW4UP2qzJXPsz1S9Q", "buyer_nick": "likeacat", "receiver_name": "方倍", "receiver_province": "廣東省", "receiver_city": "廣州市", "receiver_address": "華景路一號南方通信大廈5樓", "receiver_mobile": "123456", "receiver_phone": "123456", "product_id": "pDF3iYx7KDQVGzB7kDg6Tge5OKFo", "product_name": "《微信公眾平台開發最佳實踐》", "product_price": 1, "product_sku": "10000983:10000995;10001007:10001010", "product_count": 1, "product_img": "http:// mmbiz.qpic.cn/mmbiz/4whpV1VZl2icND8WwMThBEcehjh Dv2icY4GrDSG5RLM3B2qd9kOicWGVJcsAhvXfibhWRNoGOvCfMC33G9z5yQr2Qw/0", "delivery_id": "1900659372473", "delivery_company": "059Yunda", "trans_id": "1900000109201404103172199813" }, { "order_id": "7197417460812533569", "order_status": 8, "order_total_price": 1, "order_create_time": 1394636235, "order_express_price": 0, "buyer_openid": "oDF3iY17NsDAW4UP2qzJXPsz1S9Q", "buyer_nick": "likeacat", "receiver_name": "張三", "receiver_province": "廣東省", "receiver_city": "廣州市", "receiver_address": "華景路一號南方通信大廈5樓", "receiver_mobile": "123456", "receiver_phone": "123456", "product_id": "pDF3iYx7KDQVGzB7kDg6Tge5OKFo", "product_name": "《教爸爸媽媽用微信》", "product_price": 1, "product_sku": "1075741873:1079742377", "product_count": 1, "product_img": "http:// mmbiz.qpic.cn/mmbiz/4whpV1VZl2icND8WwMThBEcehjh Dv2icY4GrDSG5RLM3B2qd9kOicWGVJcsAhvXfibhWRNoGOvCfMC33G9z5yQr2Qw/0", "delivery_id": "1900659372473", "delivery_company": "059Yunda", "trans_id": "1900000109201404103172199813" } ] }
表10-4 訂單查詢接口返回內容的參數說明
為了在微信中實現訂單查詢,需要先將一個菜單設置為「訂單查詢」,該菜單的類型為「CLICK」,key值為「WDDD」。
菜單的實現代碼如下。
1 require_once('weixin.class.php'); 2 $weixin = new class_weixin; 3 4 $button = array('type' => "view", 5 'name' => urlencode("微信小店"), 6 'url' => "http:// mp.weixin.qq.com/bizmall/mallshelf?id=&t=mall/ list&biz=MzANDQxNDUwNQ==&shelf_id=1&showwxpaytitle=1#wechat_ redirect", 7 ); 8 $button = array('name' => urlencode("更多"), 9 'sub_button' => array(array('type' => "click", 10 'name' => urlencode("我的訂單"), 11 'key' => urlencode("WDDD") 12 ), 13 ) 14 ); 15 $menu = urldecode(json_encode(array('button' => $button))); 16 var_dump($weixin->create_menu($menu));
當用戶點擊「我的訂單」時,微信接口將接收到這一點擊事件通知,並且調用微信小店的訂單查詢接口來查詢當前用戶的訂單信息,實現代碼如下。
1 // 接收事件消息 2 private function receiveEvent($object) 3 { 4 $content = ""; 5 switch ($object->Event) 6 { 7 case "subscribe": 8 $content = "歡迎關注方倍工作室"; 9 break; 10 case "CLICK": 11 switch ($object->EventKey) 12 { 13 case "WDDD": 14 require_once('weixin.class.php'); 15 $weixin = new class_weixin; 16 $openid = strval($object->FromUserName); 17 $orderArr = $weixin->get_detail_by_filter("{}"); 18 if ($orderArr["errcode"] == -1){ 19 $weixin->send_custom_message($openid, "text", "系統繁忙, 請稍後再試!"); 20 } 21 else if (count($orderArr["order_list"]) == 0){ 22 $weixin->send_custom_message($openid, "text", "沒有查詢 到訂單記錄!"); 23 }else{ 24 $data = array; 25 $data = array("title"=>urlencode("我的訂單"), "description"=>"", "picurl"=>"", "url" =>""); 26 foreach ($orderArr["order_list"] as $index => $item){ 27 if($item["buyer_openid"] == $openid){ 28 $title = "編號:".$item["order_id"]."\n時間:". date("Y-m-d H:i:s",$item["order_create_time"]) ."\n名稱:".$item["product_name"]."\n總:¥".($item ["product_price"] / 100)." × ".$item["product_ count"]." + ¥".($item["order_express_price"] / 100)." = ¥".($item["order_total_price"] / 100); 29 30 switch ($item["order_status"]) 31 { 32 case 2: 33 $orderstatus = "待發貨"; 34 break; 35 case 3: 36 $orderstatus = "已發貨"; 37 break; 38 case 5: 39 $orderstatus = "已完成"; 40 break; 41 case 8: 42 $orderstatus = "維權中"; 43 break; 44 default: 45 $orderstatus = "未知狀態碼". $item["order_status"]; 46 break; 47 } 48 $title .= "\n狀態:".$orderstatus; 49 $url = ""; 50 if ($item["order_status"] == 3 && !empty($item ["delivery_company"])){ 51 switch ($item["delivery_company"]) 52 { 53 case "Fsearch_code": 54 $expressName = "郵政EMS"; 55 break; 56 case "002shentong": 57 $expressName = "申通快遞"; 58 break; 59 case "066zhongtong": 60 $expressName = "中通速遞"; 61 break; 62 case "056yuantong": 63 $expressName = "圓通速遞"; 64 break; 65 case "042tiantian": 66 $expressName = "天天快遞"; 67 break; 68 case "003shunfeng": 69 $expressName = "順豐速運"; 70 break; 71 case "059Yunda": 72 $expressName = "韻達快運"; 73 break; 74 case "064zhaijisong": 75 $expressName = "宅急送"; 76 break; 77 case "020huitong": 78 $expressName = "匯通快運"; 79 break; 80 case "zj001yixun": 81 $expressName = "易迅快遞"; 82 break; 83 default: 84 $expressName = "未知物流公司,ID:". $item["delivery_company"]; 85 break; 86 } 87 $title .= "\n物流:".$expressName." ".$item ["delivery_id"]; 88 if(preg_match("/^\d{3}[A-Za-z]{2,10}$/", $item["delivery_company"])){ 89 $companyEn = trim(substr($item["delivery_ company"],3,strlen($item["delivery_ company"]))); 90 $url = "http:// m.kuaidi100.com/result. jsp?com=".strtolower($companyEn)."&nu=". $item["delivery_id"]; 91 } 92 } 93 $data = array("title"=>urlencode($title), "description"=>"", "picurl"=>"", "url" =>$url); 94 } 95 if (count($data) >=9){break;} 96 } 97 98 if (count($data) == 1){ 99 $result = $weixin->send_custom_message($openid, "text", "沒有查詢到你的訂單記錄!"); 100 }else{ 101 $result = $weixin->send_custom_message($openid, "news", $data); 102 } 103 } 104 $content = ""; 105 break; 106 default: 107 $content = "空菜單響應!"; 108 break; 109 } 110 break; 111 } 112 if(is_array($content)){ 113 if (isset($content[0])){ 114 $result = $this->transmitNews($object, $content); 115 }else if (isset($content['MusicUrl'])){ 116 $result = $this->transmitMusic($object, $content); 117 } 118 }else{ 119 $result = $this->transmitText($object, $content); 120 } 121 return $result; 122 }
在上述代碼中與訂單查詢通知相關部分的簡要說明如下。
第13行:判斷是否收到訂單查詢事件通知。
第14~17行:引用微信小店SDK,獲取當前的所有訂單信息。
第18~23行:用於查詢訂單接口的異常判斷。
第24~96行:遍歷訂單詳細中的所有訂單列表,將當前用戶的訂單內容填充到微信圖文消息中。
第98~102行:使用客服接口將訂單詳情通過圖文消息方式發送。
我的訂單查詢實現效果如圖10-28所示。