配置并学习微信JS-SDK(1)
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
微信JS-SDK demo http://demo.open.weixin.qq.com/jssdk/#menu-device
微信JS-SDK 说明文档:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
demo地址http://www.qq210.com/shoutu/android
- 配置公众号:微信后台-公众号设置-功能设置-JS接口安全域名
- 引入JS文件:
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
- 配置js接口接入的配置(根据附录1获取签名):
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。上线需设置false
appId: 'wx693f4c6207512348b33', // 必填,公众号的唯一标识 微信后台-开发者中心
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名,见附录1
jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});- access_token ,需要后台缓存jsapi_ticket,有效期7200秒
- 根据access_token获取jsapi_ticket ,需要后台缓存jsapi_ticket,有效期7200秒
- 根据sha1(jsapi_ticket+url+timestamp+自定义随机串)求出配置中的signature
$this->load->driver( 'cache' ); //获取access_token,jsapi_ticket缓存
$access_token = $this->cache->kvdb->get( 'access_token' );
$jsapi_ticket = $this->cache->kvdb->get( 'jsapi_ticket' );
log_message('error', "获取access_token={$access_token},jsapi_ticket={$access_token}缓存"); //如果不存在access_token缓存
if ( ! $access_token AND ! $jsapi_ticket ) {
log_message('error', '如果不存在access_token缓存'); $this->load->library('MyFetchurl'); //1.获取access_token
$access_token_json = $this->myfetchurl->https_get( "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=".APPSECRET ); //把 json_decode() 后的对象当作数组使用,需要加第二个参数才是数组返回
$access_token_decode = json_decode( $access_token_json, true ); $access_token = isset( $access_token_decode['access_token'] ) ? $access_token_decode['access_token'] : '';
log_message('error', "获取access_token={$access_token}"); //设置access_token缓存
$result = $this->cache->kvdb->save( 'access_token', $access_token, EXPIRE_TIME );
log_message('error', "设置access_token缓存$result"); //2.获取jsapi_ticket
$jsapi_ticket_json = $this->myfetchurl->https_get( "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$access_token}&type=jsapi" );
$jsapi_ticket_decode = json_decode( $jsapi_ticket_json, true );
$jsapi_ticket = isset( $jsapi_ticket_decode['ticket'] ) ? $jsapi_ticket_decode['ticket'] : '';
log_message('error', "获取jsapi_ticket=$jsapi_ticket"); //设置jsapi_ticket缓存
$result = $this->cache->kvdb->save( 'jsapi_ticket', $jsapi_ticket, EXPIRE_TIME );
log_message('error', "设置jsapi_ticket缓存=$jsapi_ticket");//3.签名算法// 3.1.构造拼接串$view_data['timestamp'] =$timestamp= time();$view_data['noncestr'] =$noncestr= md5($timestamp);$url= base_url();$string="jsapi_ticket={$jsapi_ticket}&noncestr={$noncestr}×tamp={$timestamp}&url={$url}";log_message('error',"构造拼接串string=$string");// 3.2.sha1拼接串$view_data['signature'] = sha1($string);$this->load->view('index.html',$view_data); - 总结下上面求取签名问题
- sae上的curl不支持https,换成SaeFetchurl去获取:封装成方法sae_fetchurl($url, $post_data)
- json_decode的结果是对象,折腾很久:传人第二个参数true就可以返回数组形式
- SAE版的CI缓存类数据缓存获取用get() 而不是demo里面的get_metadata(),这个是获取包括缓存时间数据
- 订阅号的可以调用的js接口以及最后配置文件如下
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: 'wx693f4c620712348b', // 必填,公众号的唯一标识
timestamp: '<?=$timestamp?>', // 必填,生成签名的时间戳
nonceStr: '<?=$noncestr?>', // 必填,生成签名的随机串
signature: '<?=$signature?>',// 必填,签名,见附录1
jsApiList: [// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
'checkJsApi',
'hideMenuItems',
'showMenuItems',
'hideAllNonBaseMenuItem',
'showAllNonBaseMenuItem',
'translateVoice',
'startRecord',
'stopRecord',
'onRecordEnd',
'playVoice',
'pauseVoice',
'stopVoice',
'uploadVoice',
'downloadVoice',
'chooseImage',
'previewImage',
'uploadImage',
'downloadImage',
'getNetworkType',
'openLocation',
'getLocation',
'hideOptionMenu',
'showOptionMenu',
'closeWindow',
'scanQRCode'
]
});
- 测试是否验证成功
// 微信
wx.error(function(res){
console.log('验证失败');
}); wx.ready(function(){
document.querySelector('#checkJsApi').onclick = function() {
wx.checkJsApi({
jsApiList:[
'getNetworkType',
'previewImage'
],
success:function(res){
alert(JSON.string)
}
});
} // 6 设备信息接口
// 6.1 获取当前网络状态
document.querySelector('#getNetworkType').onclick = function () {
wx.getNetworkType({
success: function (res) {
alert(res.networkType);
},
fail: function (res) {
alert(JSON.stringify(res));
}
});
};
});
在微信浏览器测试,调用结果功能成功! 
测试demo http://www.qq210.com/shoutu/android
因为漏了copy签名算法上来,补充上 如蓝色部分 谢谢陆先生的提示
配置并学习微信JS-SDK(1)的更多相关文章
- 实战微信JS SDK开发:贺卡制作与播放(1)
前段时间忙于CanTK 2.0的开发,所以博客一直没有更新.CanTK 2.0主要增强了游戏和富媒体的开发,现在编码和测试基本完成了,等文档完成了再正式发布,里面有不少激动人心的功能,等发布时再一一细 ...
- 微信JS SDK接入的几点注意事项
微信JS SDK接入,主要可以先参考官网说明文档,总结起来有几个步骤: 1.绑定域名:先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”.备注:登录后可在“开发者中心”查看对 ...
- 微信js sdk上传多张图片
微信js sdk上传多张图片,微信上传多张图片 该案例已tp3.2商城为例 直接上代码: php代码: public function ind(){ $appid="111111111111 ...
- 微信JS SDK配置授权,实现分享接口
微信开放的JS-SDK面向网页开发者提供了基于微信内的网页开发工具包,最直接的好处就是我们可以使用微信分享.扫一扫.卡券.支付等微信特有的能力.7月份的时候,因为这个分享的证书获取问题深深的栽了一坑, ...
- 微信js SDK接口
微信JS-SDK说明文档 http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html 一.微信登录功能 在进行微信OAut ...
- 微信开发(2):微信js sdk分享朋友圈,朋友,获取config接口注入权限验证(转)
进行微信开发已经一阵子了,从最初的什么也不懂,到微信授权登录,分享,更改底部菜单,素材管理,等. 今天记录一下微信jssdk 的分享给朋友的功能,获取config接口注入. 官方文档走一下简单说:四步 ...
- 调用微信js sdk
场景:需要调用微信获取当前位置的借口. 途径:查看微信 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 .后 ...
- 微信js sdk分享开发摘记java版
绑定域名和引入js的就不说了 废话不说直接上代码 public void share(HttpServletRequest request) throws Exception { StringBuff ...
- 微信JS SDK使用权限签名算法
jsapi_ticket 生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据.正常情况下,jsapi_ticket的有效期为7200秒, ...
随机推荐
- JVM 字节码执行实例分析
前言 最近在看<Java 虚拟机规范>和<深入理解JVM虚拟机>,对于字节码的执行有了进一步的了解.字节码就像是汇编语言,是 JVM 的指令集.下面我们先对 JVM 执行引擎做 ...
- ASP.NET MVC- VIEW Overview Part 1
The purpose of this tutorial is to provide you with a brief introduction to ASP.NET MVC views, view ...
- oppo X907刷机包 COLOROS 1.0 正式版公布 安卓4.2.2
ROM介绍 本版本号将是X907史上最好的一版本号 全新COLOROS的UI 更新全局手势板操作 优化高速启动应用 安全保障中心也是一直採用COLOROS组成的 COLOROS 1.0给用户带来在线音 ...
- Android-Unable to resolve target 'android-8'
- BZOJ 3265 志愿者招募增强版 单
标题效果:同1061 只是间隔为每种类型的志愿工作是多级 这是卡网络流量?未知 所有在所有的1061您将可以更改为在稍微改变- - #include <cmath> #include &l ...
- 2440test 裸机測试 调试不进main 设置改动方法
2440test没进main函数并非跑飞.bin文件已经烧写到开发板里了的 而是没选择载入文件,导致不能调试程序文件 主要设置例如以下:
- 查看LINUX发行商版本与LINUX内核版本
查看LINUX发行商版本:[root@server-mysql ~]# cat /etc/issue Red Hat Enterprise Linux Server release 6.3 (Sant ...
- careercup-数组和字符串1.5
1.5 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能.比如,字符串”aabcccccaaa“会变成”a2b1c5a3“.若”压缩“后的字符串没有变短,则返回原先的字符串. 类似 le ...
- codeforces 148D Bag of mice(概率dp)
题意:给你w个白色小鼠和b个黑色小鼠,把他们放到袋子里,princess先取,dragon后取,princess取的时候从剩下的当当中任意取一个,dragon取得时候也是从剩下的时候任取一个,但是取完 ...
- JVM Davilk ART 简介 区别
JVM和DVM JavaSE 程序使用的虚拟机叫 Java Virtual Machine,简称 JVM.Android 平台虽然是使用java语言来开发应用程序,但Android程序却不是运行在标准 ...