微信开发

微信开发自己的一些总结

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});

文章目录
  1. 1. access_token
  2. 2. 拍照和图片
    1. 2.1. 问题和注意事项
  3. 3. 条形码&二维码
|