1.微信公众号分为3种:订阅号(主要偏于为用户传达资讯(类似报纸杂志),认证前后都是每天只可以群发一条消息);服务号(主要偏于服务交互(类似银行,114,提供服务查询),认证前后都是每个月可群发4条消息);企业号(主要用于公司内部通讯使用,需要先验证身份才可以关注成功企业号);
2.在选择开发微信号的时候应该先打开 ->开发者工具->选择公众号测试平台->填写服务器配置->验证服务器地址的有效性->依据接口文档实现业务逻辑->然后便可以开始开发了;
3.微信开发平台为每个开发者准备了一个开发测试账号,每个测试账号都有一个appID(是唯一的)和appsecret,接下来就是填写url和token
4.开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上 ,url有四个参数(
参数 | 描述 |
---|---|
signature | 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 |
timestamp | 时间戳 |
nonce | 随机数 |
echostr | 随机字符串 |
)开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败;可以判断是否是腾讯服务器发送,由此可以保证账号的安全性。
5.所谓的url就是API接口,开发的前提是验证token(校验字符串,时间戳,随机数),判断是否是腾讯服务器发送。
6.获取access_token: 公众号调用各接口时都需使用access_token,access_token是公众号的全局唯一接口调用凭据。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
7.access_token的url是https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 请求方式是get
8.access_token有三个参数分别是:
参数 | 是否必须 | 说明 |
---|---|---|
grant_type | 是 | 获取access_token填写client_credential |
appid | 是 | 第三方用户唯一凭证 |
secret | 是 | 第三方用户唯一凭证密钥,即appsecret |
{"access_token":"ACCESS_TOKEN","expires_in":7200}
expires_in代表的是有效期 access_token获取到的凭证
<?php
define('APPID', 'wx1c85596047f585fc');
define('APPSECRET', 'a7fdfd0fc623b8a9aff5ffe51de24aa8');
define('TOKEN_FILE','access_token.txt');
$access_token=access_token();
echo $access_token;
//返回access_token
function access_token(){
//判断文件是否存在
if (is_file(TOKEN_FILE)) {
//读取文件
$str =file_get_contents(TOKEN_FILE);
$arr=json_decode($str,true);
//判断是否过期
if (time() - $arr['create_time'] > $arr['expires_in']-200) {
return getNewAccess_token();
}else{
return $arr['access_token'];
}
}else{
//不存在
return getNewAccess_token();
}
}
//得到新的access_token
function getNewAccess_token(){
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" .APPID. "&secret=" .APPSECRET;
//echo $url;
// 创建一个新cURL资源
$ch = curl_init ();
// 设置URL和相应的选项
curl_setopt ( $ch , CURLOPT_URL , $url );
curl_setopt ( $ch , CURLOPT_HEADER , false );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSLVERSION, 1);
// 抓取URL并把它传递给浏览器
$str=curl_exec ( $ch );
//关闭cURL资源,并且释放系统资源
curl_close ( $ch );
//处理$str
$arr=json_decode($str,true);
//保存新元素
$arr['create_time'] = time();
//数组->json
$str=json_encode($arr);
// 保存access_token
file_put_contents(TOKEN_FILE,$str);
return $arr['access_token'] ;
}