微信公众号开发 续

上次用bmob平台使用nodejs开发公众号,只完成了从数据库中拿到数据并显示的功能,这次完成了几个小功能。

输入 :查看菜单,可以显示数据库内的菜品集合。
输入 :吃什么,系统推荐两道菜
输入 :xxx(某道菜名),表示差评,不喜欢这道菜,系统为菜降低评分。并提示再次输入。

贴代码:

function onRequest(request, response, modules) {
    var token = "czh2cst";         //这里的值必须与在微信公众号后台填入的token值一致
    var crypto = modules.oCrypto; //使用加解密模块
    var httptype = modules.oHttptype; //获取调用云端逻辑的是post或者get方式
    var xml2js = modules.oXml2js; //实现xml和js格式之间的相互转换
    var db = modules.oData;         //数据库对象
    if ("get" == httptype) {
         //是get方法,则是微信在验证回调的url是否有效
          var oriStr = [token, request.query.timestamp, request.query.nonce].sort().join('')
          var code = crypto.createHash('sha1').update(oriStr).digest('hex');
          if (code == request.query.signature) { //验证通过,输出
              response.end(request.query.echostr);
          } else {
              response.end("Unauthorized");
          }
    } else {
           //是post,接收订阅者发送过来的消息。

           //接受到'查看菜谱'的信息,则返回菜单。
           if(request.body.xml.Content == '查看菜单'){
                db.find({
                "table":"course"
                },function(err,data){
                    var resultObject = JSON.parse(data);
                    var str = '\t\t菜单\n';
                    for(var results in resultObject){
                        var resultArr = resultObject[results];
                        for(var line in resultArr){
                            str = str + resultArr[line].name +  
                            '\n价格:¥' + resultArr[line].price 
                            '\n\n';
                        }
                    }
                    var result = {
                            xml: {
                                ToUserName: request.body.xml.FromUserName,
                                FromUserName: request.body.xml.ToUserName,
                                CreateTime: new Date().getTime(),
                                MsgType: 'text',
                                Content: str
                            }
                        }
                    var builder = new xml2js.Builder();
                    var xml = builder.buildObject(result);
                    response.set('ContentType','text/xml');
                    response.send(xml);
                });
           }//end of if(menu)

           //如果接受的消息是“吃什么”,就推荐菜名并返回。
            else if(request.body.xml.Content == '吃什么'){

               var bql = modules.oBql;
               var str = '\t\t今日推荐\n';
               //select first course
               bql.exec({
                   "bql": "select * from course where score>=60 and type = '素菜' limit 1 "
               },function(err,data){
                    var resultObject = JSON.parse(data);
                    for(var results in resultObject){
                            str = str + resultObject[results][0].name +  
                            '\n价格:¥' + resultObject[results][0].price + 
                            '\n\n';
                    }
              },bql.exec({  //select second course
                  "bql": "select * from course where score>=60 and type= '荤菜' limit 1"
              },function(err,data){
                  var resultObject = JSON.parse(data);
                    for(var results in resultObject){
                            str = str + resultObject[results][0].name +  
                            '\n价格:¥' + resultObject[results][0].price + 
                            '\n\n';
                    }
                    str = str + '如果有不喜欢的菜,请给我们菜名反馈,我们将为你再次进行推荐!';
                    //transfer json to xml to send to weChat
                    var result = {
                            xml: {
                                ToUserName: request.body.xml.FromUserName,
                                FromUserName: request.body.xml.ToUserName,
                                CreateTime: new Date().getTime(),
                                MsgType: 'text',
                                Content: str
                            }
                        }
                    var builder = new xml2js.Builder();
                    var xml = builder.buildObject(result);
                    response.set('ContentType','text/xml');
                    response.send(xml);
              })//end of seletion of second course
              ); // end of seletion of first course

           }//end of if(eat_what)



           //如果接受的消息是“xxx菜”,就降低该菜品的用户满意,并返回另一个菜品。
          else{
               var coursename = request.body.xml.Content;
               var bql = modules.oBql;
               var str = '';
               var updId = '';

               bql.exec({
                "bql": "select objectId from course where name = '" + coursename + "' "
                },function(err,data){
                    var message = JSON.parse(data);
                    for(var course in message){
                        updId = updId + message[course][0].objectId;
                    }
                    db.update({
                        "table": "course",
                        "objectId": updId,
                        "data": {"score": 50}
                    },function(err,data){
                    str = str + '请输入 “吃什么” , 再次获得推荐 。';
                    var result = {
                        xml: {
                            ToUserName: request.body.xml.FromUserName,
                            FromUserName: request.body.xml.ToUserName,
                            CreateTime: new Date().getTime(),
                            MsgType: 'text',
                            Content: str
                        }
                    }
                    var builder = new xml2js.Builder();
                    var xml = builder.buildObject(result);
                    response.set('ContentType','text/xml');
                    response.send(xml);
                    });
                });

          }//end of else

    }//end of httptype is post
}      

这里写图片描述

这里写图片描述

这里写图片描述

(替换了西红柿炒鸡蛋)
这里写图片描述
由于只是为了最终项目展示,就只考虑了单人使用的情况。以及推荐功能还有待提升。
总的来说,算是初学了一下用nodejs对接公众号吧,关于公众号平台理解深入了一点,但是nodejs的理解还是很粗浅。
虽然挺简单的事情过程还是磕磕绊绊,挺有意思的,特别是第一次完全对着文档编程,感觉还是很新奇。虽然有时有的地方不好找到解决方案,还是要细心多一点,以及加一点想象力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信公众号开发源码Java是用Java语言编写的用于开发微信公众号的源代码。微信公众号开发是指通过开发者账号申请成为微信公众号开发者,利用微信提供的开发接口和SDK来开发和管理公众号。 Java作为一种广泛应用于企业级开发的编程语言,在微信公众号开发中也得到了广泛应用。通过使用Java开发微信公众号,可以实现公众号的业务逻辑,包括用户管理、消息推送、菜单设置、素材管理等功能,以及与其他系统的对接、数据的处理和存储等。 对于开发微信公众号的源码来说,Java源码通常包括了处理微信服务器与开发者服务器之间的消息通信和交互的代码,以及各类功能模块的实现代码。开发者可以根据自己的需求和业务逻辑,使用Java语言编写各种业务逻辑代码,并通过开发工具集成微信提供的SDK库来实现与微信服务器之间的交互。 在Java源码的基础上,开发者还可以根据需要进行定制和扩展,以满足更具体的业务需求。可以添加自定义的功能模块或者对现有功能进行修改和优化,以适应不同的应用场景和业务要求。 总之,微信公众号开发源码Java是用于开发微信公众号的源代码,通过使用Java语言和相应的开发工具,开发者可以自定义和实现具体的业务功能,满足不同用户的需求,并与微信服务器进行消息交互,为用户提供更好的微信公众号服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值