微信开发自己的一些总结
access_token
以下来自微信公众号开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。
access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token)
故而,可以将access_token和有效期存放到文件中。每次get时先从文件读取,没有或者过期,直接请求接口获取
拍照和图片
拍照使用jssdk。demo下载:http://demo.open.weixin.qq.com/jssdk/sample.zip
1 2
| <a href="javascript:;" class="weui-btn weui_btn_primary" href="javascript:void(0);" id="img-upload">上传图片</a> <img src="" id="img-preview" style="width: 100px; height: 100px;">
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| var uploadButton = $('#img-upload'); var uploadPreview = $('#img-preview'); //点击上传按钮 uploadButton.on('click', function() { wx.chooseImage({ count: 1,// 默认9 sizeType: ['original', 'compressed'],// 可以指定是原图还是压缩图,默认二者都有 sourceType: ['album', 'camera'],// 可以指定来源是相册还是相机,默认二者都有 success: function(res) { var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片 uploadPreview.attr('src', localIds[0]); //微信本地图片地址,可以用来做上传前预览 // 将图片上传到微信服务器,有效期三天,通过接口下载图片到自己服务器 // 接口 http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID wx.uploadImage({ localId: localIds[0], // 需要上传的图片的本地ID,由chooseImage接口获得 isShowProgressTips: 1, // 默认为1,显示进度提示 success: function (res) { var serverId = res.serverId; // 返回图片的服务器端ID } }); }, error: function(res) { $.toast("系统异常,请稍后重试!", "cancel"); } }); });
|
问题和注意事项
注意事项: 在微信公众号绑定域名,是“JS接口安全域名”,并不是网页域名哦!!!(不加http://)
开发过程中,真遇到了invalid signature错误。
invalid signature签名错误。建议按如下顺序检查:
1.确认签名算法正确,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。
2.确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。
3.确认url是页面完整的url(请在当前页面alert(location.href.split(‘#’)[0])确认),包括’http(s)://‘部分,以及’?’后面的GET参数部分,但不包括’#’hash后面的部分。
4.确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。
5.确保一定缓存access_token和jsapi_ticket。
6.确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去’#’hash部分的链接(可用location.href.split(‘#’)[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。
本人问题出在url写死了。php动态获取:
1 2
| $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
|
条形码&二维码
使用 jquery-barcode.js 和 jquery.qrcode.min.js
1 2 3 4 5 6
| <div id="bcTarget" style="margin: 0 auto; margin-top: 100px; margin-bottom: 40px;"></div> <div id="output" style="text-align: center;"></div> // 生成码。 showHRI是否显示码串 $("#bcTarget").empty().barcode(content, "ean13",{barWidth:2, barHeight:30,showHRI:false}); $('#output').qrcode({width:200,height:200,correctLevel:0,text:content});
|