node怎么获取端午节微信推送送

页面加载中,请耐心等待...
还有条评论,展开查看
本书作译者
自出版作者
{{item.isFollow?'已关注':'加关注'}}
{{item.isFollow?'已关注':'加关注'}}
0||relatedCourse.length>0)&&isBookDetail">
谁在看这本书您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
nodejs微信公众号支付开发.doc 5页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
nodejs微信公众号支付开发
这篇文章主要为大家详细介绍了nodejs微信公众号支付开发,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
odeJs 微信公众号功能开发,移动端 H5页面调用微信的支付功能。这几天根据公司的需要使用 node 和 h5页面调用微信的支付功能完成支付需求。现在把开发过程重新捋一遍,以帮助更多的开发者顺利的完成微信支付功能的开发。(微信暂时还没有提供 node 的支付功能)
一.请求CODE
请求 code 的目的就是获取用户的 openid(用户相对于当前公众号的唯一标识) 和access_token,请求的API:open.weixin.qq/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
此 api 需要注意几个参数:
appid公众号的 appid,可以在公众号中看到
redirect_uri 自定义的微信回调地址, 微信会在你请求完上面的地址后跳转到你定义的redirect_uri的地址, 带着 code,此处的 redirect_url 需要 **url_encode** *php*, 如果你的程序是 node 则需要使用 **encodeURLComponent(url)**编码
response_type=code,这个没什么好说的就是固定的 response_type=code,详细说明可以查看微信官网的说明
scope=snsapi_userinfo,固定这样写就好,详细说明可以查看微信官网的说明
state=STATE 固定这样写就好,详细说明可以查看微信官网的说明
wechat_redirect 固定这样写就好,详细说明可以查看微信官网的说明
ps:官网链接:
二.通过code获取access_token,openid
第一步已经获取到了 code 的值了, 那么接下来就需要通过 code 来获取 access_token,openid的值了,请求的 api
API sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
此处api 的参数说明:
appid 微信公众号 id,微信公众号后台获取
secret 微信公众号的密钥, 微信公众号后台获取
code, 第一步获取用到的 code
grant_type=authorization_code 固定就好
三.通过access_token调用接口
access_token 可以做后续的功能, 可以参考官方的例子:
四.网页端调起支付API
看见这个是不是感觉快完事儿了, 只要网页端调用微信支付功能就完事儿了?no,还差点
在微信浏览器里面打开H5网页中执行JS调起支付。接口输入输出数据格式为JSON。
注意:WeixinJSBridge内置对象在其他浏览器中无效。
示例代码如下:
function onBridgeReady(){ WeixinJSBridge.invoke( 'getBrandWCPayRequest', {
"appId" : "wx0ec43b", //公众号名称,由商户传入
"timeStamp":" ",
//时间戳,自1970年以来的秒数
"nonceStr" : "e61463f8efacccfbbb444", //随机串
"package" : "prepay_id=u802345jgfjsdfgsdg888",
"signType" : "MD5",
//微信签名方式:
"paySign" : "70EABB79628FBCAFADD89" //微信签名
}, function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ) {} // 使用以上方式判断前端返回,微信团队郑重提示:res.www.visa158.comerr_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。
} ); }if (typeof WeixinJSBridge == "undefined"){ if( docu
正在加载中,请稍后...QQ : ;nodejs、小程序交流QQ群:;主页:http://nodejs999.com/index
nodejs中微信公众号开发-access_token获取与保存
注意:这是一个系列的文章,只看一篇会有点懵逼的感觉
微信的access_token是从获取开始7200秒后失效,也就是2个小时,需要重新获取.
access_token必须能在路由中全局访问到,本系列博文在express框架中测试,
所以可以挂载到请求的对象(req)上;
获取一次可以使用2小时,2小时后需要重新获取,这里采用redis数据库存储access_token,
为什么使用redis数据库呢,因为redis数据库也带过期特性,感觉天生就和access_token
的过期匹配,结合起来使用非常方便.开始改造.
-- 需要的模块
-- 调用微信接口模块
redis -- redis数据库模块
xml2js -- xml转为js对象
安装 npm install request xml2js redis -save
-- 封装几个方法
1.Promise化
Promise已经是nodejs的内置对象了,可以直接使用,从这里能看出nodejs以后异步代码发展路线估计也是Promise了
2.redis添加数据
3.redis获取数据
common文件夹的utils.js文件代码:
var utils = {};
var sha1 = require('sha1');
var request = require('request');
var redis = require("redis");
var client = redis.createClient();
client.on("error", function (err) {
console.log("Error :" , err);
client.on('connect', function(){
console.log('Redis连接成功.');
//检查微信签名认证中间件
utils.sign = function (config){
return function(req, res, next){
config = config || {};
console.log(config);
var q = req.
console.log(q);
var token = config.wechat.
var signature = q. //微信加密签名
var nonce = q. //随机数
var timestamp = q. //时间戳
var echostr = q. //随机字符串
1)将token、timestamp、nonce三个参数进行字典序排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
var str = [token, timestamp, nonce].sort().join('');
var sha = sha1(str);
if (req.method == 'GET') {
if (sha == signature) {
res.send(echostr+'')
res.send('err');
else if(req.method == 'POST'){
if (sha != signature) {
* 添加string类型的数据
* @param key 键
* @params value 值
* @params expire (过期时间,单位秒;可为空,为空表示不过期)
utils.set = function(key, value, expire){
return new Promise(function(resolve, reject){
client.set(key, value, function(err, result){
if (err) {
console.log(err);
reject(err);
if (!isNaN(expire) && expire & 0) {
client.expire(key, parseInt(expire));
resolve(result);
* 查询string类型的数据
* @param key 键
utils.get = function(key){
return new Promise(function(resolve, reject){
client.get(key, function(err,result){
if (err) {
console.log(err);
reject(err);
resolve(result);
//Promise化request
utils.request = function(opts){
opts = opts || {};
return new Promise(function(resolve, reject){
request(opts,function(error, response, body){
if (error) {
return reject(error);
resolve(body);
module.exports =
-- 封装微信操作API
在common文件夹下,添加wechatapi.js文件,目前只有获取access_token的方法
*微信相关操作api
var wechatApi = {};
var config = require('../config/config');
var appID = config.wechat.appID;
var appSecret = config.wechat.appS
var utils = require('./utils');
var api = {
accessToken : `${config.wechat.prefix}token?grant_type=client_credential`,
upload : `${config.wechat.prefix}media/upload?`
//获取access_token
wechatApi.updateAccessToken = function(){
var url = `${api.accessToken}&appid=${appID}&secret=${appSecret}`;
//console.log(url);
var option = {
url : url,
json : true
return utils.request(option).then(function(data){
return Promise.resolve(data);
module.exports = wechatA
--改造index路由
在index.js路由文件中添加router.use方法,router.use方法意思就是这个路由中所有的
请求都必须先经过这个方法才能往下执行,
-- 首先是从redis中获取access_token,如果获取到了,传递下去,如果没获取到就从微信端获取,然后传递下去;
-- 在第二个then方法中判断这个data是redis中的还是微信端的.方法有多种,我这里是判断data.expires_in
是否存在,如果存在就是微信端的,如果不存在就是redis数据库获取的;
-- 如果是redis中的access_token,就把他挂载到req对象上,下面的方法就可以通过req.accessToken得到值,
如果是微信端获取的access_token,就需要先保存到redis数据库中,再挂载到req对象上.
//获取,验证access_token,存入redis中
router.use(function(req, res, next) {
//根据token从redis中获取access_token
utils.get(config.wechat.token).then(function(data){
//获取到值--往下传递
if (data) {
return Promise.resolve(data);
//没获取到值--从微信服务器端获取,并往下传递
return wechatApi.updateAccessToken();
}).then(function(data){
console.log(data);
//没有expire_in值--此data是redis中获取到的
if (!data.expires_in) {
console.log('redis获取到值');
req.accessToken =
//有expire_in值--此data是微信端获取到的
console.log('redis中无值');
* 保存到redis中,由于微信的access_token是7200秒过期,
* 存到redis中的数据减少20秒,设置为7180秒过期
utils.set(config.wechat.token,`${data.access_token}`,7180).then(function(result){
if (result == 'OK') {
req.accessToken = data.access_
,会经过router.use方法.在'/'方法中打印console.log(req.accessToken);
需要暂时注释掉微信认证的中间件,否则进不了方法;
这就是传说中的access_token了
再次访问http://localhost:3000/
微信公众平台开发之获取并存储access_token
【Node.js 微信公众号实战】2.Node.js access_token的获取、存储及更新
微信公众号之access_token获取与管理
如何更好的获取access_Token
03、获取access_token
如何获取access_token?
微信公众平台下Access Token的概念及获取方法
微信开发(一)申请接口与token获取
微信开发学习总结(二)—微信开发入门(公众号接入以及access_token获取)
微信公众号开发——获取access_token
没有更多推荐了,51CTO旗下网站
Node.js发送微信 获取fakeID
上一章已经讲过如何用node.js发送微信消息了,,这一章为大家深入一点研究微信公众平台的机制。
作者:佚名来源:net| 01:51
首先我们要获取这个发送微信人的信息,当你用控制台查看微信的接口你会发现,要有一个Fakeid,那么我们首要要获取Fakeid,其他就好办了.首先 我们先获取登录人的这个fakeid,防止后面还会用的.看了一下微信公众平台的所有api接口,,没有发现,那么我们只能去它的用户页面去拿,代码如 下:
getFakeId:&(options,&fn)&-&&&&&&request&&&&&&&.get('http://mp.weixin.qq.com/cgi-bin/userinfopage?t=wxm-setting&lang=zh_CN#')&&&&&&&.set('Cookie',&options.cookie)&&&&&&&.end&(res)&-&&&&&&&&&&&&&&getFakeId:&(options,&fn)&-&&&&&&request&&&&&&&.get('http://mp.weixin.qq.com/cgi-bin/userinfopage?t=wxm-setting&lang=zh_CN#')&&&&&&&.set('Cookie',&options.cookie)&&&&&&&.end&(res)&-&&&&&&&&&&fakeid&=&res.text.match(/FakeID&:&&(\d+)&/)[1]&&&&&&&&&fn&null,&fakeid&
到了这一步,其实还没有成功,因为我们还没有拿到发送人的fakeid,不然怎么发微信消息给好友呢?于是,我们要去微信公众平台的用户管理页面拿到你所有的好友的fakeid,代码如下:
getFriendPage:&(req,&fn)&-&&&&&&@login&(err,&cookie)-&&&&&&&&request&&&&&&&&&.get('http://mp.weixin.qq.com/cgi-bin/contactmanagepage?t=wxm-friend&lang=zh_CN&pagesize=&pageidx=0&type=0&groupid=0')&&&&&&&&&.set('Cookie',&cookie)&&&&&&&&&.end&(res)&-&&&&&&&&&&getFriendPage:&(req,&fn)&-&&&&&&@login&(err,&cookie)-&&&&&&&&request&&&&&&&&&.get('http://mp.weixin.qq.com/cgi-bin/contactmanagepage?t=wxm-friend&lang=zh_CN&pagesize=&pageidx=0&type=0&groupid=0')&&&&&&&&&.set('Cookie',&cookie)&&&&&&&&&.end&(res)&-&&&&&&&&&&&&rs&=&res.text.replace(/document.location.hostname.match.*\[0\]/g,&'&'+req.host+'&')&&&&&&&&&&&fn&null,&res.text&
在这里,大家已经能拿到所有好友的fakeid了,但是不能用jsdom或者cheerio去拿,因为是整个页面加载后才出现好友的html的,至于解决 方法我是用phantom.js解决的,具体代码我就不贴了,因为要涉及到安装什么的.因为研究微信公众平台时间也就几天,如果有更好的方法获取好友的 fakeid请在下面留言.
到这一步,在这里已经拿到了fakeid了,我们可以去拿到这个微信好友的相关信息,在微信公众平台中,找到了如下接口,以下是代码:
getInfo:&(fakeid,&fn)&-&&&&&&@login&(err,&cookie)&-&&&&&&&&request&&&&&&&&&.post(&http:&&&&&&&&&.type('form')&&&&&&&&&.set('Cookie',&cookie)&&&&&&&&&.end&(res)&-&&&&&&&&&&&&fn&null,&JSON.parse&res.text&
调用代码打印以下结果:
{&FakeId:&&xxxx&,&NickName:&&岳蒙&,&ReMarkName:&&&,&Username:&&xxxx&,&Signature:&&&,&Country:&&中国&,&Province:&&江西&,&City:&&南昌&,&Sex:&&1&,&GroupID:&&0&,&Groups:&[&{&GroupId:&&0&,&GroupName:&&未分组&&},&{&GroupId:&&1&,&GroupName:&&黑名单&&},&{&GroupId:&&2&,&GroupName:&&星标组&&}&]&}&
当然群发的话也挺简单的,我已经做好了就不发了,大家可以贴出自己的代码,互相讨论下。
微信发送到这里已经讲完,大家有更好的玩法也欢迎分享。【编辑推荐】【责任编辑: TEL:(010)】
大家都在看猜你喜欢
热点头条热点头条头条
24H热文一周话题本月最赞
讲师:131361人学习过
讲师:15544人学习过
讲师:12063人学习过
精选博文论坛热帖下载排行
该书为C#经典名著!是Wrox红皮书中最畅销的品种之一。从第1版开始就名满天下;其第3版被评选为2005年最权威的十大IT图书之一;并荣获“2005...
订阅51CTO邮刊用node.js进行微信公众平台的开发 - CNode技术社区
积分: 1625
好好学习,天天向上
用nodejs怎样来实现对微信公众平台的开发呢?
别的就不多说了,先来简单介绍微信公众平台的基本原理。
微信服务器就相当于一个转发服务器,终端(手机、Pad等)发起请求至微信服务器,微信服务器,然后将请求转发给自定义服务(这里就是我们的具体实现)。服务处理完毕,然后转发给微信服务器,微信服务器再将具体响应回复到终端;通信协议为:HTTP;数据格式为:XML。
  具体的流程如下图所示:
其实,我们需要做的事情,就是对HTTP请求,做出响应。具体的请求内容,我们按照特定的XML格式去解析,处理完毕后,也要按照特定的XML格式返回。
要想完成对微信公众平台的开发,我们需要注册一个微信公众平台帐号。注册步骤如下:
  打开微信公共平台的官网,
然后根据提示,填写基本信息,邮箱激活,选择类型,信息登记,公众号信息,完成注册。
在注册完成以后,我们要对公众号进行一些基本的设置。登录公众号,找到【公众号设置】,然后设置头像以及其它信息。
nodejs环境搭建
我们需要在公网上找一台服务器,以便可以启动我们的nodejs的环境,启动环境后通过设置访问地址,我们就可以接收微信服务器发送的消息了,并且我们也可以向微信服务器发送消息了。
在公网的服务器中安装完成nodejs以后,我们还需要安装一些nodejs所用到的模块,如:express,node-xml,jssha等模块。可以通过npm命令进行安装。
我们通过nodejs来实现向微信服务器消息的发送与接收,以及与微信服务器的签名认证。
在我们右面的编辑环境中已经为同学们安装了nodejs环境。我们在接下来内容中就为同学们来实现微信服务器的签名认证。
创建express框架
我们在前面的课程中已经安装了express模块,并且在我们右面的环境中已经创建了一个名为app.js的文件。现在我们就在这个文件中完成express框架。如下代码:
var express = require(&express&);
var path=require('path');
var app = express();
= require('http').Server(app);
app.set('views',__dirname);
// 设置视图
app.set('view engine', 'html');
app.engine( '.html', require( 'ejs' ).__express );
require('./index')(app);
//路由配置文件
server.listen(80,function(){
console.log('App start,port 80.');
然后再添加一个名为test.html的文件。写入以下内容
&!DOCTYPE html&
&head lang=&en&&
&meta charset=&UTF-8&&
&title&汇智网&/title&
&/head&
&div&&%=issuccess%&&/div&
&/body&
&/html&
我们还要添加一个名为index.js的文件,来实现我们的路由。点击编辑环境中的添加文件按钮,添加文件,然后我们写入以下代码,其中GET请求用来验证配置的URL合法性,POST请求用来处理微信消息。
module.exports = function(app){
app.get('/',function(req,res){
res.render('test',{issuccess:&success&})
app.get('/interface',function(req,res){});
app.post('/interface',function(req,res){});
这样我们需要的express框架就完成了,当然我们还可以添加public公共文件夹以及我们要用到的中间件。保存文件,点击【提交运行】,然后点击【访问测试】,去试试吧。记下访问测试的地址,我们将在下一节中会用到该地址。
微信服务器配置
我们登录微信公众平台,在开发者模式下面找到基本配置,然后修改服务器配置。如图所示:
首先URL要填写公网上我们安装nodejs接收与发送数据的路径。我们可以填写上节中【访问测试】的地址,然后加上对应的路由就可以了。
http://5222a9efffd6b092aa955d.me.hubwiz.com/interface
上面代码是我的访问测试的地址,然后加上前面课程中的路由,同学们要根据自己的访问测试地址与路由来填写。
Token要与我们自定义服务器端的token一致。填写完成以后,就可以点击提交了,在提交以前,我们启动app.js(点击【提交运行】)。这样根据我们的路由匹配就可以验证签名是否有效了。
当配置完成以后,一定要启用配置。
公众平台用户提交信息后,微信服务器将发送GET请求到填写的URL上,并且带上四个参数:
微信加密签名
随机字符串
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。
signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
加密/校验流程:
将token、timestamp、nonce三个参数进行字典序排序;
将三个参数字符串拼接成一个字符串进行sha1加密;
开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
首先我们确认请求是来自微信服务器的get请求,那么就可以在index.js文件中进行添加代码了。然后在app.get(’/interface’,function(req,res){});的function中进行添加。
先来获取各个参数的值,如下代码:
var token=&weixin&;
var signature = req.query.
var timestamp = req.query.
var echostr
= req.query.
= req.query.
我们在这里对token进行设置,让其与微信服务器中设置的token一致。
然后对其中的token、timestamp、nonce进行排序,如下代码:
var oriArray = new Array();
oriArray[0] =
oriArray[1] =
oriArray[2] =
oriArray.sort();
这样我们就完成了排序。
在上节中我们已经对参数进行了排序,然后我们在这一节中要将参数组成一个字符串,进行SH-1加密。在加密以前要用到jssha模块,在我们的文件中要引用该模块。
var jsSHA = require('jssha');
在上一节课中我们已经对参数排序完成,并存放在数组中,我们可以通过join方法来生成一个字符串,如下代码:
var original = oriArray.join('');
最后对该数据进行加密,如下代码:
var jsSHA = require('jssha');
var shaObj = new jsSHA(original, 'TEXT');
var scyptoString=shaObj.getHash('SHA-1', 'HEX');
好了这样就生成了我们需要的签名字符串scyptoString。
我们已经得到了我们想要的签名字符串scyptoString,然后我们就可以与来自微信服务器的签名进行对比了,对比通过,则我们就可以接收与发送消息了。
if(signature == scyptoString){
//验证成功
//验证失败
本参考了如下网站,更多内容也请访问:
谢谢支持。
参考一下!
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的}

我要回帖

更多关于 微信营销108招免费版 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信