it('should not ok', function (done) { var echoStr = 'node rock'; var _tail = tail('fake_token', cryptor.encrypt(echoStr), true); request(app) .get('/wechat?' + _tail) .expect(401) .expect('Invalid signature', done); });
it('should 200', function (done) { var xml = '<xml></xml>'; var data = postData(cfg.token, cryptor.encrypt(xml)); request(app) .post('/wechat?' + data.querystring) .send(data.xml) .expect(200, done); });
it('should ok', function (done) { var echoStr = 'node rock'; var _tail = tail(cfg.token, cryptor.encrypt(echoStr), true); request(app) .get('/wechat?' + _tail) .expect(200) .expect(echoStr, done); });
var createXml = function (config, openid, msg, timestamp, need_encrypt){ var xml = '<xml><ToUserName><![CDATA[' + config.id + ']]></ToUserName><FromUserName><![CDATA[' + openid + ']]></FromUserName><CreateTime>' + timestamp + '</CreateTime>' + msg + '</xml>'; if(!need_encrypt) return xml; var crypter = new WXBizMsgCrypt(config.token, config.encrypt_key, config.app_id); var encrypt = crypter.encrypt(xml); xml = '<xml><ToUserName><![CDATA[' + config.id + ']]></ToUserName><Encrypt><![CDATA[' + encrypt + ']]></Encrypt></xml>'; return xml; };
it('should 401 invalid signature', function (done) { var xml = '<xml></xml>'; var data = postData('fake_token', cryptor.encrypt(xml)); request(app) .post('/wechat?' + data.querystring) .send(data.xml) .expect(401) .expect('Invalid signature', done); });
var createXml = function (need_encrypt){ var msg = '<MsgType><![CDATA[event]]></MsgType><Event><![CDATA[ShakearoundUserShake]]></Event><ChosenBeacon><Uuid><![CDATA[121212121212]]></Uuid><Major>1111</Major><Minor>1111</Minor><Distance>0.057</Distance></ChosenBeacon><AroundBeacons><AroundBeacon><Uuid><![CDATA[121212121212]]></Uuid><Major>2222</Major><Minor>2222</Minor><Distance>166.816</Distance></AroundBeacon><AroundBeacon><Uuid><![CDATA[121212121212]]></Uuid><Major>3333</Major><Minor>3333</Minor><Distance>15.013</Distance></AroundBeacon></AroundBeacons>'; var timestamp = parseInt(new Date().getTime() / 1000, 0) + ''; var xml = '<xml><ToUserName><![CDATA[' + config.id + ']]></ToUserName><FromUserName><![CDATA[' + openid + ']]></FromUserName><CreateTime>' + timestamp + '</CreateTime>' + msg + '</xml>'; if (!need_encrypt) return xml; var crypter = new WXBizMsgCrypt(config.token, config.encrypt_key, config.appid); var encrypt = crypter.encrypt(xml); xml = '<xml><ToUserName><![CDATA[' + config.id + ']]></ToUserName><Encrypt><![CDATA[' + encrypt + ']]></Encrypt></xml>'; return xml; };
it('should ok', function (done) { var xml = '<xml><ToUserName><![CDATA[gh_d3e07d51b513]]></ToUserName><FromUserName><![CDATA[oPKu7jgOibOA-De4u8J2RuNKpZRw]]></FromUserName><CreateTime>1361374891</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[/:8-)]]></Content><MsgId>5847060634540564918</MsgId></xml>'; var cryptor = new WXBizMsgCrypt(token, encodingAESKey, corpid); var data = postData(token, cryptor.encrypt(xml)); request(app) .post('/wechat?' + data.querystring) .send(data.xml) .expect(200) .expect('hehe') .end(done); });
parseString(msg.message, function (err, result) { if(result.xml.EventKey){ if (result.xml.EventKey[0]== 'yuyue') { console.log('result'+result.xml); for (var i = 0;i < userid.length;i++){ console.log('userid[' + i +'] = ' + userid[i]); if (userid[i] != result.xml.FromUserName[0]){ // console.log('username = '******'你已预约过,不能重复预约!'); continue; }else{ var ress = replyText(result,'你已预约,不能重复预约!'); flag = 1; break; } } if(flag != 1){ if( numbers>20 ) var ress = replyText(result,'预约人数已超过20人,不能预约'); else if(storeDelNumber.length>0){ numbers++; var toNumber = storeDelNumber.shift(); console.log('toNumber:'+toNumber); userid[toNumber-1] = result.xml.FromUserName[0]; var ress = replyText(result,'******预约成功!*****\n'+ '******预约凭证******\n'+ '预约号:'+toNumber+'\n'+ '用户名:'+result.xml.FromUserName[0]+'\n'+ '***请于开车前上车***\n'+ '********************\n' ); } else{ numbers++; var ress= replyText(result,'******预约成功!*****\n'+ '******预约凭证******\n'+ '预约号:'+numbers+'\n'+ '用户名:'+result.xml.FromUserName[0]+'\n'+ '***请于开车前上车***\n'+ '********************\n' ); userid[numbers-1]=result.xml.FromUserName[0]; console.log('userid'+userid[numbers-1]); console.log('ress:' + ress); } }flag = 0; // numbers++; } else if (result.xml.EventKey[0]== 'pingzheng'){ for (var i = 0;i < userid.length;i++){ if (userid[i] != result.xml.FromUserName[0]) continue; else { var ress = replyText(result,'******预约成功!*****\n'+ '******预约凭证******\n'+ '预约号:'+(i+1)+'\n'+ '用户名:'+userid[i]+'\n'+ '***请于开车前上车***\n'+ '********************\n' ); console.log('ress:' + ress); flag2 = 1; } } if (flag2 != 1) var ress = replyText(result,'你还未预约,请先预约!'); flag2 = 0; } else if (result.xml.EventKey[0]== 'cancel'){ for (var i = 0;i < userid.length;i++){ if (userid[i] != result.xml.FromUserName[0]) continue; else { flag1 = 1; numbers--; userid[i] = 0; delNumber = i; storeDelNumber.push(i+1); var ress = replyText(result,'取消预约成功!'); console.log('ress:' + ress); break; } } // console.log(); if (flag1 != 1) { var ress = replyText(result,'你未预约,不能取消!'); } console.log('ress111111:'+ress); flag1 = 0; console.log('ress2:'+ress); } else if (result.xml.EventKey[0]== 'renshu'){ if ( numbers > 20 ) var ress = replyText(result,'你好!当前预约校车人数超过20人,预约已满!'); else{ var ress = replyText(result,'你好!当前预约校车人数为'+numbers); console.log('ress:' + ress); } } else if (result.xml.EventKey[0]== 'anpai'){ var ress = replyText(result,'行车安排如下:\n'+ '北大(中关村)---学院(大兴)发车时间:\n'+ '早上7:20、中午13:00\n'+ '乘车地点:北京大学理教西侧学院\n'+ '学院(大兴)---北大(中关村)发车时间:\n'+ '中午11:40、下午17:10\n'+ '乘车地点:软微学院研发楼北侧\n'+ '提示:学生需排队,待老师上车后,学生依次上车。' ); console.log('ress:' + ress); } else { // var ress = replyText(result,'欢迎使用Shank约车应用!'); var ress = replyText(result,'******使用指南******\n'+ '欢迎使用Shank约车应用~\n'+ '有些话我们想告诉你~^_^\n'+ '1、座位有20个,超过不能预约。\n'+ '2、一个用户不能重复预约。\n'+ '3、用户可以取消预约。\n'+ '4、了解更多按钮里可以查看行车安排和北大新闻。'); console.log('欢迎使用Shank约车应用!'); } } else { var ress = replyText(result,'******使用指南******\n'+ '欢迎使用Shank约车应用~\n'+ '有些话我们想告诉你~^_^\n'+ '1、座位有20个,超过不能预约。\n'+ '2、一个用户不能重复预约。\n'+ '3、用户可以取消预约。\n'+ '4、了解更多按钮里可以查看行车安排和北大新闻。'); } var encryptMsg = cryptor.encrypt(ress); // console.log('encryptMsg:', encryptMsg); var MsgSignature = cryptor.getSignature(params.timestamp, params.nonce, encryptMsg); // console.log('MsgSignature:' + MsgSignature); // console.log(params.timestamp); // console.log(params.nonce); var feedbackMsg = replyCrypto(encryptMsg, params, MsgSignature); // console.log('feedbackMsg:' + feedbackMsg); response.end(feedbackMsg); })
co(function* () { const query = req.query; // 加密模式 const encrypted = !!(query.encrypt_type && query.encrypt_type === 'aes' && query.msg_signature); const timestamp = query.timestamp; const nonce = query.nonce; if (!encrypted) { // 校验 if (query.signature !== getSignature(timestamp, nonce, TOKEN)) { res.status = 401; res.send('Invalid signature'); return; } } // 取原始数据 var xml = req.body; var result = yield parseXML(xml); var formatted = formatMessage(result.xml); if (encrypted) { var encryptMessage = formatted.Encrypt; if (query.msg_signature !== cryptor.getSignature(timestamp, nonce, encryptMessage)) { res.status = 401; res.send('Invalid signature'); return; } var decryptedXML = cryptor.decrypt(encryptMessage); var messageWrapXml = decryptedXML.message; if (messageWrapXml === '') { res.status = 401; res.send('Invalid signature'); return; } var decodedXML = yield parseXML(messageWrapXml); formatted = formatMessage(decodedXML.xml); } // 业务逻辑处理 const body = yield handle(formatted); /* * 假如服务器无法保证在五秒内处理并回复,可以直接回复空串。 * 微信服务器不会对此作任何处理,并且不会发起重试。 */ if (body === '') { res.send(''); return; } var replyMessageXml = reply(body, formatted.ToUserName, formatted.FromUserName); if (!query.encrypt_type || query.encrypt_type === 'raw') { res.send(replyMessageXml); } else { var wrap = {}; wrap.encrypt = cryptor.encrypt(replyMessageXml); wrap.nonce = parseInt((Math.random() * 100000000000), 10); wrap.timestamp = new Date().getTime(); wrap.signature = cryptor.getSignature(wrap.timestamp, wrap.nonce, wrap.encrypt); res.send(encryptWrap(wrap)); } }).catch((err) => {
function receiveLocation(msg,result){ var location=Locationtmp(msg,result); var cryptor=new WXBizMsgCrypt(config.token,config.encodingAESKey,config.corpId); var reply=replytmp(cryptor.encrypt(location)); return reply; }
it('should 500', function (done) { request(app) .post('/wechat?' + tail(cfg.token, cryptor.encrypt(''), false)) .expect(500) .expect(/body is empty/, done); });
it('should 500', function (done) { request(app) .put('/wechat?' + tail(cfg.token, cryptor.encrypt(''), false)) .expect(501) .expect(/Not Implemented/, done); });