另一个2小时

access_token是需要2小时更新一次,在这里,又引入了一个2小时获取一次的字段,这个字段是: jsapi_ticket,这个字段是接入sdk的前提。与access_token类似,它也是需要2小时内重新获取,所以也需要一个类似于获取access_token的定时器来实时更新并保存sdk。

获取jsapi_ticket

微信提供一个获取接口,'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=[access_token]&type=jsapi'

这是一个get请求的接口,该请求url需要查询参数access_token,该请求返回jsapi_ticket, 然后我们需要保存到我们的数据库,与access_token同理,在我们接入sdk时,查询出这个jsapi_ticket供我们使用。

接口简介

就像接入微信服务器那样,如果想要接入sdk,就必须要进行微信服务器与本地服务器的一次通信验证。签名的算法如文档所示:

在这里,注意一下几点:

四个字段的字段排序是按照 键 的asc码,并不是值的。

  url必须是发起该请求的完整url,不包括hash部分。

  接入sdk需要在微信后台管理界面配置好接口安全域名,同授权域名一样

后台接口

后台接口我们定义为post接口,接收一个参数url为发起请求的完整url。

1. 时间戳10位字符串(最多10位,被坑过,Date.now()出的字串是13位,取最后10位)

2. 自定义字符串:随便定义

3. 获取到 jsapi_ticket

4. 取到url

5. 进行键的排序

6. 根据键的排序顺序按文档所示格式拼接以上4个字符串

7. sha1签名进行签名

8. 将微信appid、随机字符串、时间戳、签名一起返回给前端,进行配置。

joinSdk: function (req, res) {
// 获取jsapi_ticket
weixinUtil.getJsApiTicket(function (jsapiTicket) { var jsapi_ticket = jsapiTicket
var timestamp = Date.now().toString().slice(-)
var noncestr = 'WlddIECldl48D3'
var url = req.body.url
// 数据存储对象
var data = {
jsapi_ticket: jsapi_ticket,
timestamp: timestamp,
noncestr: noncestr,
url: url
}
// 键数组排序
var baseArr = ['jsapi_ticket', 'timestamp', 'noncestr', 'url'].sort() var str = '' for (var i= ; i < ; i ++) {
str += baseArr[i] + '=' + data[baseArr[i]] + '&'
}
str = str.slice(, -) var signature = sha1(str) res.json({code: , data: {
sdk_appId: config.weixinConfig.appId,
sdk_timestamp: timestamp,
sdk_noncestr: noncestr,
sdk_signature: signature
}}) })
}

前端接入配置

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script>
$.ajax({
url: '/weixin/joinSdk',
type: 'post',
body: {url: location.href}
}).then(function (res) {
if (res.code == ) {
var config = res.data
wx.config({
debug: false,
appId: config.sdk_appId,
timestamp: config.sdk_timestamp,
nonceStr: config.sdk_noncestr,
signature: config.sdk_signature,
jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage']
})
wx.ready(function () {
//...
})
}
} )
</script>

结尾

注:在测试号中,微信接入sdk分享,二次分享会接入失败,报错 需要关注公众号,造成接入sdk失败,分享的配置也失效。这个在线上公众号是不会有问题的,这个问题之前困扰了好久。太坑了。

sdk接入失败,大部分是签名的问题,可以对照文档检查。

微信公众号开发笔记3-sdk接入(nodejs)的更多相关文章

  1. 微信公众号开发笔记(C#)

    这篇文章还不错,使用  .net , 对微信用户的想公众号发送的文字进行回复.比较简单,自己可以修改更复杂的回复. 微信公众号开发笔记(C#) 原文地址 需求分析 根据用户在微信上发送至价值中国公众号 ...

  2. 微信公众号开发笔记1(nodejs开发的)

    本篇记录了微信公众号开发的一些笔记 一.微信服务器与我们服务器的交流 微信开发者拥有自己的服务器,在我们服务器上可以与微信服务器进行交流.既然可以交流,那就必定需要前提条件(微信认证),也就是说,只有 ...

  3. 微信公众号开发笔记1(nodejs开发)

    本篇记录了微信公众号开发的一些笔记 一.微信服务器与我们服务器的交流 微信开发者拥有自己的服务器,在我们服务器上可以与微信服务器进行交流.既然可以交流,那就必定需要前提条件(微信认证),也就是说,只有 ...

  4. 微信公众号开发笔记-验证token

    开发 话不多说我们直接进入主题 我们先去微信公众号申请一个公众号: 申请完成之后我们找到开发下的基本配置 然后找到进行基本配置,我们需要一个url地址来验证,这里的地址必需要是外网,Token是我们任 ...

  5. 微信公众号开发笔记2(nodejs)

    本篇主要记录调用微信各种api和功能实现 一.始于access_token 无论调用微信的什么api,都需要一个查询参数,就是我们每隔1小时或者2小时获取的access_token,笔记1中已经保证了 ...

  6. 集智robot微信公众号开发笔记

    开发流程 公众号基本配置(首先得有公众平台账号) 在开发菜单的基本配置中填写好基本配置项 首先配置服务器地址.Token.和消息加密密钥(地址为开发者为微信验证留的接口.token可以随便填写,只要在 ...

  7. 微信公众号开发笔记1-获取Access Token

    获取你的Access Token a)可以采用网址的形式: 用appid和appsecert获得access token,接口为https://api.weixin.qq.com/cgi-bin/to ...

  8. 微信公众号开发C#系列-2、微信公众平台接入指南

    概述 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流程是这样的,用户发送消息到微信服务器,微信服务器将接收到的消息post到用户接入时填写的url中,在url处理程序中,首先 ...

  9. 微信公众号开发--.net core接入

    .net进行微信公众号开发的例子好像比较少,这里做个笔记 首先,我们需要让微信能访问到我们的项目,所以要么需要有一个可以部署项目的连接到公网下的服务器,要么可以通过端口转发将请求转发到我们的项目,总之 ...

随机推荐

  1. 用PHPExcel类读取excel文件的内容

    这里对PHPExcel类不做介绍,有兴趣的朋友可以自己查阅资料 在classes文件夹下有个PHPExcel.php文件,这个文件是这个类库的主要入口文件,在用之前,要引入这个类 其他的类,在此类中会 ...

  2. js中实现继承的几种方式

    首先我们了解,js中的继承是主要是由原型链实现的.那么什么是原型链呢? 由于每个实例中都有一个指向原型对象的指针,如果一个对象的原型对象,是另一个构造函数的实例,这个对象的原型对象就会指向另一个对象的 ...

  3. 工作中的趣事:聊聊ref/out和方法参数的传递机制

    0x00 前言 我在之前的游戏公司工作的时候,常常是作为一只埋头实现业务逻辑的码农.在工作之中不常有同事会对关于编程的话题进行交流,而工作之余也没有专门的时间进行技术分享.所以对我而言上家虽然是一家游 ...

  4. js简单省级联动菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. java日期转换

    在java开发过程中,时间的转换时必须掌握的=========下面把时间转换做个总结,有可能不是很全面 时间格式只有两种 yyyy-MM-DD yyyy/MM/DD 时间的类型:字符串类型.sql类型 ...

  6. MyBatis使用statementType="STATEMENT"

    statementType="STATEMENT"是使用非预编译,现在我需要动态传人表名和字段名,所以需要用STATEMENT,使用之后所有变量取值都要改成${xxxx},而不是# ...

  7. Luogu1486郁闷的出纳员【Splay】

    P1486 郁闷的出纳员 题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反 ...

  8. ng指令控制一个元素的影藏的与显示几种方法的使用

    在ng中我们控制一个元素的显示与隐藏的方法: (1):ng-show=true/false 解释:ng-show使用的是display="block"/"none&quo ...

  9. Android线程池使用终结版

    有一段时间没写博文了,今天抽空总结一下,也希望能通过自己写的这些文章,加深理解的同时能帮 助在技术方面有疑点的朋友搞清楚个所以然来,由于经常会在网上或群里看到有朋友会问线程方面的 东西,就像我一个朋友 ...

  10. android.util.Log常用方法

    android.util.Log常用的方法有以下5个: Log.v() Log.d() Log.i() Log.w() 以及 Log.e() .根据首字母分别对应VERBOSE,DEBUG,INFO, ...