基于微信的网页开发笔记
一.实现只能在微信中打开页面
先对浏览器的UserAgent进行正则匹配,将不含有微信独有标识的视为其他浏览器;
如果不是则弹出警告框,阻止页面继续加载,并强行关闭页面;
方法如下:
var useragent = navigator.userAgent;
if (useragent.match(/MicroMessenger/i) != 'MicroMessenger') {
alert('已禁止本次访问:您必须使用微信内置浏览器访问本页面!');
var opened = window.open('about:blank', '_self');
opened.opener = null;
opened.close();
}
二. 了解如何得到用户信息:
详见微信公众平台开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432
第一步:根据appid和app_secret获取access_token
注:大写的部需要填写对应的值。
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
grant_type=client_credential为必填项;
第二步:获取授权,得到用户基本信息
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
wechat_redirect:如果直接在微信打开链接,可以不填此参数;如果需要重定向则必须要加上,它会引导页面指向其中redirect_uri代表的授权后回调的地址;
state:不是必填项,但是可以将能用得到的参数写进去。方便获取;
scope:值为snsapi_base时只能获取access_token和openID,不弹出确认授权信息的页面;值为snsapi_userinfo时可以获取更详细的用户资料,比如头像、昵称、性别等,但需用户点击并确认授权。
因为微信api获取用户信息的接口是通过传入的appid和access_token的值来获取的,所以可以实现不经过用户授权从而获取到用户的一些基本信息。并保存在数据库中
以下是根据token以及用户的openid获取用户基本信息的方法
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
三.正式开发步骤
第一步:申请测试号
网址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
完善接口域名及授权回调页面域名
接口域名示例:
点击修改填入回调域名:
第二步:在页面引入JS文件,样式也一并引入
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<link rel="stylesheet" href="https://res.wx.qq.com/open/libs/weui/1.1.0/weui.min.css">
<script type="text/javascript" src="https://res.wx.qq.com/open/libs/weuijs/1.1.1/weui.min.js"></script>
weui包含表单、基础组件、操作反馈等内容,详见https://weui.io/
第三步:在页面添加配置信息
x.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名,
jsApiList: [] // 必填,需要使用的JS接口列表,如图片选择,图片上传,图片预览等
});
还需要添加ready接口处理成功验证:
wx.ready(function() {
var title = '致力于打造专业精准的变速箱数据查询系统';
var desc = '油品匹配,用量,技师建议,换油位置及接头,换油养护套件等信息图例应有尽有,让变速箱养护不再困难';
wx.checkJsApi({
jsApiList: ['chooseImage','previewImage'], // 需要检测的JS接口列表
success: function(res) {
// 以键值对的形式返回,可用的api值true,不可用为false
// 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
}
});
});
error接口处理失败验证:
wx.error(function(res){
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
alert("errorMSG:"+res.err_msg);
});
第四步:调用所需的接口
接下来就可以根据需求来调用相应的接口了。
接口参考微信JS-SDK说明文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
这里举个例子,选择图片接口。
wx.chooseImage({
count: 4, // 默认9
sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: function (res) {
var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
toAddImgDiv(localIds,areaId)
}
});