AngularJS接入微信JSSDK小结

作者: 蔑视魔山 | 来源:发表于2016-08-11 17:40 被阅读996次

最近手里一个微信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,所以代码比较乱。

相关文章

  • AngularJS接入微信JSSDK小结

    最近手里一个微信WEB项目,需要接入微信的部分功能——诸如“录音”、“文件上传”等等。一开始我只是当做一个普通的w...

  • create-react-app

    1.引入微信jssdk 安装: 使用:

  • 微信二次分享失败问题解决

    自定义微信分享标题及描述的基本流程: 首先引入微信jssdk ; 发送ajax请求将浏览器分享的地址(wind...

  • h5微信打开app

    wx-open-launch-app 1.这个标签在微信里使用需要引入微信jssdk2.需要在微信开发平台绑定相关...

  • 解决ios下微信h5页面音频无法自动播放的正确姿势

    网上百度出来的绝大多数方法是以下2个方法,仍是不对。 > 个人场景: 前提: 项目已引入微信jssdk `...

  • Vue+Koa使用微信分享等功能

    接入微信JSSDK流程图 1、准备工作 1-1、前端:Vue 1-2、后端:Koa 这里我们先规定Koa端口启动在...

  • 微信公众号配置

    微信授权配置(WEB端设置) 微信JSSDK配置(WEB端设置) 微信JSSDK配置(后台设置)

  • 接入jssdk

    微信jssdk说明文档详细介绍了,微信网页开发接入jssdk的流程:http://mp.weixin.qq.com...

  • 微信JSSDK分享功能使用

    微信jssdk初始化 微信支付调用

  • AngularJS小结

    最近、接到一个老项目需要维护开发新的功能。用到的技术栈主要是AngularJS、对于近几年一直用react、vue...

网友评论

本文标题:AngularJS接入微信JSSDK小结

本文链接:https://www.haomeiwen.com/subject/ngrssttx.html