微信開放平臺語義理解接口調用(http請求)簡單方便,用戶無需掌握語義理解及相關技術,只需根據本身的產品特色,選擇相應的服務便可搭建一套智能語義服務。php
請到「管理中心」建立應用,點擊「建立移動應用」或者「建立網站應用」,填寫相關資料,而後將該應用提交審覈,只有審覈經過的應用才能進行開發。html
註冊完畢,咱們會在 7 個工做日內完成審覈工做。審覈經過以後,開放平臺將分配給該移動應用全局惟一的AppID和AppSecret。html5
http請求方式: GET
git
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
參數 | 是否必須 | 說明 |
---|---|---|
grant_type | 是 | 獲取access_token填寫client_credential |
appid | 是 | 應用的appid |
secret | 是 | 應用的appsecret |
正常狀況下,微信會返回下述JSON數據包。json
{ "access_token":"ACCESS_TOKEN", "expires_in":7200 }
參數 | 說明 |
---|---|
access_token | 獲取到的憑證 |
expires_in | 憑證有效時間,單位:秒 |
錯誤時微信會返回錯誤碼等信息,JSON數據包示例以下(該示例爲AppID無效錯誤):api
{ "errcode":40013, "errmsg":"invalid appid" }
http請求方式: POST(請使用https協議)
微信
https://api.weixin.qq.com/semantic/semproxy/search?access_token=YOUR_ACCESS_TOKEN
POST數據格式:JSON
app
POST數據例子:
{ "query":"查一下明天從北京到上海的南航機票", "city":"北京", "category": "flight,hotel", "appid":"wxaaaaaaaaaaaaaaaa", "uid":"123456" }
輸入參數說明:微信公衆平臺
參數 | 是否必須 | 參數類型 | 說明 |
---|---|---|---|
access_token | 是 | String | 根據appid和appsecret獲取到的token |
query | 是 | String | 輸入文本串 |
category | 是 | String | 須要使用的服務類型,多個用「,」隔開,不能爲空 |
latitude | 見接口協議文檔 | Float | 緯度座標,與經度同時傳入;與城市二選一傳入 |
longitude | 見接口協議文檔 | Float | 經度座標,與緯度同時傳入;與城市二選一傳入 |
city | 見接口協議文檔 | String | 城市名稱,與經緯度二選一傳入 |
region | 見接口協議文檔 | String | 區域名稱,在城市存在的狀況下可省;與經緯度二選一傳入 |
appid | 是 | String | Appid,開發者的惟一標識 |
uid | 否 | String | 用戶惟一id(非開發者id),用戶區分應用下的不一樣用戶(建議填入用戶openid),若是爲空,則沒法使用上下文理解功能。appid和uid同時存在的狀況下,纔可使用上下文理解功能。 |
正常狀況下,微信會返回下述JSON數據包。curl
{ "errcode": 0, "query": "查一下明天從北京到上海的南航機票", "type": "flight", "semantic": { "details": { "start_loc": { "type": "LOC_CITY", "city": "北京市", "city_simple": "北京", "loc_ori": "北京" }, "end_loc": { "type": "LOC_CITY", "city": "上海市", "city_simple": "上海", "loc_ori": "上海" }, "start_date": { "type": "DT_ORI", "date": "2014-03-05", "date_ori": "明天" }, "airline": "中國南方航空公司" }, "intent": "SEARCH" } }
返回參數說明:
參數 | 是否必須 | 參數類型 | 說明 |
---|---|---|---|
errcode | 是 | Int | 表示請求後的狀態 |
query | 是 | String | 用戶的輸入字符串 |
type | 是 | String | 服務的全局類型id,詳見協議文檔中垂直服務協議定義 |
semantic | 是 | Object | 語義理解後的結構化標識,各服務不一樣 |
result | 否 | Array | 部分類別的結果 |
answer | 否 | String | 部分類別的結果html5展現,目前不支持 |
text | 否 | String | 特殊回覆說明 |
更多詳細內容與協議說明,請查看:語義理解接口協議文檔
代碼實現
<?php /* 方倍工做室 http://www.fangbei.org/ CopyRight 2014 All Rights Reserved 微信開放平臺接口SDK */ /* require_once('weixin.class.php'); $weixin = new class_weixin(); */ define('APPID', "wxed782be999f86eab"); define('APPSECRET', "72edec63779f7aa16a3a33447e2c7-fb"); class class_weixin { var $appid = APPID; var $appsecret = APPSECRET; //構造函數,獲取Access Token public function __construct($appid = NULL, $appsecret = NULL) { if($appid && $appsecret){ $this->appid = $appid; $this->appsecret = $appsecret; } //1. 本地寫入 $res = file_get_contents('access_token.json'); $result = json_decode($res, true); $this->expires_time = $result["expires_time"]; $this->access_token = $result["access_token"]; if (time() > ($this->expires_time + 3600)){ $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->appsecret; $res = $this->http_request($url); $result = json_decode($res, true); $this->access_token = $result["access_token"]; $this->expires_time = time(); file_put_contents('access_token.json', '{"access_token": "'.$this->access_token.'", "expires_time": '.$this->expires_time.'}'); } } public function semantic_search($record) { $data = urldecode(json_encode($record)); $url = "https://api.weixin.qq.com/semantic/semproxy/search?access_token=".$this->access_token; $res = $this->http_request($url, $data); return json_decode($res, true); } //HTTP請求(支持HTTP/HTTPS,支持GET/POST) protected function http_request($url, $data = null) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $output = curl_exec($curl); curl_close($curl); return $output; } //日誌記錄 private function logger($log_content) { if(isset($_SERVER['HTTP_APPNAME'])){ //SAE sae_set_display_errors(false); sae_debug($log_content); sae_set_display_errors(true); }else if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL $max_size = 500000; $log_filename = "log.xml"; if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);} file_put_contents($log_filename, date('Y-m-d H:i:s').$log_content."\r\n", FILE_APPEND); } } }
接口調用
$weixin = new class_weixin(); $record = array('query' => "查一下明天從北京到深圳的深航機票", 'city' => "北京", 'category' => "flight,hotel", 'appid' => $weixin->appid, 'uid' => "" ); $result = $weixin->semantic_search($record);
結果返回
{ "errcode" : 0, "query" : "查一下明天從北京到深圳的國航機票", "semantic" : { "details" : { "airline" : "中國國際航空公司", "answer" : "已幫您預約2015-12-19,從北京市出發,前往深圳市的航班。", "context_info" : { "isFinished" : "1", "null_times" : "0" }, "end_loc" : { "city" : "深圳市", "city_simple" : "深圳", "loc_ori" : "深圳", "modify_times" : "0", "province" : "廣東省", "province_simple" : "廣東|粵", "slot_content_type" : "2", "type" : "LOC_CITY" }, "hit_str" : "查 一下 明天 從 北京 到 深圳 國航 機票 ", "start_date" : { "date" : "2015-12-19", "date_lunar" : "2015-11-09", "date_ori" : "明天", "modify_times" : "0", "slot_content_type" : "2", "type" : "DT_ORI", "week" : "6" }, "start_loc" : { "city" : "北京市", "city_simple" : "北京|京", "loc_ori" : "北京", "modify_times" : "0", "slot_content_type" : "2", "type" : "LOC_CITY" } }, "intent" : "SEARCH" }, "type" : "flight" }
原文:http://www.cnblogs.com/txw1958/p/weixin-semantic-analysis.html