Example #1
0
 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);
 });
Example #2
0
 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);
 });
Example #3
0
 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);
 });
Example #4
0
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;
};
Example #5
0
 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);
 });
Example #6
0
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;
};
Example #7
0
  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);
  });
Example #8
0
            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);
              })
Example #9
0
  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);
 });