| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- /**
- * Created by tom on 2018/1/21.
- */
- 'use strict';
- const Fs = require('fs');
- const Https = require('https');
- const WebSocket = require('ws');
- const uuid = require('uuid');
-
- var http = require("http");
- var express = require("express");
- var request = require("request");
- const path = require('path');
- var cmd = require('node-cmd');
- var WXBizDataCrypt = require('./WXBizDataCrypt');
-
- const BERRY_PI = 'BERRY_PI';
- const LOGIN = 'Login';
- const FORMID = 'SendFormId';
- const ENCRYPT = 'EncryptedData';
- const wsclients = {};
- const wssclients = {};
- const WebSocketServer = WebSocket.Server;
- const ws = new WebSocketServer({
- port: 8089
- });
-
- var curcnt=1;
- const appId = 'wx4680f6d1dc629d22';
- const appSecret = 'cc6a16ee5545e887c94d238dfefefac0';
- var formid;
- var encryptedData;
- var iv;
-
- console.log("websocketServer Listen port : 8089");
-
-
-
- ws.on('connection', function (ws) {
- console.log(`[WS SERVER] connection()`);
- ws.clientId = uuid.v1();
- wsclients[ws.clientId] = ws;
- console.log('client connected:'+ws.clientId);
-
- ws.on('message', function (message) {
- console.log(`[WS SERVER] Received: ${message}`);
- ws.send(`ECHO: ${message}`, (err) => {
- if (err) {
- console.log(`[WS SERVER] error: ${err}`);
- }
- });
- });
- ws.on('close', () => {
- console.log(`[WS SERVER] close`);
- if(ws.clientId) {
- delete wsclients[ws.clientId];
- console.log('wsclient:'+ws.clientId);
- }
- });
- });
-
-
- const httpsServer = Https.createServer({
- //key: Fs.readFileSync("/home/tom/node.js/websocket_ex1/private.key"),
- //cert: Fs.readFileSync("/home/tom/node.js/websocket_ex1/certificate.crt")
- key: Fs.readFileSync("./iot.twgigatech.cn.key"),
- cert: Fs.readFileSync("./iot.twgigatech.cn.crt")
- });
-
- const wss = new WebSocketServer({
- server: httpsServer
- });
-
- httpsServer.on('request', (req, res) => {
- res.writeHead(200);
- res.end('hello HTTPS world\n');
- });
-
- wss.on('connection', (ws) => {
- console.log(`[WSS SERVER] connection()`);
- ws.clientId = uuid.v1();
- wssclients[ws.clientId] = ws;
- console.log('client connected:'+ws.clientId);
-
- ws.on('message', function (message) {
- console.log(`[WSS SERVER] Received: ${message}`);
- /*
- ws.send(`ECHO: ${message}`, (err) => {
- if (err) {
- console.log(`[WSS SERVER] error: ${err}`);
- }
- });
- */
- try{
- const data = JSON.parse(message)
- switch(data.cmd){
- case BERRY_PI:
- //client.publish('CAMERA/PHOTO', ws.clientId)
- wssclients[ws.clientId].send(JSON.stringify({
- cmd:"CAMERA/PHOTO",
- //path: "http://iot.gigatech.tw:8000/pic/01.jpg"
- path: "http://iot.twgigatech.cn:8090/image/0"+curcnt+".jpg"
- }));
- if (curcnt==1) {
- curcnt++;
- cmd.run('avconv -y -i rtsp://203.73.93.26:554/video1 -an -vframes 1 //home/tom/node.js/websocket_ex1/public/image/06.jpg');
- console.log(`Get picture!!!!`);
- }
- else if (curcnt==6) curcnt=1;
- else curcnt++;
- return;
- case LOGIN:
- request.get({
- uri: 'https://api.weixin.qq.com/sns/jscode2session',
- json: true,
- qs: {
- grant_type: 'authorization_code',
- appid: appId,
- secret: appSecret,
- js_code: data.code
- }
- }, (err, response, data) => {
- if (response.statusCode === 200) {
- //TODO: 生成一个唯一字符串sessionid作为键,将openid和session_key作为值,存入redis,超时时间设置为2小时
- let secretValue = {
- openid: data.openid,
- session_key: data.session_key,
- unionid: data.unionid
- }
- console.log("OPEDID:"+data.openid+" ,SessionKey:"+data.session_key+" ,unionid:"+data.unionid);
- }
- })
- return;
- case FORMID:
- formid = data.formId;
- request.get({
- uri: 'https://api.weixin.qq.com/cgi-bin/token',
- json: true,
- qs: {
- grant_type: 'client_credential',
- appid: appId,
- secret: appSecret
- }
- }, (err, response, data) => {
- if (response.statusCode === 200) {
- //TODO: 生成一个唯一字符串sessionid作为键,将openid和session_key作为值,存入redis,超时时间设置为2小时
- let secretValue = {
- token: data.access_token,
- expires: data.expires_in
- }
- console.log("TOKEN:"+data.access_token+" ,EXPIRES:"+data.expires_in+" FormID:"+formid);
-
- /*
- var options = {
- uri: 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='+data.access_token,
- method: 'POST',
- body: {
- touser: 'oWxou5YnNOYAGrY676WQ057_DkWE',
- template_id: 'XiCgsxm-DH73hmAF0CJdlw4MORSDDcUXepF8vxRQz8A',
- //page: '点击模版卡片的跳转页面',
- form_id: formid,
- data: {
- keyword1:{
- value: '小程序测试模版',
- color: '#173177'
- },
- keyword2:{
- value: '2017年3月24日',
- color: '#173177'
- },
- keyword3:{
- value: 'iHleath',
- color: '#173177'
- }
- },
- //需要放大的关键字
- //emphasis_keyword: 'keyword1.DATA'
- }
- };
-
- request (options, function (error, response, body) {
- if (!error && response.statusCode == 200) {
- console.log(body.id) // Print the shortened url.
- }
- });
- */
- // Set the headers
-
- // Configure the request
- var nowDate = new Date();
- var result = nowDate.toLocaleDateString() + " "+ nowDate.toLocaleTimeString();
- var options = {
- uri: 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='+data.access_token,
- method: 'POST',
- json: true,
- body: {
- touser: 'oWxou5YnNOYAGrY676WQ057_DkWE',
- //touser: 'oWxou5WRP3pWQOhAz9I9YAjVgo5Q',
- template_id: 'XiCgsxm-DH73hmAF0CJdlw4MORSDDcUXepF8vxRQz8A',
- //page: '点击模版卡片的跳转页面',
- form_id: formid,
- data: {
- keyword1:{
- value: '小程序测试模版',
- color: '#173177'
- },
- keyword2:{
- //value: '2018年3月6日9時53分',
- value: result,
- color: '#173177'
- },
- keyword3:{
- value: 'Gigatech小區',
- color: '#173177'
- }
- },
- //需要放大的关键字
- emphasis_keyword: 'keyword1.DATA'
- }
- }
-
- // Start the request
- request(options, function (error, response, body) {
- if (!error && response.statusCode == 200) {
- // Print out the response body
- console.log(body)
- }
- })
- }
- })
- return;
-
- case ENCRYPT:
- encryptedData = data.encryptedData;
- iv = data.iv;
- request.get({
- uri: 'https://api.weixin.qq.com/sns/jscode2session',
- json: true,
- qs: {
- grant_type: 'authorization_code',
- appid: appId,
- secret: appSecret,
- js_code: data.code
- }
- }, (err, response, data) => {
- if (response.statusCode === 200) {
- //TODO: 生成一个唯一字符串sessionid作为键,将openid和session_key作为值,存入redis,超时时间设置为2小时
- let secretValue = {
- openid: data.openid,
- session_key: data.session_key,
- }
- console.log("OPEDID:"+data.openid+" ,SessionKey:"+data.session_key);
- var pc = new WXBizDataCrypt(appId, data.session_key);
- var decode_data = pc.decryptData(encryptedData , iv);
- console.log("Name:"+decode_data.nickName+", unionId:"+ decode_data.unionId);
- console.log(decode_data);
- }
- })
- return;
-
- default:
- return;
- }
- }catch(e){
- console.log(e)
- }
-
- });
- ws.on('close', () => {
- console.log(`[WSS SERVER] close`);
- if(ws.clientId) {
- delete wssclients[ws.clientId];
- console.log('wssclient:'+ws.clientId);
- }
- });
- });
- httpsServer.listen(443);
- console.log("secure websocketServer Listen port : 443");
-
- var app = express();
- app.use(express.static(path.join(__dirname, 'public')));
-
- app.listen(8090, () => {
- console.log(`App listening at port 8090`)
- })
|