AngularJS接入微信JSSDK小结

最近手里一个微信WEB项目,需要接入微信的部分功能——诸如“录音”、“文件上传”等等。一开始我只是当做一个普通的web工程在做,选了Framework7作为UI+逻辑框架,也算是练练手。之后发现Template7在逻辑代码的组织上存在一些我不大习惯的地方,于是还是回归了AngularJS。


配置清单:

Angular:1.5.7

Angular-UI-Router:0.3.1

微信JSSDK:1.0.0

微信调试工具:0.3。0


资源:

微信测试号申请:http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

签名验证:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign

接口调试:http://mp.weixin.qq.com/debug/


1.需要准备的内容:

公众号的APPID和Secret:这个我是直接在测试页面拿到的。

调试工具:一定要有,因为直接在控制台看,和真机的偏差还是较大的。

2.原理:

通过APPID和Secret生成token,通过token生成api的票据(ticket),通过票据算出配置,传入配置,激活wx对象,在wx对象ready之后,即可调用方法。

而且后面会讲到,wx对象接受的配置里,加密字符串是包含了当前页面的地址的,只对单地址有效的,这个地址是#之前的部分,而使用了UI-router后,Angular项目——推测其他SPA也是——只有一个地址,这就使得只需要做一次wx对象的初始化,方便了不少。

3.config文件的生成:

这个我最初理解错了,想写在客户端,但是后来发现只要服务器持有一个7200s的token和ticket就可以。于是我拿Node在服务端写了一个简单的方法,用于生成。具体代码不贴了,超级简单。

时间戳代码:

Date.parse(newDate()) /1000

4.wx初始化

wx对象初始化时接受的config对象中,有一个signature,signature是由ticket、noncestr、时间戳、当前地址拼接成的字符串,SHA-1加密生成的。故当你URL变了之后,需要重新获取。

这里我使用了【https://www.zhihu.com/question/48160043】这个问题中的方法。在run方法中直接调用$http去获取config,然后在每个Controller中只是进行$window.wx的ready。

//利用angular初始调用

angular.module("wechatShare",[])

.run(function($http,$window,$location){

//利用http将$location.$$absUrl发送到后端并完成签名,再将签名等参数发送回前端,前端再利用返回来的参数填入config:

$http(

url: 实现签名的后端url,

method:"post",

data: {url: $location.$$absUrl},

).then(

function(res){

$window.wx.config(res.config);

}

);

})

.controller("sharePageCtrl", function($window,$scope){

//在每一个需要分享的页面对应的controller,调用wx.ready():

/*建议可建一个factory,就不用每个controller给微信写一大串代码了*/

$window.wx.ready(

function(){

$window.wx.onMenuShareTimeline({});

$window.wx.onMenuShareAppMessage({});

}

);

})

这样其实有个问题,就是错误处理其实比较麻烦……我还没想到好的方法。


以上就是正常流程。下面是错误处理:

首先,在wx初始化时,如果是签名错误,请仔细核对每一个字段,我出现过两个错误:1.时间戳不对;2.&符号错误。请务必——仔细核对!。

其次,如果是URL不合规,这里有个tips:首先,测试号允许使用IP而非域名进行安全域的注册,其次,localhost可以写成127.0.0.1。这样的话,就可以注册本机了。

第三,当测试号使用IP时,一定要注意,只写IP和Port,千万……不要写……协议。参见【http://blog.csdn.net/zyf_balance/article/details/48178353】

这样下来,就可以了。


P.S.:因为文章写的时候还不会markdown,所以代码比较乱。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容