未找到

未发布 用node.js进行微信公众平台的开发
by xiaozhi keys Node.JS 1457057221988

基本原理

  用nodejs怎样来实现对微信公众平台的开发呢?

  别的就不多说了,先来简单介绍微信公众平台的基本原理。

  微信服务器就相当于一个转发服务器,终端(手机、Pad等)发起请求至微信服务器,微信服务器,然后将请求转发给自定义服务(这里就是我们的具体实现)。服务处理完毕,然后转发给微信服务器,微信服务器再将具体响应回复到终端;通信协议为:HTTP;数据格式为:XML。   具体的流程如下图所示:

hubwiz

  其实,我们需要做的事情,就是对HTTP请求,做出响应。具体的请求内容,我们按照特定的XML格式去解析,处理完毕后,也要按照特定的XML格式返回。

平台注册

  要想完成对微信公众平台的开发,我们需要注册一个微信公众平台帐号。注册步骤如下:   打开微信公共平台的官网,https://mp.weixin.qq.com/,点击“立即注册”。

  然后根据提示,填写基本信息,邮箱激活,选择类型,信息登记,公众号信息,完成注册。

  在注册完成以后,我们要对公众号进行一些基本的设置。登录公众号,找到【公众号设置】,然后设置头像以及其它信息。

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();
server  = 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>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>汇智网</title>
</head>
<body>
<div><%=issuccess%></div>
</body>

  我们还要添加一个名为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公共文件夹以及我们要用到的中间件。保存文件,点击【提交运行】,然后点击【访问测试】,去试试吧。记下访问测试的地址,我们将在下一节中会用到该地址。

微信服务器配置

  我们登录微信公众平台,在开发者模式下面找到基本配置,然后修改服务器配置。如图所示:

hubwiz

  首先URL要填写公网上我们安装nodejs接收与发送数据的路径。我们可以填写上节中【访问测试】的地址,然后加上对应的路由就可以了。

http://724515db515222a9efffd6b092aa955d.me.hubwiz.com/interface

上面代码是我的访问测试的地址,然后加上前面课程中的路由,同学们要根据自己的访问测试地址与路由来填写。

  Token要与我们自定义服务器端的token一致。填写完成以后,就可以点击提交了,在提交以前,我们启动app.js(点击【提交运行】)。这样根据我们的路由匹配就可以验证签名是否有效了。

  当配置完成以后,一定要启用配置。

hubwiz

网址接入

  公众平台用户提交信息后,微信服务器将发送GET请求到填写的URL上,并且带上四个参数:

参数 描述 signature 微信加密签名 timestamp 时间戳 nonce 随机数 echostr 随机字符串

  开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。

  signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

  加密/校验流程:

  1. 将token、timestamp、nonce三个参数进行字典序排序;
  2. 将三个参数字符串拼接成一个字符串进行sha1加密;
  3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。

参数排序

  首先我们确认请求是来自微信服务器的get请求,那么就可以在index.js文件中进行添加代码了。然后在app.get('/interface',function(req,res){});的function中进行添加。

  先来获取各个参数的值,如下代码:

var token="weixin";
var signature = req.query.signature;
var timestamp = req.query.timestamp;
var echostr   = req.query.echostr;
var nonce     = req.query.nonce;

我们在这里对token进行设置,让其与微信服务器中设置的token一致。

  然后对其中的token、timestamp、nonce进行排序,如下代码:

var oriArray = new Array();
oriArray[0] = nonce;
oriArray[1] = timestamp;
oriArray[2] = token;
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){
 //验证成功
 } else {
 //验证失败
 }

本参考了如下网站,更多内容也请访问:http://www.hubwiz.com/course/569dc7fdacf9a45a69b051cd/

未发布 wemall团购版商城系统源码,开源可更改
by wemallshop keys 分享 1484649642444
未发布 零售企业构建私域流量的价值
by wx_15999 keys 分享 1604475086910
未发布 将现有的SQL工作负载迁移至hadoop竟然如此简单!
by chenjunji123456 keys 分享 1472090871245
可访问的HTML5 Video视频播放器
by ourjs keys JS开源 开源 1410401534650
一个轻量级的HTML5视频播放器,支持字幕和详细说明。注* 连IE9都支持HTML5 Video 元素了,是时侯提供基于没有插件的视频播放了。

  • 提供了一个HTML5视频播放器自定义控件。 
  • 支持字幕;只需使用标准的HTML5视频语法,创建一个VTT的字幕文件。 
  • 使用原生的HTML5 form 控件控制音量(输入范围),并指示进度(progress元素)。 
  • 支持只有键盘用户访问。 
  • 可在加载时,打开或关闭字幕选项。 
  • 可设定起始播放的时间,或控制播放进度。 
  • 播放器宽度与Video 元素的宽度一致。 
  • 没有依赖关系。使用原生的JavaScript写成。 
  • 如果JavaScript不可用,将由浏览器的原生播放。 
未发布 企业做微信商城,这些工作是重中之重!
by 霁夜茶135 keys 分享 1499423410248
微信商城上线是很简单的一件事情,但是,想要微信商城在众多商城中脱颖而出却并不是一件简单的事情。
他们为什么说面向对象有问题,探讨面向对象的一些缺陷
by newghost keys 心得体会 分享 1384852842000

最近跟某位朋友讨论了一些工作上的事情,他目前就职于某世界500强IT公司,在他们现在做的一个项目中,整个系统构架(基于Web)是完全面向对象的(非基于jQuery的传统WEB,完全OOP,到处都是class,extend, override),而且他对这种框架极其推崇,不过他们经常加班到深夜,打开他们开源框架的GitHub主页,一个知名IT公司做的纯OOP前端框架仅仅有100多个Star(关注),笔者当时从直觉上觉得这里有问题,回去之后仔细反思,搜索了一些资料,算是找到了他们为什么这么累的原因吧。

面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流,不过随着时代的发展,很多人对OO编程方法的看法也出现了一些变化;

面向对象的可维护性

面向对象从一开始就要求我们完全了解各个子类的不同,并将他们的“共性”提取到父类里,从而实现代码复用, 在这个过程中自然形成了一种最强的耦合关系。这种设计方法在需求非常确定的情况下是有效的,但在实际生活中我们发现需求总是在开发过程中不断提出的,而且也总在变化,甚至跟之前完全相反,当你看到你精心设计的框架成为你需求变更的障碍时,你做何感想?

未发布 微信「小程序」能走多远?
by 鸟栖沙岩 keys 分享 1474948053711

在 PC 时代,浏览器成为互联网信息的入口,并非因为它支持了 HTML 技术,而是因为它给人类带来了「世界是平的」的空间和理念,人类历史上第一次实现了空气的互联互通。

今天,微信虽然用了 HTML5 技术来做应用号(小程序),但是它并没有真正用到 HTML5 的精髓——开放、互联,也就决定了它无法实现「微信 OS」的最终野心。

未发布 扫描识别工具Dynamic Web TWAIN 更新至v11.3.2
by 鸟栖沙岩 keys 分享 1468199721938
Dynamic Web TWAIN是一个专为Web应用程序设计的TWAIN扫描识别控件。
扫描识别工具Dynamic Web TWAIN更新至v11.3.2,添加对 OCR Professional 的官方支持。
未发布 报表解决方案Stimulsoft Reports.Ultimate v2016.2发布|附下载
by 鸟栖沙岩 keys 分享 1477463685671
最全面的报表解决方案Stimulsoft Reports.Ultimate发布v2016.2版本!

新特性:

  • Java数据库适配器
  • JSONDatabase数据库的JSONDatabase属性
  • 对WebViewer & WebDesigner的Java Server Faces支持
  • 新的Web Viewer组件支持详述,排序,折叠,新主题,通过邮件发送报表。
  • 拖拽报表模板文件到设计器的能力
  • 移动端设计器的Shift Mode属性

改进:

  • 设计器的界面有更多颜色形式选择
  • 条形码编辑菜单中的条形码显示
  • 设计器中日期选择器控件的时间控制
  • 在渲染报表时可以使用UseParentStyles属性
  • 在新标签中浏览设计器数据

修复:

  • 在某些情况下,子报表静态组件中的书签无法工作的问题
  • 使用Flex引擎时IconCondition无法正常工作的问题
  • 输出为SVG文件时,部分字体尺寸不能正确处理的问题
  • 输出为Excel文件时,当使用UseOnePageHeaderAndFooter属性与复杂标题时,单元格发生变换的问题
Stimulsoft Reports.Ultimate 2016.2下载

 近期热门 - 点击最多
  1. python基于asyncio实现 Redis 的异步操作哈希数据写入 / 读取、发布订阅消息中间件
  2. Node.js 打印vite react+go项目目录树
  3. Angular入门:用Signals状态管理和Bootstrap基础样式实现的用户登录注册实例教程
  4. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  5. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  6. React结合vite使用vue3,在纯typescript的react hooks中使用vue
  7. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  8. React Native为http网络请求添加timeout超时异常处理: 用XMLHttpRequest替换fetch发送的区别
  9. React Native使用fetch发送http登陆验证请求失败:无法读取set-cookie并显示network request failed
  10. 克服Redux的缺点在React/Native中使用消息队列,pubsub-js更加简洁的组件间通信和状态传递方法

  全端社区 - 最新回复
  1. 在无管理员权限的情况下,使用安装Python补全 pip临时配置环境变量
  2. Python鉴权方法:Depends 依赖注入;装饰器;与基于Proxy模式的Session状态管理自动计算脏属性;将用户数据存储在Redis中
  3. python基于asyncio实现 Redis 的异步操作哈希数据写入 / 读取、发布订阅消息中间件
  4. Angular入门:用Signals状态管理和Bootstrap基础样式实现的用户登录注册实例教程
  5. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  6. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  7. Node.js 打印vite react+go项目目录树
  8. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  9. Windows与Mac通过git ssh和rsync实现文件共享互传
  10. Windows与Mac通过git ssh和scp实现文件共享互传

  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA