您的位置:首页 > 移动开发 > 微信开发

微信学习笔记之二(微信jssdk获取配置权限流程)

2015-04-03 09:39 615 查看
前期准备:

a. 自己的电脑绑定独立的域名

b. 成功申请微信管理测试账号

c. 本引导采用的是php的CI框架

1.绑定域名

这一步 在笔记一 中已经解决,正式公众号的绑定很简单请访问官方文档

这里不再赘述。

2.获取 config相关的配置信息

(1) 获取token(失效时间 7200秒)

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

获取结果示例:

{"access_token":"ACCESS_TOKEN","expires_in":7200};

请求:

注意如果是本地映射外网的服务器,需要绕过https的证书认证

正式服务器环境可以省略这一步

$this->curl->options(array(CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false));//绕过证书认证 正式服务器可省略
$res =  $this->curl->simple_get($url); //发送get 请求 并返回请求结果
$token = json_decode($res);
$token = $token->access_token; //到这里就完成了第一步的请求


第一种方式缓存:memcache

<?php
$mmc=memcache_init();//初始化缓存
$token=memcache_get($mmc,"token");//获取Token
if(empty($token))//判断是否为空,如为空则重新获取Token
{
$appid="wx7ced2a8593275753";
$secret="71f475563d00103a356943875e96d43a";
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";
/*
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$a = curl_exec($ch);
*/
//将上面的CI的获取代码段放在这里
$strjson=json_decode($a);
$access_token = $strjson->access_token;
memcache_set($mmc,"token",$access_token,0,7200);//过期时间为7200秒
$token=memcache_get($mmc,"token");//获取Token
}
?>


第二种方式缓存:文件缓存

<?php
//这种方式要平凡操作文件IO 也有它的弊端 只写操作思路伪代码
//我们以 "时间戳 ## access_token" 格式进行存储
$current_time = time();
$info = file_get_contents("文件路径");
$access_token = '';
if(trim($info) == ''){
//重新获取token代码 将CI获取的代码段放在这里
//获取到后将新的时间戳 和 对应的 access_token 存入
$access_token = 赋值;
}else{
$access_info = explode('##',$info);
$time = $access_info[0];
if($current_time > $time + 7200 || trim($access_info[1]) == ''){
//重新获取token代码 将CI获取的代码段放在这里
//获取到后将新的时间戳 和 对应的 access_token 存入
$access_token = 赋值;
}else{
$access_token = 赋值;
}
}

?>


第三种方式缓存:数据库缓存

这种方式要频繁查询数据库,原理与上面的文件缓存一致,不在赘述

(2) 获取完成后 提取 ticket

(获取及缓存方式 同上)
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
{

"errcode":0,

"errmsg":"ok",

"ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-

41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",

"expires_in":7200

}

(3) 生成 signature

参数如下:

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-

HhTdfl2fzFy1AOcHKP7qg

noncestr=Wm3WZYTPz0wzccnW //自己生成的16位随机字符串

timestamp=1414587457 //第一次请求时的时间戳

url=http:sjgf.nat123.net //当前url 主域名必须与你绑定的安全js域名一致

$string1 ="jsapi_ticket={$ticket}&noncestr={$noncestr}×tamp={$timestamp}&url={$current_url}";
//signature的获取
$signature=sha1($string1)。


(4) 验证config 微信

appId: '', // 必填,公众号的唯一标识

timestamp: , // 必填,生成签名的时间戳

nonceStr: '', // 必填,生成签名的随机串

signature: '',// 必填,签名

详情请见:官方jssdk 说明文档
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: