5-1里面返回一个text类型的消息时报错

来源:

行走在冬夜冷风中

2016-07-08

http://szimg.mukewang.com/577f34d00001632f08900542.jpg

有道友有一样的问题吗?

写回答

5回答

Scott

2016-07-10

文档在这里:


https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453&token=&lang=zh_CN


看了下,应该是微信第一次的 post 信息,你没回复,它就重复推送了一次。

什么意思呢,我们以 点出菜单的 弹出系统拍照为例,点击了拍照。它会 post 过来一个 Image 的事件,需要对这个事件作出响应,如果不响应,它就会 post 过来第二次。

reply.js 里面,就要这样处理:

if(message.MsgType === 'image'){
  this.body = '哈哈你需要对各种 MsgType 单独处理'
}
else if(message.MsgType === 'event'){
  if(message.Event === 'subscribe'){
    if(message.EventKey){
      console.log('扫二维码进来'+message.EventKey + '  '+ message)
    }


其他的也是同理,对于是 event 的,要加一个 else 处理,无论怎样的 post 消息,都要给予回复,回复的内容可以自己定义。不然都会出现这个重复推送

0
4
行走在冬夜冷风中
回复
Scott
仅仅修改老师您给出代码那一段,报错是消失~但是好像跟老师调试的效果不太一样~我自己在琢磨一下~谢谢老师!!!!!
2016-07-11
共4条回复

Scott

2016-07-08

为什么贴上来的代码是格式是乱的呢?


到 wechat.js 里面,找到 75 行的样子:


Wechat.prototype.fetchAccessToken = function(data){
  var that =this
  if(this.access_token && this.expires_in){
    if(this.isValidAccessToken(this)){
      return Promise.resolve(this)
    }
  }
  this.getAccessToken()

在 this.getAccessToken() 前面加上 return 试试

0
3
Scott
回复
行走在冬夜冷风中
依然是模板或者是哪里代码写错了,你先尝试,把所有的接收到请求后的代码里面,各处都加上 console.log 输出该处的变量,然后看看是执行到哪里,出现异常了,如果还是不行,再整个项目打包发我邮箱。解决这个问题其实不重要,这个尝试定位问题的调试过程才是最有价值的
2016-07-10
共3条回复

Scott

2016-07-08

把 util wechat g 这三个文件代码贴一下

0
1
行走在冬夜冷风中
老师这里发帖,老是提示系统错误,我发给您的邮箱里了,问题解决后我会在这里写上错误原因和解决方案
2016-07-08
共1条回复

行走在冬夜冷风中

提问者

2016-07-08

577f6b3f0001f19904430362.jpg

577f6b440001692205000343.jpg

577f6b45000104b005000261.jpg

老师你好,我把提示错误的代码部分截图上来了。因为全部贴上来还是提示系统错误~

1
0

行走在冬夜冷风中

提问者

2016-07-08

g.js
'use strict' var sha1 = require('sha1') var getRawBody = require('raw-body') var Wechat = require('./wechat') var util = require('./util') module.exports = function(opts,handler){  var wechat = new Wechat(opts)  return function* (next){    var that = this    var token  = opts.token    var signature = this.query.signature    var nonce = this.query.nonce    var timestamp = this.query.timestamp    var echostr = this.query.echostr    var str = [token,timestamp,nonce].sort().join('')    var sha = sha1(str)        if(this.method ==='GET'){        if (sha === signature) {        this.body = echostr+''      }else{        this.body = 'wrong'      }    }    else if(this.method === 'POST')  {      if (sha !== signature) {        this.body = 'wrong'        return false      }      var data = yield getRawBody(this.req,{        length:this.length,        limit:'1mb',        encoding:this.charset      })      //console.log(data.toString())      var content = yield util.parseXMLAsync(data)      console.log(content)      var message = util.formatMessage(content.xml)      console.log(message)            this.weixin = message      yield handler.call(this,next)      wechat.reply.call(this)    }   } }
util.js
'use strict'var xml2js = require('xml2js')var Promise = require('bluebird')var tpl =require('./tpl')exports.parseXMLAsync = function(xml){     return new Promise(function(resolve,reject){         xml2js.parseString(xml,{trim:true},function(err,content){                 if(err) reject(err)                 else resolve(content)         })     })} function formatMessage(result){    var message = {}    if(typeof result === 'object'){        var keys = Object.keys(result)        for(var i = 0; i < keys.length;i++){            var item = result[keys[i]]            var key = keys[i]            if(!(item instanceof Array)|| item.length === 0){                continue            }            if(item.length === 1){                var val = item[0]                if(typeof val === 'object'){                    message[key] = formatMessage(val)                }else{                    message[key] = (val ||'').trim()                }            }            else{                message[key] = []                for(var j = 0,k = item.length; j < k; j++){                    message[key].push(formatMessage(item[j]))                }            }        }    }                        return message                }exports.formatMessage = formatMessageexports.tpl = function(content,message){    var info = {}    var type = 'text'    var fromUserName = message.FromUserName    var toUserName = message.ToUserName    if(Array.isArray(content)){        type = 'news'    }    type = content.type||type    info.content = content    info.createTime = new Date().getTime()    info.msgType = type    info.toUserName = fromUserName    info.fromUserName = toUserName    return tpl.compiled(info)}
0
0

7天搞定Node.js微信公众号

Koa框架、ES2015新特性、MongoDB,开发微信公众号

1742 学习 · 787 问题

查看课程