Node微信公众号开发 自定义菜单

有了之前的铺垫,现在就可以轻松的实现自定义菜单的输出了。

自定义菜单

  • 请求地址:https://api.weixin.qq.com/cgi-bin/menu/create?accesstoken=ACCESSTOKEN
  • 请求方式:post
  • 官方示例(示例中 type 为 miniprogram(小程序)的一段会造成报错,故注销)
  {
    "button":[
    {    
         "type":"click",
         "name":"今日歌曲",
         "key":"V1001_TODAY_MUSIC"
     },
     {
          "name":"菜单",
          "sub_button":[
          {    
              "type":"view",
              "name":"搜索",
              "url":"http://www.soso.com/"
           },
          //  {
          //       "type":"miniprogram",
          //       "name":"wxa",
          //       "url":"http://mp.weixin.qq.com",
          //       "appid":"wx286b93c14bbf93aa",
          //       "pagepath":"pages/lunar/index"
          //   },
           {
              "type":"click",
              "name":"赞一下我们",
              "key":"V1001_GOOD"
           }]
      }]
  }

首先,先按照示例生成自定义表单 json 串,然后将这段数据传给微信既可生成自定义菜单。代码如下:

var request = require('./request') // 引入封装好的 request 模块

module.exports = (config) => {  
  var url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='   config.setAccessToken.accessToken // 拼接请求地址

  // 创建请求
  request.post(url, JSON.stringify(config.menu)).then((response) => {
    console.log('create menu success', response)
  }).catch((error) => {
    console.log('create menu fail', error)
  })
}

我所有涉及配置的数据都存放在 config.json 文件中,所以在这里将 config 实参传递过来。

以上代码被我保存命名为 createMenu.js ,最后只要将其追加到 app.js 文件中引入调用:

var express = require('express') // 引入express模块
var app = express()
var sha1 = require('sha1') // sha1 为第三方加密模块

var config = require('./config') // 引入配置文件,其中包含 appid、appScrect、token、setAccessToken、自定义菜单json
var getAccessToken = require('./accessToken')(config) // 获取 accessToken
var createMenu = require('./createMenu') // 上段的创建菜单模块

app.get('/', (req, res) => {
  getAccessToken.then((accessToken) => {
    createMenu(config)
  })

  // 获取微信服务器发送的数据
  var signature = req.query.signature,
      timestamp = req.query.timestamp,
      nonce = req.query.nonce,
      echostr = req.query.echostr

  // token、timestamp、nonce 三个参数进行字典序排序
  var arr = [config.token, timestamp, nonce].sort().join('')

  // sha1加密
  var result = sha1(arr)

  // 验证通信是否来自微信
  if (result === signature) {
    console.log('is wechat')
    res.send(echostr)
  } else {
    console.log('not wechat')
    res.send('mismatch')
  }
})

当然,在创建过程中会遇到各种各样的问题,可以在调试器中查看对应的问题具体调整。

这里列出官方给出的所有全局返回码以及对应问题根源:

返回码
说明
-1
系统繁忙,此时请开发者稍候再试
0
请求成功
40001
获取 accesstoken 时 AppSecret 错误,或者 accesstoken 无效。请开发者认真比对 AppSecret 的正确性,或查看是否正在为恰当的公众号调用接口
40002
不合法的凭证类型
40003
不合法的 OpenID ,请开发者确认 OpenID (该用户)是否已关注公众号,或是否是其他公众号的 OpenID
40004
不合法的媒体文件类型
40005
不合法的文件类型
40006
不合法的文件大小
40007
不合法的媒体文件 id
40008
不合法的消息类型
40009
不合法的图片文件大小
40010
不合法的语音文件大小
40011
不合法的视频文件大小
40012
不合法的缩略图文件大小
40013
不合法的 AppID ,请开发者检查 AppID 的正确性,避免异常字符,注意大小写
40014
不合法的 accesstoken ,请开发者认真比对 accesstoken 的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口
40015
不合法的菜单类型
40016
不合法的按钮个数
40017
不合法的按钮类型
40018
不合法的按钮名字长度
40019
不合法的按钮 KEY 长度
40020
不合法的按钮 URL 长度
40021
不合法的菜单版本号
40022
不合法的子菜单级数
40023
不合法的子菜单按钮个数
40024
不合法的子菜单按钮类型
40025
不合法的子菜单按钮名字长度
40026
不合法的子菜单按钮 KEY 长度
40027
不合法的子菜单按钮 URL 长度
40028
不合法的自定义菜单使用用户
40029
无效的 oauth_code
40030
不合法的 refresh_token
40031
不合法的 openid 列表
40032
不合法的 openid 列表长度
40033
不合法的请求字符,不能包含 uxxxx 格式的字符
40035
不合法的参数
40038
不合法的请求格式
40039
不合法的 URL 长度
40048
无效的url
40050
不合法的分组 id
40051
分组名字不合法
40060
删除单篇图文时,指定的 article_idx 不合法
40117
分组名字不合法
40118
media_id 大小不合法
40119
button 类型错误
40120
子 button 类型错误
40121
不合法的 media_id 类型
40125
无效的appsecret
40132
微信号不合法
40137
不支持的图片格式
40155
请勿添加其他公众号的主页链接
40163
oauth_code已使用
41001
缺少 access_token 参数
41002
缺少 appid 参数
41003
缺少 refresh_token 参数
41004
缺少 secret 参数
41005
缺少多媒体文件数据
41006
缺少 media_id 参数
41007
缺少子菜单数据
41008
缺少 oauth code
41009
缺少 openid
42001
accesstoken 超时,请检查 accesstoken 的有效期,请参考基础支持 - 获取 accesstoken 中,对 accesstoken 的详细机制说明
42002
refresh_token 超时
42003
oauth_code 超时
42007
用户修改微信密码, accesstoken 和 refreshtoken 失效,需要重新授权
43001
需要 GET 请求
43002
需要 POST 请求
43003
需要 HTTPS 请求
43004
需要接收者关注
43005
需要好友关系
43019
需要将接收者从黑名单中移除
44001
多媒体文件为空
44002
POST 的数据包为空
44003
图文消息内容为空
44004
文本消息内容为空
45001
多媒体文件大小超过限制
45002
消息内容超过限制
45003
标题字段超过限制
45004
描述字段超过限制
45005
链接字段超过限制
45006
图片链接字段超过限制
45007
语音播放时间超过限制
45008
图文消息超过限制
45009
接口调用超过限制
45010
创建菜单个数超过限制
45011
API 调用太频繁,请稍候再试
45015
回复时间超过限制
45016
系统分组,不允许修改
45017
分组名字过长
45018
分组数量超过上限
45047
客服接口下行条数超过上限
45064
创建菜单包含未关联的小程序
45065
相同 clientmsgid 已存在群发记录,返回数据中带有已存在的群发任务的 msgid
45066
相同 clientmsgid 重试速度过快,请间隔1分钟重试
45067
clientmsgid 长度超过限制
46001
不存在媒体数据
46002
不存在的菜单版本
46003
不存在的菜单数据
46004
不存在的用户
47001
解析 JSON/XML 内容错误
48001
api 功能未授权,请确认公众号已获得该接口,可以在公众平台官网 - 开发者中心页中查看接口权限
48002
粉丝拒收消息(粉丝在公众号选项中,关闭了 “ 接收消息 ” )
48004
api 接口被封禁,请登录 mp.weixin.qq.com 查看详情
48005
api 禁止删除被自动回复和自定义菜单引用的素材
48006
api 禁止清零调用次数,因为清零次数达到上限
48008
没有该类型消息的发送权限
50001
用户未授权该 api
50002
用户受限,可能是违规后接口被封禁
50005
用户未关注公众号
61451
参数错误 (invalid parameter)
61452
无效客服账号 (invalid kf_account)
61453
客服帐号已存在 (kf_account exsited)
61454
客服帐号名长度超过限制 ( 仅允许 10 个英文字符,不包括 @ 及 @ 后的公众号的微信号 )(invalid kf_acount length)
61455
客服帐号名包含非法字符 ( 仅允许英文 数字 )(illegal character in kf_account)
61456
客服帐号个数超过限制 (10 个客服账号 )(kf_account count exceeded)
61457
无效头像文件类型 (invalid file type)
61450
系统错误 (system error)
61500
日期格式错误
63001
部分参数为空
63002
无效的签名
65301
不存在此 menuid 对应的个性化菜单
65302
没有相应的用户
65303
没有默认菜单,不能创建个性化菜单
65304
MatchRule 信息为空
65305
个性化菜单数量受限
65306
不支持个性化菜单的帐号
65307
个性化菜单信息为空
65308
包含没有响应类型的 button
65309
个性化菜单开关处于关闭状态
65310
填写了省份或城市信息,国家信息不能为空
65311
填写了城市信息,省份信息不能为空
65312
不合法的国家信息
65313
不合法的省份信息
65314
不合法的城市信息
65316
该公众号的菜单设置了过多的域名外跳(最多跳转到 3 个域名的链接)
65317
不合法的 URL
87009
无效的签名
9001001 POST 数据参数不合法
9001002 远端服务不可用
9001003 Ticket 不合法
9001004 获取摇周边用户信息失败
9001005 获取商户信息失败
9001006 获取 OpenID 失败
9001007 上传文件缺失
9001008 上传素材的文件类型不合法
9001009 上传素材的文件尺寸不合法
9001010 上传失败
9001020 帐号不合法
9001021 已有设备激活率低于 50% ,不能新增设备
9001022 设备申请数不合法,必须为大于 0 的数字
9001023 已存在审核中的设备 ID 申请
9001024 一次查询设备 ID 数量不能超过 50
9001025 设备 ID 不合法
9001026 页面 ID 不合法
9001027 页面参数不合法
9001028 一次删除页面 ID 数量不能超过 10
9001029 页面已应用在设备中,请先解除应用关系再删除
9001030 一次查询页面 ID 数量不能超过 50
9001031 时间区间不合法
9001032 保存设备与页面的绑定关系参数错误
9001033 门店 ID 不合法
9001034 设备备注信息过长
9001035 设备申请参数不合法
9001036 查询起始值 begin 不合法

文章已同步我的个人博客:《Node微信公众号开发 自定义菜单

相关文章:

---

资料参考:

本文由博客一文多发平台 OpenWrite 发布!

发布了16 篇原创文章 · 获赞 0 · 访问量 503

猜你喜欢

转载自blog.csdn.net/sz861128/article/details/104261909