npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

weixin-easy-api

v0.0.2

Published

nodejs下的微信开发工具。用户只需关注业务逻辑,token、ticket由程序去维护

Downloads

1

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的访问入口。

  1. 获取微信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"}

使用网页调试工具调试该接口

基础消息能力 正在制作中……

客户消息 正在制作中……

目录