在本项目中,微信API接口也是作为一个第三方类库存在的,其目录为extend\weixin\Wxapi.php。其实现代码如下。
1 <?php
2
3 /*
4 方倍工作室 http:// www.fangbei.org/
5 CopyRight 2014 All Rights Reserved
6 */
7 namespace weixin;
8 require_once('config.php');
9
10 class Wxapi
11 {
12 var $appid = APPID;
13 var $appsecret = APPSECRET;
14
15 // 构造函数,获取Access Token
16 public function __construct($appid = NULL, $appsecret = NULL)
17 {
18 if($appid && $appsecret){
19 $this->appid = $appid;
20 $this->appsecret = $appsecret;
21 }
22 // 3. 本地写入
23 $res = file_get_contents('access_token.json');
24 $result = json_decode($res, true);
25 $this->expires_time = $result["expires_time"];
26 $this->access_token = $result["access_token"];
27
28 if (time > ($this->expires_time + 3600)){
29 $url = "https:// api.weixin.qq.com/cgi-bin/token?grant_type=client_
credential&appid=".$this->appid."&secret=".$this->appsecret;
30 $res = $this->http_request($url);
31 $result = json_decode($res, true);
32 $this->access_token = $result["access_token"];
33 $this->expires_time = time;
34 file_put_contents('access_token.json', '{"access_token": "'.$this->
access_token.'", "expires_time": '.$this->expires_time.'}');
35 }
36 }
37
38 // 获取用户信息
39 public function get_user_info($openid)
40 {
41 $url = "https:// api.weixin.qq.com/cgi-bin/user/info?access_token=".$this->
access_token."&openid=".$openid."&lang=zh_CN";
42 $res = $this->http_request($url);
43 return json_decode($res, true);
44 }
45
46 // 获取用户列表
47 public function get_user_list($next_openid = NULL)
48 {
49 $url = "https:// api.weixin.qq.com/cgi-bin/user/get?access_token=".$this->
access_token."&next_openid=".$next_openid;
50 $res = $this->http_request($url);
51 $list = json_decode($res, true);
52 if ($list["count"] == 10000){
53 $new = $this->get_user_list($next_openid = $list["next_openid"]);
54 $list["data"]["openid"] = array_merge_recursive($list["data"]["openid"],
$new["data"]["openid"]); // 合并OpenID列表
55 }
56 return $list;
57 }
58
59 // 发送客服消息
60 public function send_custom_message($touser, $type, $data)
61 {
62 $msg = array('touser' =>$touser);
63 $msg['msgtype'] = $type;
64 switch($type)
65 {
66 case 'text':
67 $msg[$type] = array('content'=>urlencode($data));
68 break;
69 case 'news':
70 $data2 = array;
71 foreach ($data as &$item) {
72 $item2 = array;
73 foreach ($item as $k => $v) {
74 $item2[strtolower($k)] = urlencode($v);
75 }
76 $data2 = $item2;
77 }
78 $msg[$type] = array('articles'=>$data2);
79 break;
80 case 'music':
81 case 'image':
82 case 'voice':
83 case 'video':
84 $msg[$type] = $data;
85 break;
86 default:
87 $msg['text'] = array('content'=>urlencode("不支持的消息类型 ".$type));
88 break;
89 }
90 $url = "https:// api.weixin.qq.com/cgi-bin/message/custom/send?access_
token=".$this->access_token;
91 return $this->http_request($url, urldecode(json_encode($msg)));
92 }
93
94 // HTTP请求(支持HTTP/HTTPS,支持GET/POST)
95 protected function http_request($url, $data = null)
96 {
97 $curl = curl_init;
98 curl_setopt($curl, CURLOPT_URL, $url);
99 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
100 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
101 if (!empty($data)){
102 curl_setopt($curl, CURLOPT_POST, 1);
103 curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
104 }
105 curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
106 $output = curl_exec($curl);
107 curl_close($curl);
108 return $output;
109 }
110 }
上述接口方法中,实现了微信Access Token的获取、存储及自动更新,获取用户列表及获取用户基本信息两个用户管理接口,以及客服消息的发送接口。