微信小程序生态13

您所在的位置:网站首页 订阅号跳转小程序 微信小程序生态13

微信小程序生态13

2024-07-10 02:57| 来源: 网络整理| 查看: 265

文章导航

微信小程序生态1-初识小程序 微信小程序生态2-创建一个微信小程序 微信小程序生态3-微信小程序登录流程设计 微信小程序生态4-扫普通二维码进入小程序、打开短链接进入小程序 微信小程序生态5-微信公众号扫码登录PC端网页 微信小程序生态6-微信公众号授权登录(适用于H5小程序) 微信小程序生态7-微信公众号设置IP白名单 微信小程序生态8-基于weixin-java-mp实现微信公众号被动回复消息 微信小程序生态9-微信开放平台unionId机制介绍 微信小程序生态10-微信公众号token验证失败 微信小程序生态11-一个二维码同时支持微信、钉钉、支付宝扫码打开小程序 微信小程序生态12-微信小程序开发设置中服务器域名和业务域名 微信小程序生态13-微信公众号自定义菜单、个性化菜单配置 微信小程序生态14-下线已发布的小程序 微信小程序生态15- 批量提交微信小程序审核的一种方式

微信公众号分为订阅号和服务号两种,虽然二者很大的不同,但是这两种公众号的底部却是差不多的,二者都有菜单栏,而且这些底部菜单也都是自定义配置的。 如CSDN的官方公众号的底部就有精彩栏目、新程序员、CSDN等菜单可供使用:

那这些菜单是如何生成的呢?微信以配置方式的不同把它分为了两类:自定义菜单、个性化菜单。

自定义菜单

微信公众号自定义菜单栏的配置需要登录『微信公众平台』,依次选择 内容与互动—>自定义菜单 ,如下:

在『菜单信息栏』中我们有3种类型的菜单可以选择:发送消息、跳转网页、跳转小程序。

菜单类型 1. 发送消息

这种菜单点击后,公众号会自动弹出一条消息,比如华为运动健康的『最新排行』:

2. 跳转网页

这种菜单点击后,当前会离开公众号,跳转到指定的页面,这个多用在H5小程序上。

3. 跳转小程序

这种菜单点击后,当前会离开公众号,跳转到指定的小程序的指定页面。

小结一下

虽然提供了这三种菜单栏,但灵活性上还是不够,想要修改必须要登录『微信公众平台』,做不到自动更新。 举个例子,有个菜单名为『最新资讯』,点击即可打开最新的那一条资讯或文章,如果是自定义菜单,那么就需要运营自己不断地去手动更新跳转的链接,这样运营就很辛苦了。 为了方便运营,官方还推出了个性化菜单,所谓个性化菜单就是微信官方推出了可以更改自定义菜单的接口,开发者调用该接口就可以达到菜单的配置。 这里要注意一下,启用个性化菜单后,自定义菜单栏就会变得不可用了,这两种方式只能选其一。

个性化菜单 第一步、开启服务器配置

在设置与开发—>基础配置页找到『服务器配置』

开发者ID(AppID)

这个是当前公众号的唯一标识,生成后就不会变化

开发者密码(AppSecret)

这个是动态生成的一串密钥,非常重要,且不能泄露,如有需要请生成后妥善保存。密钥一般可以重复生成。

IP白名单

只有在这里配置过的IP地址,才可以调用微信的服务,之前有篇文章提到过:微信小程序生态7-微信公众号设置IP白名单

服务器地址(URL)

这个是『微信公众号』回调我们的地址,必须以http://或https://开头,分别支持80端口和443端口。也就是说这个不能配置IP,得是域名才行。 例如:https://xxx.com/handleWxCheckSignature

令牌(Token)

自己设置,越复杂越好,不要太简单

消息加解密密钥(EncodingAESKey)

可以随机生成,这个密钥用于解析推送过来的值。

消息加解密方式

有三种,明文模式(明文模式下,不使用消息体加解密功能,安全系数较低)、兼容模式(兼容模式下,明文、密文将共存,方便开发者调试和维护)、安全模式(推荐,安全模式下,消息包为纯密文,需要开发者加密和解密,安全系数高)

注意:这里的配置一旦启用,自定义菜单就会失效并停用;而且如果想要调用服务号的各种功能就必须要启用该配置,那么自定义菜单就一定会失效 -.-!

第二步、『微信公众号』签名校验接口实现

第一步中有一个服务器地址(URL),这个地址有一个作用:校验服务器是安全且可用的。即微信那边需要我们保证这个接口微信官方可以调通并且正确返回他们想要的值,如果调不通的话则无法设置自定义菜单。 这里我是用的是SpringBoot应用作为服务

1. 引入小程序开发包依赖 com.github.binarywang weixin-java-mp 3.6.0 2. 编写微信内容解码类

由于消息加解密方式我们选择的是安全模式,微信传给我们的内容都是加过密的,所以我们需要写一个解码类。

WXBizMsgCrypt.java

import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.util.crypto.PKCS7Encoder; import org.apache.commons.codec.binary.Base64; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.StringReader; import java.nio.charset.Charset; import java.security.MessageDigest; import java.util.Arrays; /** * 提供接收和推送给公众平台消息的加解密接口(UTF8编码的字符串). * 第三方回复加密消息给公众平台,第三方收到公众平台发送的消息,验证消息的安全性,并对消息进行解密。 */ @Slf4j public class WXBizMsgCrypt { static Charset CHARSET = Charset.forName("utf-8"); Base64 base64 = new Base64(); byte[] aesKey; String token; String appId; /** * 构造函数 * * @param token 公众平台上,开发者设置的token * @param encodingAesKey 公众平台上,开发者设置的EncodingAESKey * @param appId 公众平台appid * @throws WxAesException 执行失败,请查看该异常的错误码和具体的错误信息 */ public WXBizMsgCrypt(String token, String encodingAesKey, String appId) throws WxAesException { if (encodingAesKey.length() != 43) { throw new WxAesException(WxAesException.IllegalAesKey); } this.token = token; this.appId = appId; aesKey = Base64.decodeBase64(encodingAesKey + "="); } // 还原4个字节的网络字节序 int recoverNetworkBytesOrder(byte[] orderBytes) { int sourceNumber = 0; for (int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3