对于做H5手机端的同学来说,微信是个必不可少的入口,自然而然我们需要调用微信提供给H5或者说JS的各种接口,我们也要根据微信的要求去做各种签名验证,才能最终到达我们的需求,GITHUB上面也有很多关于这方面的库可以用,但是他们总是或多或少的不能完全满足需求,或者说是又要付出很多额外的开发,因此呢,我自己也是开发了一个库wechat-jssdk去最大化的满足微信JSSDK有的功能,此库只关注jssdk所提供的功能,并提供服务端(NodeJS)各种验签支持,并且自动化管理各种token,ticket的过期处理,让开发者能更多的关注业务本身。 好了,说完了WHY, 下面介绍HOW: 先上个demo图:

主要功能集合

  • ?服务端
  • ?浏览器端
  • ?OAuth网页授权
  • ?微信卡券
  • ?微信支付
  • ?使用Stores
  • ?完整 Demo

使用方法

npm install wechat-jssdk --save

yarn add wechat-jssdk

//require并初始化
const Wechat = require('wechat-jssdk');
const wx = new Wechat(wechatConfig);
复制代码

Wechat Config

wechatConfig 为以下格式:

{//第一个为设置网页授权回调地址wechatRedirectUrl: "http://yourdomain.com/wechat/oauth-callback", wechatToken: "xxx", //可选,第一次在微信控制台保存开发者配置信息时使用appId: "xxx",appSecret: "xxx",card: true, //开启卡券支持,默认关闭payment: true, //开启支付支持,默认关闭merchantId: '', //商户IDpaymentSandBox: true, //沙箱模式,验收用例paymentKey: '', //必传,验签密钥,TIP:获取沙箱密钥也需要真实的密钥,所以即使在沙箱模式下,真实验签密钥也需要传入。//pfx 证书paymentCertificatePfx: fs.readFileSync(path.join(process.cwd(), 'cert/apiclient_cert.p12')),//默认微信支付通知地址paymentNotifyUrl: `http://your.domain.com/api/wechat/payment/`,
}
复制代码

设置微信环境

1.现在一般直接给个MP_verify_xxx.txt文件放在你网站根目录,让微信自动去验证

2.还需要提供一个API来让浏览器获取当前地址的签名

//express风格
router.get('/get-signature', function(req, res) {wx.jssdk.getSignature(req.query.url).then(function(signatureDate) {res.json(signatureDate);});
});复制代码

3.获取签名后,进入下一步浏览器端使用方法.

浏览器端

在前端中js:

//ES6
import WechatJSSDK from 'wechat-jssdk/dist/client';
//commonjs
const WechatJSSDK = require('wechat-jssdk/dist/client');
//others
window.WechatJSSDK
//然后实例化:
const wechatObj = new WechatJSSDK(config);
复制代码

config应该为:

const config = {//前4个是微信验证签名必须的参数,第2-4个参数为类似上面 '/get-signature' 从node端获取的结果'appId': 'xxx','nonceStr': 'xxx','signature': 'xxx','timestamp': 'xxx',//下面为可选参数'success': function(wechatObj){}, //微信签名成功回调函数, 跟 'successCallback' 一样'error': function(err, wechatObj){}, //微信签名失败回调函数, 跟 'errorCallback' 一样'debug': true, //开启 debug 模式'jsApiList': [], //设置所有想要使用的微信jsapi列表, 默认值为 ['onMenuShareTimeline', 'onMenuShareAppMessage'],分享到朋友圈及聊天记录'customUrl': '' //自定义微信js链接
}
复制代码

验证签名成功后, 就可以自定义你的分享内容了:

//自定义分享到聊天窗口
//内部调用 `wechatObj.callWechatApi('onMenuShareAppMessage', {...})`, 语法糖而已
wechatObj.shareOnChat({type: 'link',title: 'title',link: location.href,imgUrl: '/logo.png',desc: 'description',success: function (){},cancel: function (){}
});
//自定义分享到朋友圈
//语法糖
wechatObj.shareOnMoment({type: 'link',title: 'title',link: location.href,imgUrl: '/logo.png'
});
复制代码

要获取原始的微信对象 wx,可以通过wechatObj.getOriginalWx()来获取。
如果第一次验证失败,可以在error回调里更新签名信息,并重新发验证请求:
wechatObj.signSignature(newSignatureConfig);, newSignatureConfig只需包含:

{'nonceStr': 'xxx','signature': 'xxx','timestamp': 'xxx',
}
复制代码

调用其他微信接口:
wechatObj.callWechatApi(apiName, apiConfig)
apiNameapiConfig请参考微信官方接口文档

OAuth

默认生成微信授权URL为 wx.oauth.snsUserInfoUrlwx.oauth.snsUserBaseUrl,其中的默认回调URL为 wechatConfig 中配置的 wechatRedirectUrl. 你也可以通过调用 wx.oauth.generateOAuthUrl(customUrl, scope, state)来自定义回调地址

//callback url handler
//如"wechatRedirectUrl"配置为 "http://127.0.0.1/wechat/oauth-callback", 你的路由需要为:
router.get('/wechat/oauth-callback', function (req, res) {//得到code,获取用户信息wx.oauth.getUserInfo(req.query.code).then(function(userProfile) {console.log(userProfile)res.render("demo", {wechatInfo: userProfile});});
});
复制代码

TIP: 确保上面的重定向地址域名已经在微信里的授权回调地址设置里设置过。

微信卡券

在wechatConfig设置 card: true 来支持卡券功能的服务端支持, 参考demo.
要查看卡券 APIs, 参考 cards apis

微信支付

在wechatConfig设置 payment: true 来支持微信支付功能的服务端支持, 其他一些支付必须的配置也需要一同设置.
参考 demo.
要查看支付 APIs, 参考 payment apis

使用Stores

Store用来自定义存储token持久化(如文件,数据库等待),实现自己的Store, 请查看API
自带 Store: FileStore, MongoStore,默认为FileStore, 存储到wechat-info.json文件.

APIs

查看 API wiki

Demo

拉项目: git clone git@github.com:JasonBoy/wechat-jssdk.git 拷贝 demo/wechat-config-sample.jsdemo/wechat-config.js,
然后在里面里面修改 appId, appSecret, 及其他的配置 如支付的其他配置如果需要使用支付功能的话. 然后 npm startnpm run dev, 使用微信开发者工具测试。

结论

好了,大致的使用方法如上,基本满足JSSDK大多数的功能需求,有兴趣的可以去Github试一下。

微信JSSDK与NodeJS深度整合相关推荐

  1. 微信JSSDK invalid signature签名错误的解决方法

    导致签名错误的原因: 微信文档给出以下原因. invalid signature签名错误:建议按如下顺序检查: 确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cg ...

  2. 微信jssdk已无力吐槽

    微信强大的整合能力让企业公众号的开发迅速窜红.尤其是企业须要个性化定制的一些功能.公司在同一时候上线的app和触屏版的应用中,微信分享自然是不可或缺的重要一环. 纵观如今大多数的微信公众号.分享大都是 ...

  3. 微信JS-SDK签名接口的使用与开发

    最近诸事缠身好久没有写文章了.前不久将与微信公众号有关的一些知识点进行了梳理,微信公众号开发过程中,用最多的就是微信js-sdk了.但是使用微信js-sdk需要获取签名.时间戳.随机字符串,等等一系列 ...

  4. 西门子数字化战略下的深度整合-再见了Siemens PLM Software

    写在前面 记得小编在前面的文章中吐槽过西门子自动化和西门子工业软件的割裂感,自动化的小伙伴所熟知的西门子,还有很多做自动化的小伙伴不熟悉的Siemens PLM Software(国内子公司为西门子工 ...

  5. 微信公众号nodejs版

    微信公众号nodejs版 标签(nodejs wechat): 学习 前言 学习nodejs是从搭建hexo开始的,那时候每天还能写一篇日志,结果中间出差了一周,回来后状态全无,就变懒了-- 好在我并 ...

  6. 微信JS-SDK文档

    微信JS SDK 调用详解   微信JS SDK 调用详解... 1 概述... 2 使用说明... 2 接口调用说明... 4 基础接口... 4 判断当前客户端版本是否支持指定JS接口... 5 ...

  7. 进军微信第一步:接入微信JS-SDK

    [前言] 某天,接到这么一个需求:自定义微信网页分享出来的标题,描述和图标.以前没玩过这个,感觉应该很简单,动手了之后,躺过各种坑才知道并没那么容易.完全独立研究排错,感受颇多,分享出来给大家铺一铺路 ...

  8. C#开发微信门户及应用(39)--使用微信JSSDK实现签到的功能

    随着微信开逐步开放更多JSSDK的接口,我们可以利用自定义网页的方式来调用更多微信的接口,实现我们更加丰富的界面功能和效果,例如我们可以在页面中调用各种手机的硬件来获取信息,如摄像头拍照,GPS信息. ...

  9. php拍照从手机相册中选择,微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例...

    本文实例讲述了微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法.分享给大家供大家参考,具体如下: 目前中js-sdk 1.0版本中,预览图片提供了2个接口,接口的定义参考官方文档 1.预览 ...

最新文章

  1. BOOST_VMD_ASSERT_IS_IDENTIFIER宏相关的测试程序
  2. [转]轻松掌握Ajax.net系列教程十六:使用DropDownExtender
  3. [Regular] 2、正则表达式基础元字符及分组、捕获
  4. SAP Cloud for Customer Cloud(C4C)Application Studio里的代码调试
  5. AJAX全套(JSONP、CORS)
  6. 怎么配置服务器php环境,配置PHP服务器环境步骤详解
  7. MobaXterm中修改服务器ip,如何使用mobaxterm登录云服务器
  8. Pycharm - 创建python 文件模版
  9. python 表格模块 prettyTable 简单使用
  10. 行翻转和列翻转_用量子计算机翻转硬币
  11. 双足机器人Maltab腿部建模,正运动学分析
  12. java saf_java – 从SAF内容URI中提取文件名
  13. Spring Boot(四)-- 中的application.properties配置简介 2
  14. 【带你敲】演讲比赛流程管理系统
  15. App Store 热搜页面被乱码攻占,腾讯成为唯一幸存者
  16. STP——STP生成树协议讲解
  17. 第五章 运算符、表达式和语句
  18. 浙江--香港人才招聘會
  19. Nuvoton M0518 之 延时程序(延时1毫秒)
  20. 群晖自动将阿里云盘里面的内容下载到本地(全网独家)

热门文章

  1. Office WORD里面打字,后面的字自动被删除怎么办
  2. id文本框适应文字_id文本框适应文字_科普贴士 | 必会的12个Word文字处理技巧,太实用了!...
  3. 极光科研中心 · 资源开发区(ACM工程/MEP工程/STL标准库/先进书写)
  4. VC中怎么输入特殊符号(如平方、立方等下标符号)
  5. Q3营收增长超市场预期,陌陌距离Match还差多远?
  6. 主要工作业绩应该怎么写
  7. 如何用Python找到阴阳师妖怪屋的最佳探索队伍
  8. 出口欧美的木制品为什么需要FSC认证
  9. 让人心疼的微博语录50句
  10. 九宫幻方(C语言代码)