微信二维码的生成(java后端)--邀请新人

目录

写在前言

1.微信官方文档

2.具体分析


写在前言

最近因为在学习微信小程序邀请新用户的功能,所以需要后端生成二维码并且携带本人的用户id或者其他的信息,传给前端。用户通过这个二维码去进行登录或者其他的操作,这时候前端人员记录下来邀请人的用户id和被邀请人的用户id传给后端。这哥功能首先就需要生成微信二维码,那么下面就是我的学习过程。

1.微信官方文档

首先需要查看微信的官方文档去确定这个微信二维码到底需要什么接口。

你必须知道,这个二维码的生成条件有

①小程序已经发布成功

②通过后端程序提供access_token去给微信的服务器,微信服务器确认好身份后就会返回一个buffer的字节,这时候就是我们所需要的二维码。

所以必须要有微信小程序给的开发者的相关access_token

一般你是在前人的基础上新增功能,这些前提问题可以不用考虑,我就属于这个。首先这些东西是在SpingBoot的yam配置文件中,你可以看到你都前辈写的appid和对应的secret。这些会在应用启动时注入,所以只要有就好解决问题了。

下面让我们看看微信的官方文档:这是官方文档

进去之后我们看到了他的介绍

接口A:适用于需要的码数量较少的业务场景

接口B:适用于需要的码数量极多的业务场景

接口C:适用于需要的码数量较少的业务场景

接口D:适用于“一物一码”的业务场景

其中接口A和接口C :生成小程序码,可接受 path 参数较长,生成个数受限,数量限制见 注意事项,请谨慎使用。

所以我这里学习的是邀请新人(码必须很多)用的接口B

这是接口B的源码,有中文很清晰的。

 /**
   * 接口B: 获取小程序码(永久有效、数量暂无限制).
   * <pre>
   * 通过该接口生成的小程序码,永久有效,数量暂无限制。
   * 用户扫描该码进入小程序后,将统一打开首页,开发者需在对应页面根据获取的码中 scene 字段的值,再做处理逻辑。
   * 使用如下代码可以获取到二维码中的 scene 字段的值。
   * 调试阶段可以使用开发工具的条件编译自定义参数 scene=xxxx 进行模拟,开发工具模拟时的 scene 的参数值需要进行 urlencode
   * </pre>
   *
   * @param scene     最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,
   *                  其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
   * @param page      必须是已经发布的小程序页面,例如 "pages/index/index" ,如果不填写这个字段,默认跳主页面
   * @param width     默认false 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
   * @param autoColor 默认true 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
   * @param lineColor autoColor 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"}
   * @param isHyaline 是否需要透明底色, is_hyaline 为true时,生成透明底色的小程序码
   * @return 文件内容字节数组
   * @throws WxErrorException 异常
   */
  byte[] createWxaCodeUnlimitBytes(String scene, String page, int width, boolean autoColor,
                                   WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException;

其实在微信的接口B的官方文档里也写的很清楚。

那么我们现在已经弄明白了需要和微信对接什么接口,下面就是怎么写了。

2.具体分析

由于工具类的发展和微信官方的书写,现在这个方法是非常简单。

只需要在controller 层就可以解决问题

    @PostMapping(value="inviteCode",produces = MediaType.IMAGE_JPEG_VALUE)
    public byte[] inviteCode(@RequestParam ("inviteUserId")Long inviteUserId) throws WxErrorException {
        File file=wxMaService.getQrcodeService().createWxaCodeUnlimit(String.valueOf(inviteUserId),"pages/login/login",300,true,null,true);
        return FileUtil.readBytes(file);
    }

要注意接口返回的是buffter,所以需要使用字符数组进行接受。

这其中的wxMaService是在前面自己定义的

private final WxMaService wxMaService;

是我们调用微信接口的前提。

getQrcodeService()

方法是返回对应调用接口的实体类

  /**
   * 返回二维码相关接口方法的实现类对象,以方便调用其各个接口.
   *
   * @return WxMaQrcodeService
   */
  WxMaQrcodeService getQrcodeService();

createWxaCodeUnlimit() 就是我们的接口B了,但是我们接口B有许多的重载方法要选择最合适的一个。我们这里选的是返回字节数组的。

注意: @PostMapping(value="inviteCode",produces = MediaType.IMAGE_JPEG_VALUE)中的produces一定要写,不然的话就会返回的是乱码(字节)。他的功能是确定返回的类型,我们二维码肯定是图片了。

测试结果:

 

 

 

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值