weixin-easy-api
v0.0.2
Published
nodejs下的微信开发工具。用户只需关注业务逻辑,token、ticket由程序去维护
Downloads
1
Maintainers
Readme
nodejs下的微信开发工具。用户只需关注业务逻辑,token、ticket由程序去维护
在线说明: https://tomarking.com/inf.html?id=61124
示例 let wxcfg = {
appid: "APPID",
appsecret: "APPSECRET",
}
//获得服务器IP地址
weixin.getApiDomainIp({init:wxcfg}).then(d=>{
console.log(d);
})
//获得微信端相关信息如access_token,
weixin.info({init:wxcfg}).then(d=>{
console.log(d);
})
这样就可以获得,Api的服务器IP地址、微信端相关信息 {weixin} exports出来的对象 库内部方法 用户无需手动调用 init(opts) 用户无需调用
getToken 获取token
用户无需调用 refreshToken 刷新token
用户无需调用 refreshTokenStable 官方另一种,获得稳定token的方法。
用户无需调用 服务器信息 info 获得当前配置信息,如:access_token和expires_in weixin.info({ init: { appid: "APPID", appsecret: "APPSECRET" } }).then(d => { console.log(d); })
返回:
{
input: {
appid: "",
appsecret: ""
},
token: {
access_token: "",
expires_in: 0
},
}
getApiDomainIp weixin.getApiDomainIp({ init: { appid: "APPID", appsecret: "APPSECRET" } }).then(d => { console.log(d); })
获取微信服务器IP地址 如果公众号基于安全等考虑,需要获知微信服务器的IP地址列表,以便进行相关限制,可以通过该接口获得微信服务器IP地址列表或者IP网段信息。
由于出口IP及入口IP可能存在变动,建议用户每天请求接口1次,以便于及时更新IP列表。为了避免造成单点故障,强烈建议用户不要长期使用旧的IP列表作为api.weixin.qq.com的访问入口。
- 获取微信API接口 IP地址 使用固定IP访问api.weixin.qq.com时,请开发者注意运营商适配,跨运营商访问可能会存在高峰期丢包问题。
API接口IP即api.weixin.qq.com的解析地址,由开发者调用微信侧的接入IP。
系统功能方法 netCheck 网络检测 为了帮助开发者排查回调连接失败的问题,提供这个网络检测的API。它可以对开发者URL做域名解析,然后对所有IP进行一次ping操作,得到丢包率和耗时。
winxin.netCheck({init:{
appid: "APPID",
appsecret: "APPSECRET",
}, action: "all", check_operator:"DEFAULT"})
输入 action 执行的检测动作,允许的值:dns(做域名解析)、ping(做ping检测)、all(dns和ping都做)
check_operator 指定平台从某个运营商进行检测,允许的值:CHINANET(电信出口)、UNICOM(联通出口)、CAP(腾讯自建出口)、DEFAULT(根据ip来选择运营商)
clearQuota weixin.clearQuota({ init: { appid: "APPID", appsecret: "APPSECRET" } }).then(d => { console.log(d); })
清空api的调用quota 本接口用于清空公众号/小程序/第三方平台等接口的每日调用接口次数。
注意事项 每个帐号每月共10次清零操作机会,清零生效一次即用掉一次机会;第三方帮助公众号/小程序调用时,实际上是在消耗公众号/小程序自身的quota
由于指标计算方法或统计时间差异,实时调用量数据可能会出现误差,一般在1%以内 ridGet weixin.ridGet({ init: { appid: "APPID", appsecret: "APPSECRET" },rid: "64a1c55c-452c0f48-0052303c"}).then(d => { console.log(d); })
查询rid信息
本接口用于查询调用公众号/小程序/第三方平台等接口报错返回的rid详情信息,辅助开发者高效定位问题。
注意事项
1、由于查询rid信息属于开发者私密行为,因此仅支持同账号的查询。举个例子,rid=1111,是小程序账号A调用某接口出现的报错,那么则需要使用小程序账号A的access_token调用当前接口查询rid=1111的详情信息,如果使用小程序账号B的身份查询,则出现报错,错误码为xxx。公众号、第三方平台账号的接口同理。
2、如果是第三方服务商代公众号或者小程序查询公众号或者小程序的api返回的rid,则使用同一账号的authorizer_access_token调用即可
3、rid的有效期只有7天,即只可查询最近7天的rid,查询超过7天的rid会出现报错,错误码为76001
clearQuotaByAppSecret weixin.clearQuotaByAppSecret({ init: { appid: "APPID", appsecret: "APPSECRET" }}).then(d => { console.log(d); })
重置 API 调用次数
接口说明
接口英文名
clearQuotaByAppSecret
功能描述
本接口用于清空公众号/小程序等接口的每日调用接口次数
注意事项
1、该接口通过appsecret调用,解决了accesss_token耗尽无法调用重置 API 调用次数的情况
2、每个帐号每月使用重置 API 调用次数 与本接口共10次清零操作机会,清零生效一次即用掉一次机会;
3、由于指标计算方法或统计时间差异,实时调用量数据可能会出现误差,一般在1%以内
公众号菜单管理 menuCreate weixin.menuCreate({ init: { appid: "APPID", appsecret: "APPSECRET" },button: [ { "type": "view", "name": "个人中心", "url": "https://tomarking.com/market.html#page=cmine.html" } ]}).then(d => { console.log(d); })
自定义菜单/创建接口
自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。
请注意:
自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
一级菜单最多4个汉字,二级菜单最多8个汉字,多出来的部分将会以“...”代替。
创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。
自定义菜单接口可实现多种类型按钮,如下:
click:点击推事件用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;
view:跳转URL用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。
scancode_push:扫码推事件用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息。
scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出“消息接收中”提示框,随后可能会收到开发者下发的消息。
pic_sysphoto:弹出系统拍照发图用户点击按钮后,微信客户端将调起系统相机,完成拍照操作后,会将拍摄的相片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。
pic_photo_or_album:弹出拍照或者相册发图用户点击按钮后,微信客户端将弹出选择器供用户选择“拍照”或者“从手机相册选择”。用户选择后即走其他两种流程。
pic_weixin:弹出微信相册发图器用户点击按钮后,微信客户端将调起微信相册,完成选择操作后,将选择的相片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。
location_select:弹出地理位置选择器用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。
media_id:下发消息(除文本消息)用户点击media_id类型按钮后,微信服务器会将开发者填写的永久素材id对应的素材下发给用户,永久素材类型可以是图片、音频、视频 、图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。
view_limited:跳转图文消息URL用户点击view_limited类型按钮后,微信客户端将打开开发者在按钮中填写的永久素材id对应的图文消息URL,永久素材类型只支持图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。
article_id:用户点击 article_id 类型按钮后,微信客户端将会以卡片形式,下发开发者在按钮中填写的图文消息
article_view_limited:类似 view_limited,但不使用 media_id 而使用 article_id
注意: 草稿接口灰度完成后,将不再支持图文信息类型的 media_id 和 view_limited,有需要的,请使用 article_id 和 article_view_limited 代替
请注意,3到8的所有事件,仅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用户,旧版本微信用户点击后将没有回应,开发者也不能正常接收到事件推送。9~12,是专门给第三方平台旗下未微信认证(具体而言,是资质认证未通过)的订阅号准备的事件类型,它们是没有事件推送的,能力相对受限,其他类型的公众号不必使用。
接口调用请求说明
click和view的请求示例
{
"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"
}]
}]
}
其他新增按钮类型的请求示例
{
"button": [
{
"name": "扫码",
"sub_button": [
{
"type": "scancode_waitmsg",
"name": "扫码带提示",
"key": "rselfmenu_0_0",
"sub_button": [ ]
},
{
"type": "scancode_push",
"name": "扫码推事件",
"key": "rselfmenu_0_1",
"sub_button": [ ]
}
]
},
{
"name": "发图",
"sub_button": [
{
"type": "pic_sysphoto",
"name": "系统拍照发图",
"key": "rselfmenu_1_0",
"sub_button": [ ]
},
{
"type": "pic_photo_or_album",
"name": "拍照或者相册发图",
"key": "rselfmenu_1_1",
"sub_button": [ ]
},
{
"type": "pic_weixin",
"name": "微信相册发图",
"key": "rselfmenu_1_2",
"sub_button": [ ]
}
]
},
{
"name": "发送位置",
"type": "location_select",
"key": "rselfmenu_2_0"
},
{
"type": "media_id",
"name": "图片",
"media_id": "MEDIA_ID1"
},
{
"type": "view_limited",
"name": "图文消息",
"media_id": "MEDIA_ID2"
},
{
"type": "article_id",
"name": "发布后的图文消息",
"article_id": "ARTICLE_ID1"
},
{
"type": "article_view_limited",
"name": "发布后的图文消息",
"article_id": "ARTICLE_ID2"
}
]
}
参数说明
参数是否必须说明
button是一级菜单数组,个数应为1~3个
sub_button否二级菜单数组,个数应为1~5个
type是菜单的响应动作类型,view表示网页类型,click表示点击类型,miniprogram表示小程序类型
name是菜单标题,不超过16个字节,子菜单不超过60个字节
keyclick等点击类型必须菜单KEY值,用于消息接口推送,不超过128字节
urlview、miniprogram类型必须网页 链接,用户点击菜单可打开链接,不超过1024字节。 type为miniprogram时,不支持小程序的老版本客户端将打开本url。
media_idmedia_id类型和view_limited类型必须调用新增永久素材接口返回的合法media_id
appidminiprogram类型必须小程序的appid(仅认证公众号可配置)
pagepathminiprogram类型必须小程序的页面路径
article_idarticle_id类型和article_view_limited类型必须发布后获得的合法 article_id
返回结果
正确时的返回JSON数据包如下:
{"errcode":0,"errmsg":"ok"}
错误时的返回JSON数据包如下(示例为无效菜单名长度):
{"errcode":40018,"errmsg":"invalid button name size"}
使用网页调试工具调试该接口
开发过程中如遇问题,可前往微信开放社区 #公众号 专区发帖交流。
menuGet weixin.menuGet({ init: { appid: "APPID", appsecret: "APPSECRET" }}).then(d => { console.log(d); })
自定义菜单 /查询接口 本接口将会提供公众号当前使用的自定义菜单的配置,如果公众号是通过API调用设置的菜单,则返回菜单的开发配置,而如果公众号是在公众平台官网通过网站功能发布菜单,则本接口返回运营者设置的菜单配置。
请注意:
第三方平台开发者可以通过本接口,在旗下公众号将业务授权给你后,立即通过本接口检测公众号的自定义菜单配置,并通过接口再次给公众号设置好自动回复规则,以提升公众号运营者的业务体验。 本接口与自定义菜单查询接口的不同之处在于,本接口无论公众号的接口是如何设置的,都能查询到接口,而自定义菜单查询接口则仅能查询到使用API设置的菜单配置。 认证/未认证的服务号/订阅号,以及接口测试号,均拥有该接口权限。 从第三方平台的公众号登录授权机制上来说,该接口从属于消息与菜单权限集。 本接口中返回的图片/语音/视频为临时素材(临时素材每次获取都不同,3天内有效,通过素材管理-获取临时素材接口来获取这些素材),本接口返回的图文消息为永久素材素材(通过素材管理-获取永久素材接口来获取这些素材)。
返回结果说明
如果公众号是在公众平台官网通过网站功能发布菜单,则本接口返回的自定义菜单配置样例如下:
{ "is_menu_open": 1, "selfmenu_info": { "button": [ { "name": "button", "sub_button": { "list": [ { "type": "view", "name": "view_url", "url": "http://www.qq.com" }, { "type": "news", "name": "news", "value":"KQb_w_Tiz-nSdVLoTV35Psmty8hGBulGhEdbb9SKs-o", "news_info": { "list": [ { "title": "MULTI_NEWS", "author": "JIMZHENG", "digest": "text", "show_cover": 0, "cover_url": "http://mmbiz.qpic.cn/mmbiz/GE7et87vE9vicuCibqXsX9GPPLuEtBfXfK0HKuBIa1A1cypS0uY1wickv70iaY1gf3I1DTszuJoS3lAVLvhTcm9sDA/0", "content_url": "http://mp.weixin.qq.com/s?__biz=MjM5ODUwNTM3Ng==&mid=204013432&idx=1&sn=80ce6d9abcb832237bf86c87e50fda15#rd", "source_url": "" }, { "title": "MULTI_NEWS1", "author": "JIMZHENG", "digest": "MULTI_NEWS1", "show_cover": 1, "cover_url": "http://mmbiz.qpic.cn/mmbiz/GE7et87vE9vicuCibqXsX9GPPLuEtBfXfKnmnpXYgWmQD5gXUrEApIYBCgvh2yHsu3ic3anDUGtUCHwjiaEC5bicd7A/0", "content_url": "http://mp.weixin.qq.com/s?__biz=MjM5ODUwNTM3Ng==&mid=204013432&idx=2&sn=8226843afb14ecdecb08d9ce46bc1d37#rd", "source_url": "" } ] } }, { "type": "video", "name": "video", "value": "http://61.182.130.30/vweixinp.tc.qq.com/1007_114bcede9a2244eeb5ab7f76d951df5f.f10.mp4?vkey=77A42D0C2015FBB0A3653D29C571B5F4BBF1D243FBEF17F09C24FF1F2F22E30881BD350E360BC53F&sha=0&save=1" }, { "type": "voice", "name": "voice", "value": "nTXe3aghlQ4XYHa0AQPWiQQbFW9RVtaYTLPC1PCQx11qc9UB6CiUPFjdkeEtJicn" } ] } }, { "type": "text", "name": "text", "value": "This is text!" }, { "type": "img", "name": "photo", "value": "ax5Whs5dsoomJLEppAvftBUuH7CgXCZGFbFJifmbUjnQk_ierMHY99Y5d2Cv14RD" } ] } } 如果公众号是通过API调用设置的菜单,自定义菜单配置样例如下:
{ "is_menu_open": 1, "selfmenu_info": { "button": [ { "type": "click", "name": "今日歌曲", "key": "V1001_TODAY_MUSIC" }, { "name": "菜单", "sub_button": { "list": [ { "type": "view", "name": "搜索", "url": "http://www.soso.com/" }, { "type": "view", "name": "视频", "url": "http://v.qq.com/" }, { "type": "click", "name": "赞一下我们", "key": "V1001_GOOD" } ] } } ] } } 参数说明
参数 说明 is_menu_open 菜单是否开启,0代表未开启,1代表开启 selfmenu_info 菜单信息 button 菜单按钮 type 菜单的类型,公众平台官网上能够设置的菜单类型有view(跳转网页)、text(返回文本,下同)、img、photo、video、voice。使用API设置的则有8种,详见《自定义菜单创建接口》 name 菜单名称 value、url、key等字段 对于不同的菜单类型,value的值意义不同。官网上设置的自定义菜单: Text:保存文字到value; Img、voice:保存mediaID到value; Video:保存视频下载链接到value; News:保存图文消息到news_info,同时保存mediaID到value; View:保存链接到url。 使用API设置的自定义菜单: click、scancode_push、scancode_waitmsg、pic_sysphoto、pic_photo_or_album、 pic_weixin、location_select:保存值到key;view:保存链接到url news_info 图文消息的信息 title 图文消息的标题 digest 摘要 author 作者 show_cover 是否显示封面,0为不显示,1为显示 cover_url 封面图片的URL content_url 正文的URL source_url 原文的URL,若置空则无查看原文入口 menuDelete weixin.menuDelete({ init: { appid: "APPID", appsecret: "APPSECRET" }}).then(d => { console.log(d); })
自定义菜单 /删除接口
使用接口创建自定义菜单后,开发者还可使用接口删除当前使用的自定义菜单。另请注意,在个性化菜单时,调用此接口会删除默认菜单及全部个性化菜单。
返回说明
对应创建接口,正确的Json返回结果:
{"errcode":0,"errmsg":"ok"}
使用网页调试工具调试该接口
基础消息能力 正在制作中……
客户消息 正在制作中……
目录