请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

https://img1.sycdn.imooc.com/szimg//577f34d00001632f08900542.jpg

有道友有一样的问题吗?

正在回答

5回答

Scott 2016-07-10 16:26:24

文档在这里:


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 回复 有任何疑惑可以回复我~
  • 非常感谢!
    回复 有任何疑惑可以回复我~ 2016-07-11 09:20:30
  • 老师您的文档我打不开,这里还有一个疑惑,我需要对我每次发送的消息都要做一个判断么~
    回复 有任何疑惑可以回复我~ 2016-07-11 10:46:21
  • Scott 回复 提问者 行走在冬夜冷风中 #3
    对每一种类型的微信 Post 数据都做一个判断和回复吧,你触发的消息,可能会触发微信服务器的 1 次推送,也可能是多次推送。
    
    文档就是这个,进去找自动消息那块就行:
    
    https://mp.weixin.qq.com/wiki
    回复 有任何疑惑可以回复我~ 2016-07-11 11:06:09
Scott 2016-07-08 17:53:29

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


到 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 回复 有任何疑惑可以回复我~
  • 我也不知道啊。。我全贴就提示系统错误。。。
    我加了一个return 但是还是报错,跟之前报错一样
    回复 有任何疑惑可以回复我~ 2016-07-10 11:10:35
  • 那个错误在我做完菜单那一章节之后也出现了,一样的报错。。但是我可以从返回的地址里面在网页上访问到图片,只是微信无法返回那张图片给我
    回复 有任何疑惑可以回复我~ 2016-07-10 15:04:24
  • Scott 回复 提问者 行走在冬夜冷风中 #3
    依然是模板或者是哪里代码写错了,你先尝试,把所有的接收到请求后的代码里面,各处都加上 console.log 输出该处的变量,然后看看是执行到哪里,出现异常了,如果还是不行,再整个项目打包发我邮箱。解决这个问题其实不重要,这个尝试定位问题的调试过程才是最有价值的
    回复 有任何疑惑可以回复我~ 2016-07-10 15:07:41
Scott 2016-07-08 13:26:05

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

0 回复 有任何疑惑可以回复我~
  • 老师这里发帖,老是提示系统错误,我发给您的邮箱里了,问题解决后我会在这里写上错误原因和解决方案
    回复 有任何疑惑可以回复我~ 2016-07-08 14:16:59
提问者 行走在冬夜冷风中 2016-07-08 16:59:33

577f6b3f0001f19904430362.jpg

577f6b440001692205000343.jpg

577f6b45000104b005000261.jpg

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

1 回复 有任何疑惑可以回复我~
提问者 行走在冬夜冷风中 2016-07-08 16:54:13
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 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信