微信公众号开发初体验

由于课程设计需要开发一个微信公众号,临时学习,在同学的推荐下找到了bmob平台,里面提供了数据库和云端代码,挺好用的。

由于不熟悉nodejs,也不熟悉微信开发,于是连简单的功能也困扰了很久,用了几个小时才把数据库里的东西拿出来显示。之后还会慢慢进步的!

贴个代码:

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,接收订阅者发送过来的消息。
            //讲数据增加到数据库中的message表,并回调函数
            db.insert({   
              "table":"message",             //表名
              "data":{"userId":request.body.xml.FromUserName,"content":request.body.xml.Content}           
            },function(err,data){
                //查找course表中的所有数据,并发送给用户
                db.find({
                    "table":"course"
                },function(err,data){
                //把data转换成json对象,使得可以使用对象的属性,course表中有name和price字段。
                    var resultObject = JSON.parse(data);
                    for(var results in resultObject){
                        var str = '';
                        var resultArr = resultObject[results];
                        for(var line in resultArr){
                            str = str + '菜名:' + resultArr[line].name +  ' 价格:'+ resultArr[line].price + '\n';
                        }
                        // response.send(str);
                        //因为公众号接受xml格式消息,所以要转成xml格式。四个属性对应公众号平台要求的参数。
                        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');
                        //发送xml给公众号,继而转发给用户。
                        response.send(xml);
                    }

               });

            }); 



    }
}         

数据库:
微信公众号开发初体验_第1张图片

公众号:
微信公众号开发初体验_第2张图片

忙会了这么久,虽然只是简单的显示出了信息,但毕竟有所进步。好好学习,多动手尝试,希望可以实现预期目标。

你可能感兴趣的:(nodejs)