本文针对人群是有1定开发基础的人员,可以比较快的帮助你了解和学习微信开发.
其次是本文作者本次书写,全部采取的是个人的定阅号,假设是正常的开发流程,可能会存在不同,请读者注意.
本文代码部份主要提供的是关键代码,非关键代码因人而异,需要读者自行补充,请注意.
今天文章下面对1些方法进行了封装,虽然在公司里面,这些都是由后台来对这些任务完成,但是身为1个有理想,有抱负的前端,我们会肯定是有必要的,对吧.而且微信开发很多时候,也是直接由前端来开发完成的.
最后,如果喜欢本文,请关注我呦. 2016年05月31日
CSDN:http://blog.csdn.net/mr_lp?viewmode=contents
具体内容请参考 微信公众平台注册步骤示例图(企业)
我们只需要明白下面这个图的内容。
申请1个微信公众号
微信公众号链接
我们选择了
以后我们首先需要去配置1下接口.
以后我们就能够去修改我们的token.
以后我们需要前往
开发–> 开发者工具 –> 开始开发 –> 接入指南
可以直接点击 接入指南
找到 PHP示例代码下载去进行下载.
我这里帮大家偷个懒 PHP 示例代码下载
下载以后我们需要去进行解紧缩,将解紧缩以后的文件名称去进行1下修改,例如可以改成 wx.php.
以后我们打开php , 去将里面的内容 token 去进行更改.
以后我们将其重新紧缩,紧缩完成以后我们需要打开我们的新浪云去管理我们的 PHP 文件.
首先,使用新浪云首先需要进行新浪云的注册和实名认证,这里相信大家都能弄明白.
只是额外提1点,新浪云是需要消耗芸豆的,而新手注册会赠送200芸豆,以后则需要自己去购买了.
但是如果是好友约请,你除当前的200以外,应当,注意是应当会额外赠送你200芸豆,所以咯,小火伴们如果不厌弃,可以直接用我下面的注册链接,这样你应当就可以取得 400 芸豆了.
我的约请链接 http://t.cn/R5UICr2
在我们注册以后,我们就需要开始去创建我们新的利用了.
这里需要注意, PHP 的版本不要选太高,否则会影响后面的内容.
创建了空利用以后,我们就能够在这里找到我们刚才创建的利用了,点击上面的利用名称.
找到利用中的代码管理,以后选择右边的上传代码.
这时候候发现,提示代码上传只支持 zip, gz, tar.gz 3种格式.
这时候候就能够把我们刚才特地打包好的利用去上传上去了.
上传以后,我们也能够在上传代码的边上找到编辑代码.
以后直接在编辑代码中去更改我们的 PHP 文件了.
还记得我们刚才在边上有1个链接么?
这时候候我们就能够将刚才的链接去直接复制过去,回到微信开发接口这边,把刚才的 URL 填写进去.
但是需要注意,我们需要将链接补全终了,
也就是将刚才的路径去做1个更改,将地址和文件名串连在1起,以后回到刚才的接口中,可以去做 URL 的添加,但是需要注意,需要在前面添加上 HTML 协议.
至此,我们已获得了 我们的接口,接下来就正式进入微信开发.
access_token是公众号的全局唯1接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。
以上话术出自 获得access_token
这里主要就是看看你刚才去生成的 APPID 和 APPSECRET 能否正常的获得.
这里我们可以直接现在网页中去尝试1下,看看能否获得数据.
这里把刚才的APPID 等填写进去,如果成功的话,我们应当就可以看见我们的 access_token 了.
http要求方式:
GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
这块代码是固定的,可以直接粘贴.
可是我现在只是在网页中获得出来了,我们要是在程序中怎样去获得呢?难道用 AJAX ? 固然不是,这时候候我们需要使用 PHP 去获得.
<?php
$appid = "**********这里书写自己的 id*********";
$appsecret = "**********这里书写自己的secret*********";
$api = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}}&secret={$appsecret}";
$json = file_get_contents($api);
// 这类可以进行获得,但是数据不稳定,所以不推荐使用
// 微信官方推荐使用的方法是 curl,
// 我们可以新建1个 PHP,去 打印1下 phpinfo();
// 以后在网页中去查询1下是不是有 curl 这个内容
echo $json;
?>
如果我们验证以后确切存在,我们就能够去使用微信提供的方式.
<?php
$appid = "**********这里书写自己的 id*********";
$appsecret = "**********这里书写自己的secret*********";
$api = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}}&secret={$appsecret}";
//$json = file_get_contents($api);
// 这类可以进行获得,但是数据不稳定,所以不推荐使用
// 微信官方推荐使用的方法是 curl,
// 我们可以新建1个 PHP,去 打印1下 phpinfo();
// 以后在网页中去查询1下是不是有 curl 这个内容
// echo phpinfo();//比file_get_contents稳定且能发送post要求
function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
// 为保证第3方服务器与微佩服务器之间数据传输的安全性,所有微信接口采取https方式调用,必须使用下面2行代码打开ssl安全校验。
// 如果在部署进程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书辨别文件。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
// curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
// 这里进行注释是由于这里是进行 token 去进行验证
// 避免其他人歹意刷内容
// 这里由于是本地测试,所以注释1下,正式上线的时候还是需要注释开的
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
$json = httpGet($api);
echo $json;
?>
此段代码可以在 微信JS-SDK中查询到.
这时候候我们应当就可以够获得我们的 token 了,但是我们现在还需要将其重新获得出来,我们可以将其转换为1个数组,以后重新获得我们的 access_token.
<?php
$appid = "**********这里书写自己的 id*********";
$appsecret = "**********这里书写自己的secret*********";
$api = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}}&secret={$appsecret}";
function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
// curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
$str = httpGet($api);
// 第2个参数设置为 true ,返回值改成数组
$arr = json_decode($str,true);
print_r($arr);
$accessToken = $arr["assess_token"];
?>
我们已获得了具体的 access_token, 以后我们就能够存入我们的数据库中,每次使用的时候去进行1个判断,如果是旧的就去获得新的替换它.
这里不对数据库操作做更多说明,这个完全看自己习惯,
只是补充1点, token 的 类型要是 TEXT ,time 的类型最好是 VARCHAR.
以后回到代码部份,这时候候我们会首先去连接1下我们刚才的数据库.
具体连接数据库请自行操作.
以后我们就去通过数据库操作去获得到我们的 token.
<?php
$appid = "**********这里书写自己的 id*********";
$appsecret = "**********这里书写自己的secret*********";
function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
// curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
$str = httpGet($api);
function getToken(){
global $appid;
global $appsecret;
$api = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}}&secret={$appsecret}";
// 第2个参数设置为 true ,返回值改成数组
$arr = json_decode($str,true);
// print_r($arr);
$accessToken = $arr["assess_token"];
return $accessToken;
}
$sql = "SELECT * FROM token";
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
//我们判断时间是不是过期
$row = mysql_fetch_assoc($result);
$time = $row["time"];
$nowTime = time();
// 由于刚才微信默许的有效时间是7200秒(2小时)
if ($nowTime - $time > 7200) {
// 过期了,重新获得并更新数据库
$token = getToken();
$time = time();
$sql = "UPDATE token SET token='{$token}',time='$time'";
mysql_query($sql);
if (mysql_affected_rows() > 0) {
echo "更新成功";
}
else{
echo "更新失败";
}
}
else{
// 没过期
$token = $row["token"];
}
echo $token;
}
else{
//没有的话,就直接去插入
$sql = "INSERT INTO token(id,token,time) VALUES (NULL,'{$accessToken}','{$time}')";
mysql_query($sql);
if (mysql_insert_id() > 0) {
echo "插入成功";
}
else{
echo "插入失败";
}
}
echo $token;
?>
如果公众号基于安全等斟酌,需要获知微佩服务器的IP地址列表,以便进行相干限制,可以通过该接口取得微佩服务器IP地址列表或IP网段信息。
以上话术出自 获得微佩服务器IP地址
http要求方式:
GET
https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=ACCESS_TOKEN
这里我们首先可以先来获得1下微信的服务器列表.
// 获得微佩服务器列表
function getIP($token){
$api = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token={$token}";
$json = http_get($api);
echo $json;
}
getIP($token);
我们再对其进行1下封装,
// 获得微佩服务器列表
function getIP($token){
$api = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token={$token}";
$json = http_get($api);
$arr = json_decode($json,true);
return $arr["ip_list"];
}
$ip_List = getIP($token);
print_r($ip_List);
记得实际操作的时候,需要对获得到的数据进行1个验证,只有在获得到了对应的数据以后再进行下面的操作.
一样的操作,像我们想获得用户列表等内容,一样也是如此.
公众号可通过本接口来获得帐号的关注者列表,关注者列表由1串OpenID(加密后的微信号,每一个用户对每一个公众号的OpenID是唯1的)组成。1次拉取调用最多拉取10000个关注者的OpenID,可以通过量次拉取的方式来满足需求。
以上话术出自 获得用户列表
http要求方式:
GET(请使用https协议)
https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID
我们也能够对其进行1下封装.
// 第2个参数为可选参数
function getUserList($token,$nextOpendId = false){
if ($nextOpendId) {
$api = "https://api.weixin.qq.com/cgi-bin/user/get?access_token={$token}&next_openid={$nextOpendId}";
}
else{
$api = "https://api.weixin.qq.com/cgi-bin/user/get?access_token={$token}";
}
$json = httpGet($api);
echo $json;
// $arr = json_decode($json,true);
}
getUserList($token);
// 用这个方法可以获得到我们的内容是从哪一个位置开始
// 例如假设有 100个人,我们给定的是 第50 个人的 token, 返回的应当是 51 - 100
// getUserList($token,"用户的 token 内容");
这时候候我们就能够对其进行1下打印,打印以后就能够看到我们的想要的用户列表了.
在关注者与公众号产生消息交互后,公众号可取得关注者的OpenID(加密后的微信号,每一个用户对每一个公众号的OpenID是唯1的。对不同公众号,同1用户的openid不同)。公众号可通过本接口来根据OpenID获得用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。
请注意,如果开发者有在多个公众号,或在公众号、移动利用之间统1用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。
上方出自 微信公众平台说明 获得用户基本信息(UnionID机制)
http要求方式:
GET
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
//获得用户详细信息
function getUserInfo($token,$userOpenId){
$api = "http要求方式: GET https://api.weixin.qq.com/cgi-bin/user/info?access_token={$token}}&openid={$userOpenId}}&lang=zh_CN";
$json = httpGet($api);
$arr = json_decode($json,true);
return $arr;
}
getUserList($token,"用户的 token 内容");
$userInfo = getUserInfo($token,"某1用户的 token");
// 获得用户信息
print_r($userInfo);
// 获得用户头像
echo "<img src = '".$userInfo["headimgurl"]."'>";
在今天文章最后,我们再来给大家演示1个 post 接口的写法.
将1条长链接转成短链接。
主要使用处景: 开发者用于生成2维码的原链接(商品、支付2维码等)太长致使扫码速度和成功率降落,将原长链接通过此接口转成短链接再生成2维码将大大提升扫码速度和成功率。
上述话语出自 长链接转短链接接口
http要求方式:
POST
https://api.weixin.qq.com/cgi-bin/shorturl?access_token=ACCESS_TOKEN
以上要求网址是固定的,可以直代替换.
function httpPost($data,$url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
if (curl_errno($ch)) {
return curl_error($ch);
}
curl_close($ch);
return $tmpInfo;
}
function longToShort($token,$url){
$api = "https://api.weixin.qq.com/cgi-bin/shorturl?access_token={$token}";
// 这里直接采取官网提供的url 了
$data = '{"action":"long2short","long_url":"'$url.'"}';
$json = httpPost($data,$api);
// echo $json;
return json_decode($json,true);
}
longToShort($token,"https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1443433600&token=&lang=zh_CN");
print_r($arr);
这时候候我们可以去打印1下现在的URL ,这时候候我们就没必要使用之前的非常长的接口内容了,而可以直接去使用我们缩短的网址了.
同时这个函数不单单可以用在此处,其余时候也能够直接去使用.
上一篇 设计模式07_代理模式
下一篇 VRP系统——5