基於EaglePHP框架v2.7開發的微信5.0最新最全的API介面

WBOY
發布: 2016-07-25 08:49:07
原創
879 人瀏覽過
}
程式碼來源:http://www.eaglephp.com
適用平台:window/Linux
依賴項目:EaglePHP框架

包含微信5.0 API基礎介面、自訂選單、進階接口,具體如下:
1、接收用戶訊息。
2、向用戶回覆訊息。
3、接受事件推送。
4、會話介面自訂選單。
5、語音辨識。
6、客服介面。
7、OAuth2.0網頁授權。
8、產生帶參數二維碼。
9、取得使用者地理位置。
10、取得使用者基本資訊。
11、取得追蹤者清單。
12、用戶分組。
  1. /**
  2. * 微信公眾平台API
  3. *
  4. * @author maojianlw@139.com
  5. * [url=home.php?mod=space&uid=17823]@LINK[/url] http:// www.eaglephp.com
  6. */
  7. class WeixinChat
  8. {
  9. private $token
  10. {
  11. private $token > private $appid;
  12. private $appsecret;
  13. private $access_token;
  14. // 接收的資料
  15. private $_ceive = array();
  16. private $_reply = '';
  17. // 介面錯誤碼
  18. private $errCode = '';
  19. // 介面錯誤訊息
  20. private $errMerrMsg = ' ';
  21. // 微信oauth登陸取得code
  22. const CONNECT_OAUTH_AUTHORIZE_URL = 'https://open.weixin.qq.com/connect/oauth2/authorize?';
  23. 微信oauth登陸透過code換取網頁授權access_token
  24. const SNS_OAUTH_ACCESS_TOKEN_URL = 'https://api.weixin.qq.com/sns/oauth2/access_token?'; const SNS_OAUTH_REFRESH_TOKEN_URL = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?';
  25. // 透過ticket換取二維碼
  26. constdUR_L🎜> 'https://mp.weixin.qq.com/cgi-bin/showqrcode?';
  27. // 微信oauth登陸拉取用戶資訊(需scope為snsapi_userinfo)
  28. const SNS_USERINFO_URL = 'https ://api.weixin.qq.com/sns/userinfo?';
  29. // 請求api前綴
  30. const API_URL_PREFIX = 'https://api.weixin.qq.com/cgi-bin ';
  31. // 自訂選單建立
  32. const MENU_CREATE_URL = '/menu/create?';
  33. // 自訂選單查詢
  34. const MENU_GET_URL = '/menu/ get?';
  35. // 自訂選單刪除
  36. const MENU_DELETE_URL = '/menu/delete?';
  37. // 取得access_token
  38. const AUTH_URL = '/token? grant_type=client_credential&';
  39. // 取得使用者基本資訊
  40. const USER_INFO_URL = '/user/info?';
  41. // 取得追蹤者清單
  42. const USERGET_URL = ' /user/get?';
  43. // 查詢分組
  44. const GROUPS_GET_URL = '/groups/get?';
  45. // 建立分組
  46. const GROUPS_CREATE_URL = '/groupATE_URL = '/group /create?';
  47. // 修改分組名稱
  48. const GROUPS_UPDATE_URL = '/groups/update?';
  49. // 行動用戶分組
  50. congroupst GRPS_MEMBERS_UP/ATE_ /members/update?';
  51. // 傳送客服訊息
  52. const MESSAGE_CUSTOM_SEND_URL = '/message/custom/send?';
  53. // 建立二維碼ticket
  54. const QRCODE_CREATE_URL = '/qrcode/create?';
  55. /**
  56. * 初始化設定資料
  57. * @param array $options
  58. */
  59. public function __construct($options)
  60. this
  61. this
  62. $ ->token = isset($options['token']) ? $options['token'] : '';
  63. $this->appid = isset($options['appid']) ? $options[' appid'] : '';
  64. $this->appsecret = isset($options['appsecret']) ? $options['appsecret'] : '';
  65. }
  66. /**
  67. * 取得發送的訊息
  68. * 當一般微信使用者傳送訊息給公眾帳號時,微信伺服器將POST訊息的XML封包到開發者填寫的URL上。
  69. */
  70. public function getRev()
  71. {
  72. $postStr = file_get_contents('php://input');
  73. if($postStr)
  74. {
  75. $this->_receive = (array)simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  76. //Log::info(var_export($this->_receive, true));
  77. }
  78. return $this;
  79. }
  80. /**
  81. * 取得微信伺服器寄來的訊息
  82. */
  83. public function getRevData()
  84. {
  85. return $this->_receive;
  86. }
  87. /**
  88. * 取得接收者
  89. */
  90. public function getRevTo()
  91. {
  92. return isset($this->_receive['ToUserName'] ? $this->_receive['ToUserName'] : false;
  93. }
  94. /**
  95. * 取得訊息發送者(一個OpenID)
  96. */
  97. public 函數> return isset($this->_receive['FromUserName']) ? $this->_receive['FromUserName'] : false;
  98. }
  99. /**
  100. * 取得接收訊息建立時間 (整型)
  101. */
  102. public function getRevCTime()
  103. {
  104. return isset($this->_receive['CreateTime']) ? $this->_receive['CreateTime'] : false;
  105. }
  106. }
  107. /**
  108. * 取得接收訊息類型(text、image、voice、video、location、link、event)
  109. */
  110. public function getRevType()
  111. {
  112. return isset($this->_receive['MsgType']) ? $this->_receive[' MsgType'] : false;
  113. }
  114. /**
  115. * 取得接收訊息編號
  116. */
  117. public function getRevId()
  118. {
  119. return isset($this->_reive
  120. {
  121. return isset($this->_reive
  122. {
  123. return isset($this->_rece. ['MsgId']) ? $this->_receive['MsgId'] : false;
  124. }
  125. /** * 取得接收訊息文字 * 透過語音辨識接口,使用者發送的語音,將會同時給予語音辨識出的文字內容。(需申請服務號碼的高階介面權限)
  126. */
  127. public function getRevText()
  128. {
  129. if(isset($this->_receive['Content'])) return trim($ this->_receive['Content']);
  130. elseif(isset($this->_receive['Recognition'])) return trim($this->_receive['Recognition']);
  131. else return false;
  132. }
  133. /**
  134. * 取得接收圖片訊息
  135. */
  136. public function getRevImage()
  137. {
  138. if(isset($this->_receive['PicUrl '])){
  139. return array(
  140. 'picUrl' => $this->_receive['PicUrl'], //圖片連結
  141. 'mediaId' => $this->_receive['MediaId '] //圖片訊息媒體id,可以呼叫多媒體檔案下載介面來拉取資料。
  142. * 取得接收語音訊息
  143. */
  144. public function getRevVoice()
  145. {
  146. if(isset($this->_receive['MediaId'])){
  147. return array(
  148. 'mediaId' = > $this->_receive['MediaId'], //語音訊息媒體id,可以呼叫多媒體檔案下載介面來拉取資料。格式,如amr,speex等
  149. );
  150. }
  151. return false;
  152. }
  153. /**
  154. * 取得接收視訊訊息
  155. */
  156. public function getRev( )
  157. {
  158. if(isset($this->_receive['MediaId'])){
  159. return array(
  160. 'mediaId' => $this->_receive['MediaId'], //視訊訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。
  161. 'thumbMediaId' => $this->_receive['ThumbMediaId'] //視訊訊息縮圖的媒體id,可以呼叫多媒體檔案下載介面拉取資料。
  162. );
  163. }
  164. return false;
  165. }
  166. /**
  167. * 取得使用者地理位置
  168. */
  169. public function getRevLocation()*/
  170. public function getRevLocation()
  171. {
  172. if(isset($this->_receive['Location_X'])){
  173. return array(
  174. 'locationX' => $this->_receive['Location_X'], //地理位置維度
  175. 'locationY' => $this->_receive['Location_Y'], //地理位置經度
  176. 'scale' => $this->_receive['Scale'], //地圖縮放小
  177. ' label' => $this->_receive['Label'] //地理位置資訊
  178. );
  179. }
  180. //開通了上報地理位置介面的公眾號,使用者在關注後進入公眾號會話時,會彈框讓使用者確認是否允許公眾號使用其地理位置。
  181. //彈框只在關注後出現一次,使用者以後可以在公眾號詳情頁面進行操作。
  182. elseif(isset($this->_receive['Latitude']))
  183. {
  184. return array(
  185. 'latitude' => $this->_receive['Latitude'], // //地理位置緯度
  186. 'longitude' => $this->_receive['Longitude'], //地理位置經度
  187. 'precision' => $this->_receive['Precision'] // 地理位置精度
  188. );
  189. }
  190. return false;
  191. }
  192. /**
  193. * 取得接收連結訊息
  194. */
  195. public function getRevLink()
  196. * 取得接收事件類型
  197. * 事件類型如:subscribe(訂閱)、unsubscribe(取消訂閱)、click
  198. */
  199. public function getRevLink()
  200. if(isset($this->_receive['Title'])){
  201. return array(
  202. 'title' => $this->_receive['Title'], //訊息標題
  203. 'description' => $this->_receive['Description'], //訊息描述
  204. 'url' => $this->_receive['Url'] //訊息連結
  205. );
  206. }
  207. return false;
  208. }
  209. /**
  210. * 設定回覆文字訊息
  211. * @param string $content
  212. * @param string $openid
  213. */
  214. public function getRevEvent()
  215. {
  216. if(isset($this- >_receive['Event']))
  217. {
  218. return array(
  219. 'event' => strtolower($this->_receive['Event']),
  220. 'key'=> isset ($this->_receive['EventKey']) ? $this->_receive['EventKey'] : ''
  221. );
  222. }
  223. return false;
  224. }
  225. /**
  226. * 設定回覆音樂訊息
  227. * @param string $title
  228. * @param string $desc
  229. * @param string $musicurl
  230. * @param string $hgmusicurl
  231. */
  232. public function text($content='')
  233. {
  234. $textTpl = "
  235. %s
  236. ";
  237. $this-> _reply = sprintf($textTpl,
  238. $this->getRevFrom(),
  239. $this->getRevTo(),
  240. Date::getTimeStamp(),
  241. 'text',
  242. $ content
  243. );
  244. return $this;
  245. }
  246. /**
  247. * 回覆圖文訊息
  248. * @param array
  249. */
  250. public function music($title, $desc, $musicurl, $musicurl, $hgmusicurl='')
  251. {
  252. $textTpl = '
  253. %s
  254. ';
  255. //
  256. $this->_reply = sprintf($textTpl,
  257. $this->getRevFrom(),
  258. $this- >getRevTo(),
  259. Date::getTimeStamp(),
  260. 'music',
  261. $title,
  262. $desc,
  263. $musicurl,
  264. $hgmusicurl
  265. );
  266. return $this;
  267. }
  268. /***/
  269. public function news($data)
  270. {
  271. $count = count( $data);
  272. $subText = '';
  273. if($count > 0)
  274. {
  275. foreach($data as $v)
  276. {
  277. $tmpText = '
  278. ';
  279. $subText . = sprintf(
  280. $tmpText, $v['title'],
  281. isset($v['description']) ? $v['description'] : '',
  282. isset($v[ 'picUrl']) ? $v['picUrl'] : '',
  283. isset($v['url']) ? $v['url'] : ''
  284. );
  285. } }
  286. $textTpl = '
  287. %s文章>
  288. ';
  289. $this->_reply = sprintf(
  290. $textTpl,
  291. $this->getRevFrom(),
  292. $this->getRevTo() ,
  293. Date::getTimeStamp(),
  294. $count,
  295. $subText
  296. );
  297. return $this;
  298. }
  299. /**
  300. * 回覆訊息
  301. * @param array $msg
  302. * @param bool $return
  303. */
  304. public function reply()
  305. {
  306. header('Contentd. -Type:text/xml');
  307. echo $this->_reply;
  308. exit;
  309. }
  310. /**
  311. * 自訂選單建立
  312. * @param array 選單資料
  313. */
  314. 公用函數createMenu($data)
  315. {
  316. if(!$this->access_token && !$this ->checkAuth()) return false;
  317. $result = curlRequest(self::API_URL_PREFIX.URL_PREFIX. ::MENU_CREATE_URL.'access_token='.$this->access_token, $this->jsonEncode( $data), 'post');
  318. if($result)
  319. {
  320. $jsonArr = json_decode( $result, true);
  321. if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);
  322. else return true;
  323. }
  324. return false;
  325. }
  326. /**
  327. * 自訂選單查詢
  328. */
  329. public function getMe( > {
  330. if(!$this->access_token && !$this->checkAuth()) return false;
  331. $result = curlRequest(self::API_URL_PREFIX.self::MENU_GET_URLken. '.$this->access_token);
  332. if($result)
  333. {
  334. $jsonArr = json_decode($result, true);
  335. if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);
  336. 否則回傳 $jsonArr;
  337. }
  338. 回傳false;
  339. }
  340. /**
  341. * 自訂選單刪除
  342. */
  343. public function deleteMenu()
  344. {
  345. if(!$this->access_token & acc $this->checkAuth()) return false;
  346. $result = curlRequest(self::API_URL_PREFIX.self::MENU_DELETE_URL.'access_token='.$this->access_token);
  347. if($this->access_token); {
  348. $jsonArr = json_decode($result, true);
  349. if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);
  350. 否則回傳true;
  351. }
  352. 回傳false;
  353. }
  354. /**
  355. * 取得使用者基本資訊
  356. * @param string $openid 一般使用者的標識,對目前公眾號唯一
  357. */
  358. public function getUserInfo($openid)
  359. {
  360. if(!$this->access_token && !$this->checkAuth()) return false;
  361. $resultAuth()) return false;
  362. $result =curlRequest(self::API_URL_PREFIX.self::USER_INFO_URL.'access_token='.$this->access_token.'&openid='.$openid);
  363. if($result)
  364. {
  365. $jsonArrsonArr = json_decode($result, true);
  366. if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr );
  367. else return $jsonArr;
  368. }
  369. return false;
  370. }
  371. /**
  372. * 取得追蹤者清單
  373. * @param string $next_openid 第一個拉取的OPENID,不填預設從頭開始拉取
  374. */ ($next_openid='')
  375. {
  376. if(!$this->access_token && !$this->checkAuth()) return false;
  377. $ result =curlRequest(self::IX_URL_PREF21 .self::USER_GET_URL.'access_token='.$this->access_token.'&next_openid='.$next_openid);
  378. if($result)
  379. {
  380. $jsonArr = json_decode($resr );
  381. if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);
  382. 否則回傳 $jsonArr;
  383. }
  384. return false;
  385. }
  386. /* *
  387. * 查詢分組
  388. */
  389. public function getGroup()
  390. {
  391. if(!$this->access_token & access! $this->checkAuth()) return false;
  392. $result = curlRequest(self::API_URL_PREFIX.self::GROUPS_GET_URL.'access_token='.$this->access_tokenPS_GET_URL.'access_token='.$this->access_token);
  393. if($ result)
  394. {
  395. $jsonArr = json_decode($result , true);
  396. if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);
  397. 否則回傳$jsonArr;
  398. }
  399. 回傳false; }
  400. /**
  401. * 建立分組
  402. * @param string $name 分組名字(30個字元以內)
  403. */
  404. public function createGroup($name)
  405. {
  406. if(!$this->access_token && !$this->; checkAuth->; ()) return false;
  407. $data = array('group' => array('name' => $name));
  408. $result = curlRequest(self::API_URL_PREFIX.self:: GROUPS_CREATE_URL.' access_token='.$this->access_token, $this->jsonEncode($data), 'post');
  409. if($result)
  410. {
  411. $jsonArr = json_decode( $result, true) ;
  412. if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr) ;
  413. else return true ;
  414. }
  415. 回傳false;
  416. }
  417. /**
  418. * 修改分組名稱
  419. * @param int $id 分組id,由微信分配
  420. * @param string $name 分組名稱(30個字元以內)
  421. */
  422. public function updateGroup($ id $name)
  423. public function updateGroup($ id $name)
  424. public function updateGroup($ id $name)
  425. public function updateGroup($ id $name)
  426. public function updateGroup($ id $name)
  427. public function updateGroup($ id $name)
  428. {
  429. if(!$this->access_token && !$this->checkAuth()) return false;
  430. $data = array('group' = > array('id' => $ id, 'name' => $name));
  431. $result = curlRequest(self::API_URL_PREFIX.self::GROUPS_UPDATE_URL.'access_token='.$this->access_token, $this->jsonEncode($data) , 'post');
  432. if($result)
  433. {
  434. $jsonArr = json_decode($result, true);
  435. if (!$jsonArr || (isset($jsonArr['errcode )) ']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);
  436. 否則回傳true;
  437. }
  438. 回傳false;
  439. }
  440. 回傳false;
  441. }
  442. 回傳false;
  443. }
  444. 回傳false;
  445. }
  446. 回傳false;
  447. }
  448. }
  449. /**
  450. * 行動用戶分組
  451. *
  452. * @param string $openid 使用者唯一識別碼
  453. * @param int $to_groupid 分組id
  454. */
  455. public function updateGroupMembers($openid, $to_groupid)
  456. {
  457. if(!$ this-this>this. -> checkAuth()) return false;
  458. $data = array('openid' => $openid, 'to_groupid' => $to_groupid); $result = curlRequest(self::API_URL_PREFIX. self: :GROUPS_MEMBERS_UPDATE_URL.'access_token='.$this->access_token, $this->jsonEncode($data), 'post'); if( $result) { $jsonArr = json ($結果,true); if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr); 回傳 true; } 回傳false; } / ** * 發送客服訊息 * 當使用者主動向公眾號傳送訊息時(包含傳送訊息、點選選單自訂圖示)事件、訂閱事件、二維碼掃描碼事件、付款成功事件、使用者維權), * 微信會把訊息資料給開發者,每隔一段時間可以間歇期的開發者(目前為24小時)呼叫客服訊息接口,透過POST一個JSON資料包來傳送訊息給一般用戶,在24小時內不限制發送次數。提供更優質的服務。
  459. *
  460. * @param string $touser 一般使用者openid
  461. */
  462. public function sendCustomMessage($touser, $data, $msgType = 'text')
  463. { $arr🎜> $arr = array();
  464. $arr['touser'] = $touser;
  465. $arr['msgtype'] = $msgType;
  466. switch ($msgType)
  467. {
  468. case ' text': // 傳送文字訊息
  469. $arr['text']['content'] = $data;
  470. break;
  471. case 'image': // 傳送圖片訊息
  472. $arr['image']['media_id'] = $data;
  473. break;
  474. case 'voice': // 傳送語音訊息
  475. $arr['voice'][' media_id'] = $data;
  476. break;
  477. case 'video': // 發送視訊訊息
  478. $arr['video']['media_id'] = $data['media_id' ]; // 發送的影片的媒體ID
  479. $arr['video']['thumb_media_id'] = $data['thumb_media_id']; // 影片縮圖的媒體ID
  480. break;
  481. case 'music': // 發送音樂訊息
  482. $arr['music']['title'] = $data['title'];// 音樂標題
  483. $arr['music' ]['description'] = $data['description'];// 音樂描述
  484. $arr['music']['musicurl'] = $data['musicurl'];// 音樂連結
  485. $arr['music']['hqmusicurl'] = $data['hqmusicurl'];// 高品質音樂鏈接,wifi環境優先使用該鏈接播放音樂
  486. $arr['music']['thumb_media_id' ] = $data['title'];// 縮圖的媒體ID
  487. break;
  488. case 'news': // 傳送圖文訊息
  489. $arr['news'][ 'articles'] = $data; // title、description、url、picurl
  490. break;
  491. }
  492. if(!$this->access_token && !$this->checkAuth()) return false;
  493. $result = curlRequest(self::API_URL_PREFIX.self::MESSAGE_CUSTOM_SEND_URL.'access_token='.$this->access_token, $this->jsonEncode(access_token='.$this->access_token, $this->jsonEncode($arr), 'post');
  494. if($result)
  495. {
  496. $jsonArr = json_decode($result, true);
  497. if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr ['errcode'] > 0)) $this->error($jsonArr);
  498. else return true;
  499. }
  500. return false;
  501. }
  502. /**
  503. * 取得access_token
  504. */
  505. public function checkAuth()
  506. {
  507. // 從快取中取得access_token
  508. $cache_flag = 'wewem' > $access_token = cache($cache_flag);
  509. if($access_token)
  510. {
  511. $this->access_token = $access_token;
  512. return true;
  513. }
  514. // 請求微信伺服器取得access_token
  515. $result = curlRequest(self::API_URL_PREFIX.self::AUTH_URL.'appid='.$this->appid.'&secret='.$this->appsecret);
  516. if($result)
  517. {
  518. $jsonArr = json_decode($result, true);
  519. if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr[' errcode'] > 0))
  520. {
  521. $this->error($jsonArr);
  522. }
  523. else
  524. {
  525. $this->access_token = $jsonArr['access_token['access_token '];
  526. $expire = isset($jsonArr['expires_in']) ? intval($jsonArr['expires_in'])-100 : 3600;
  527. // 將access_token儲存到快取中
  528. cache
  529. // 儲存access_tokenaccess_token, $expire, Cache::FILE);
  530. return true;
  531. }
  532. }
  533. return false;
  534. }
  535. /** * 微信oauth登陸->第一步:使用者同意授權,取得code * 應用授權作用域,snsapi_base (不彈出授權頁面,直接跳轉,只能取得使用者openid) , * snsapi_userinfo (彈出授權頁面,可透過openid拿到暱稱、性別、所在地。並且,即使在未關注的情況下,只要用戶授權,也能獲取其資訊) * 直接在微信打開鏈接,可以不填此參數。做頁面302重定向時候,必須帶此參數
  536. *
  537. * @param string $redirect_uri 授權後重定向的回調連結位址
  538. * @param string $scope 應用授權作用域0為snsapi_base,1為snsapi_userinfo
  539. * @param string $state 重定向後會帶上state參數,開發者可以填入任意參數值
  540. */
  541. public function redirectGetOauthCode($redirect_uri, $scope=0, $state=0, $state= '')
  542. {
  543. $scope = ($scope == 0) ? 'snsapi_base' : 'snsapi_userinfo';
  544. $url = self::CONNECT_OAUTH_AUTHORIZE_URL.'appid='.$this-appid='.$ .'&redirect_uri='.urlencode($redirect_uri).'&response_type=code&scope='.$scope.'&state='.$state.'#wechat_redirect';
  545. redirect($url);
  546. }
  547. }
  548. }
  549. }
  550. }
  551. }
  552. }
  553. }
  554. }
  555. }
  556. }
  557. }
  558. }
  559. }
  560. }
  561. }
  562. }
  563. }
  564. }
  565. }
  566. }
  567. }
  568. }
  569. }
  570. }
  571. }
  572. }
  573. }
  574. }
  575. }
  576. }
  577. /**
  578. * 微信oauth登陸->第二步:透過code換取網頁授權access_token
  579. *
  580. * @param string $code
  581. */
  582. public function getSnsAccessToken($code)
  583. {
  584. $result = curlRequest(self::SNS_OAUTH_ACCESS_TOKEN_URL.'appKEN_URL.'appid >appid.'&secret='.$this->appsecret.'&code='.$code.'&grant_type=authorization_code');
  585. if($result)
  586. {
  587. $jsonArr = json_decode($ result, true);
  588. if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);
  589. else return $jsonArr;
  590. }
  591. return false;
  592. }
  593. /**
  594. * 微信oauth登陸->第三步:刷新access_token(如果需要)
  595. * 由於access_token擁有較短的有效期,當access_token超時後,可以使用refresh_token進行刷新,
  596. * refresh_token擁有較長的有效期限(7天、30天、60天、90天),當refresh_token失效的後,需要使用者重新授權。
  597. *
  598. * @param string $refresh_token 填入透過access_token取得的refresh_token參數
  599. */
  600. public function refershken(**
  601. * 微信oauth登陸->第四步:拉取使用者資訊(需scope為snsapi_userinfo)
  602. * 如果網頁授權作用域為snsapi_userinfo,則此時開發者可以透過access_token和openid拉取使用者資訊了。
  603. *
  604. * @param string $access_token 網頁授權介面呼叫憑證,注意:此access_token與基礎支援的access_token不同
  605. * @param string $openid 使用者的唯一識別
  606. */
  607. public function refershken(**
  608. * 建立二維碼ticket
  609. * 每次建立二維碼ticket需要提供一個開發者自行設定的參數(scene_id),分別介紹臨時二維碼和永久二維碼的建立二維碼ticket過程。
  610. *
  611. * @param int $scene_id 場景值ID,暫存二維碼時為32位元整型,永久二維碼時最大值為1000
  612. * @param int $type 二維碼類型,0為暫存,1為永久
  613. * @param int $expire 此二維碼有效時間,以秒為單位。 最大不超過1800。
  614. */
  615. public function refersh.
  616. {
  617. $result = curlRequest(self::SNS_OAUTH_REFRESH_TOKEN_URL.'appid='.$this->appid.'&grant_type=refresh_token&refresh_token='.$refresh_token); {
  618. $jsonArr = json_decode($result, true);
  619. if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this ->error($jsonArr);
  620. else return $jsonArr;
  621. }
  622. return false;
  623. }
  624. /**
  625. }
  626. /***/
  627. public function getSnsUserInfo($access_token, $openid)
  628. {
  629. $result = curlRequest(self::SNS_USERINFO_URL.'access_token='.$access_token.'open&id='.openopen&id='.$id); if($result)
  630. {
  631. $jsonArr = json_decode($result, true);
  632. if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode '] > 0)) $this->error($jsonArr);
  633. else return $jsonArr;
  634. }
  635. return false; } /***/ public function createQrcode($scene_id, $type=0, $expire=1800) { if(!$this->access_token && !$this->checkAuth ()) return false; $data = array(); $data['action_info'] = array('scene' => array('scene_id' => $scene_id)); $data['action_name'] = ($type == 0 ? 'QR_SCENE' : 'QR_LIMIT_SCENE'); if($type == 0) $data['expire_seconds'] = $expire; $result = curlRequest(self::API_URL_PREFIX.self::QRCODE_CREATE_URL.'access_token='.$this->access_token, $this->jsonEncode($data), 'post'); if(> if( $result) { $jsonArr = json_decode($result, true); if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr); else return $jsonArr; } return false; } /*🎜> * * 透過ticket換取二維碼 * 取得二維碼ticket後,開發者可用ticket換取二維碼圖片。請注意,本介面無須登入態即可呼叫。 * 提醒:TICKET記得進行UrlEncode * ticket正確情況下,http 回傳碼是200,是一張圖片,可以直接展示或下載。 * 錯誤情況下(如ticket非法)回傳HTTP錯誤碼404。
  636. *
  637. * @param string $ticket
  638. */
  639. * @param string $ticket
  640. */
  641. * @param string $ticket
  642. */
  643. public function getQrcodeUrl($ticket)
  644. {
  645. return self::SHOW_QRCODE_UR🎜> {
  646. return self::SHOW_QRCODE_URL。 );
  647. }
  648. /**
  649. * 記錄介面產生的錯誤日誌
  650. */
  651. 公用函數錯誤($data)
  652. {
  653. $this->errCode = $data[ ' errcode'];
  654. $this->errMsg = $data['errmsg'];
  655. Log::info('WEIXIN API errcode:['.$this->errCode.'] errmsg: ['. $this->errMsg.']');
  656. }
  657. /**
  658. * 將陣列中的中文轉換成json資料
  659. * @param array $arr
  660. */
  661. public function jsonEncode($arr) {
  662. $parts = array ();
  663. $is_list = false;
  664. //判斷給定的陣列是否為數值陣列
  665. $keys = array_keys ( $arr );
  666. $max_length = count ( $arr ) - 1 ;
  667. if (($keys [0] === 0) && ($keys [$max_length] === $max_length )) { //查看第一個key是否為0,最後一個key是否為0 is length - 1
  668. $is_list = true;
  669. for($i = 0; $i if ($i != $keys [$i]) { //某個鍵在位置檢查時失敗。
  670. $is_list = false; //這是一個關聯陣列。
  671. break;
  672. }
  673. }
  674. }
  675. foreach ( $arr as $key => $value ) {
  676. if (is_array ( $ value )) { //陣列的自定義處理
  677. if ($is_list)
  678. $parts [] = $this->jsonEncode ( $value ); /* :RECURSION: */
  679. else
  680. $parts [] = '"' . $key . '":' . $this->jsonEncode ( $value ); /* :RECURSION: */
  681. } else {
  682. $str = '';
  683. if (! $is_list)
  684. $str = '"' . $key . '":';
  685. //多種資料型別的自訂處理
  686. if (is_numeric ( $value ) && $value $str .= $value; //數字
  687. elseif ($value === false)
  688. $str .= 'false'; //布林值
  689. elseif ($value === true)
  690. $str .= 'true';
  691. else
  692. $str .= '"' .addslashes ($value ) .'" '; //所有其​​他事情
  693. // :TODO : 我們還應該尋找更多的資料類型嗎? (物件?)
  694. $parts [] = $str;
  695. }
  696. }
  697. $json = implode ( ',', $parts );
  698. if ($is_list)
  699. 返回'[' 。 $json . ']'; //回傳數字JSON
  700. return '{' . $json . '}'; //回傳關聯JSON
  701. }
  702. /**
  703. * 檢驗簽章
  704. */
  705. public function checkSignature()
  706. {
  707. $signature = HttpRequest::getGet('簽名');
  708. $timestamp = HttpRequest::getGet('timestamp');
  709. $timestamp = HttpRequest::getGet('timestamp');
  710. $nonce = HttpRequest::getGet('nonce');
  711. $token = $this->; token;
  712. $tmpArr = array($token, $timestamp, $nonce);
  713. 排序($tmpArr);
  714. $tmpStr = implode($tmpArr);
  715. $tmpStr = sha1($ tmpStr);
  716. return ($tmpStr == $signature ? true : false);
  717. }
  718. /**
  719. * 驗證token是否有效
*/
公用函數有效() { if($this->checkSignature()) exit:(HttpRequest:(HttpRequest:(HttpRequest:(HttpRequest:(HttpRequest:(HttpRequest:(HttpRequest) :getGet('echostr'));
}
複製程式碼


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板