【Java】微信小程序二维码(后台,附获取accessToken)

这篇具有很好参考价值的文章主要介绍了【Java】微信小程序二维码(后台,附获取accessToken)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

        调用方式

        主要的请求参数

        工具类

        二维码转图片

        获取accessToken

        HTTPS 调用:

        请求参数

        代码

        实现类


调用方式

POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN

主要的请求参数

属性

类型

必填

说明

access_token

string

接口调用凭证

scene

string

最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~

page

string

默认是主页,例如 pages/index/index,根路径前不要填加 /,不能携带参数

env_version

string

要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。

is_hyaline

bool

默认是false,是否需要透明底色,为 true 时,生成透明底色的小程序

工具类

二维码转图片

import java.io.*;

public class WxaQrCodeUtil {
    /**
     * 二维码保存到本地
     * @param bytes
     * @param path 保存到本地的路径
     */
    public static void saveQrCodeToLocal(byte[] bytes, String path) {
        try {
            InputStream inputStream = new ByteArrayInputStream(bytes);
            //文件夹不存在则自动创建
            File tempFile = new File(path);
            if (!tempFile.getParentFile().exists()) {
                tempFile.getParentFile().mkdirs();
            }
            FileOutputStream out = new FileOutputStream(path);
            byte[] buffer = new byte[8192];
            int bytesRead = 0;
            while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {
                out.write(buffer, 0, bytesRead);
            }
            out.flush();
            inputStream.close();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 

获取accessToken

HTTPS 调用:

GET https://api.weixin.qq.com/cgi-bin/token

请求参数

属性

类型

必填

说明

grant_type

string

填写 client_credential

appid

string

小程序唯一凭证,可在「微信公众平台 - 设置 - 开发设置」页中获得。

secret

string

小程序唯一凭证密钥,即 AppSecret,获取方式同 appid

代码

private static final Map<String, Object> objects = new HashMap<>();
 

public JSONObject getToken(){
    JSONObject accessTokenRes = new JSONObject();
    String accessToken = null;
    try {
        String token_url = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", APPID, SECRET);
        HttpResponse execute = HttpRequest.get(token_url).execute();
        String responseBody = execute.body();
        if (responseBody == null) {
            logger.info(messageUtil.getMessage("msg.get.token.fail"));
            return null;
        }
        JSONObject token = JSON.parseObject(responseBody);
        accessToken = token.getString("access_token");
        if (StringUtils.isEmpty(accessToken)) {
            logger.info(messageUtil.getMessage("msg.get.token.fail"));
            return null;
        }
        accessTokenRes.put("access_token",accessToken);
        accessTokenRes.put("date_time",new Date().getTime());
    } catch (Exception e) {
        logger.error(messageUtil.getMessage("msg.get.token.fail"));
        logger.error(e.getMessage());
    }
   return accessTokenRes;
}

access_token 的有效期目前为 2 个小时,需定时刷新。

实现类

@ApiOperation(value = "生成二维码", httpMethod = "GET")
@RequestMapping(value = "/api/qrcode", method = RequestMethod.GET)
@Transactional
public WxaQrCodeUrlResponse getQrCode(HttpServletRequest request) throws Exception {
    WxaQrCodeUrlResponse res = new WxaQrCodeUrlResponse();
    
    Date now = new Date();
    // 获取accessToken
    String accessToken = null;
    if(null != objects.get("date_time")){
        accessToken = String.valueOf(objects.get("access_token"));
    }
    Long date = 0L;
    if(null != objects.get("date_time")) {
        date = Long.valueOf(String.valueOf(objects.get("date_time")));
    }
    if(null == accessToken || now.getTime()-date >= 2*60*60*1000){
        JSONObject accessTokenRes = getToken();
        objects.put("access_token",accessTokenRes.get("access_token"));
        objects.put("date_time",now.getTime());
        accessToken = String.valueOf(objects.get("access_token"));
    }

    if (StringUtils.isEmpty(accessToken)) {
        res.setMessage("获取token失败");
        res.setCode(Constants.SC_MSG);
        return res;
    }

    String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;

    // 请求参数
    Map<String,Object> body = new HashMap<>();
    body.put("scene", "自定义参数");
    body.put("env_version", "release");
    // 默认是false,是否需要透明底色,为 true 时,生成透明底色的小程序
    body.put("is_hyaline", false);

    byte[] bytes = HttpClientUtils.getWechatQrcodeByHttpClient(url, body);
    String fileName = "wxqrcode.png";
    String path = "文件夹路径" + File.separator + fileName;
    WxaCodeUtil.saveQrCodeToLocal(bytes, path);

    // TODO 图片处理,返回图片

    // 删除本地文件
    new File(path).delete();

    res.setCode(Constants.SC_OK);
    return res;
}

实际遇到的问题:采用透明底色生成的二维码,在微信中按压图片,不能识别小程序文章来源地址https://www.toymoban.com/news/detail-761822.html

到了这里,关于【Java】微信小程序二维码(后台,附获取accessToken)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序后台:解决微信扫普通链接地址无法跳转到体验版微信的问题,配置普通链接二维码规则解释和理解

    一、现象与原因 最近突然发现微信管理平台中,设置好的普通二维码连接跳转到体验版小程序的功能,没有区分体验版和生产版,全部到生产环境的小程序了。 这现象,跟我以前理解的可不一样,可能会出生产的事故,马上仔细研究了研究。 研究发现,“扫普通链接二维码

    2024年02月15日
    浏览(67)
  • Java集成微信小程序生成二维码传回前端,提供下载按钮

    然后就大功告成了!!!!!

    2024年03月24日
    浏览(47)
  • Java生成微信小程序二维码,5种实现方式,一个比一个简单

    先介绍一下 项目场景 ,主要是通过微信小程序二维码 裂变分享 ,每个账号有专属邀请二维码,分享出去,有新人扫码入驻,就可以得到现金奖励或红包奖励。当然,产品设计会更丰富,不止有裂变模式,还有渠道推广模式,还有各种奖励规则,但核心实现都是生成二维码。

    2024年02月03日
    浏览(57)
  • 微信小程序怎样生成体验版二维码?微信小程序怎么转化为二维码?

    方法:在微信开发者工具界面,右上角,点击上传,如果提示成功,说明已经上传成功。     网址: 微信公众平台 微信公众平台,给个人、企业和组织提供业务服务与用户管理能力的全新服务平台。 https://mp.weixin.qq.com/ 在微信公众号平台登录,选择需要生成二维码的小程序

    2024年02月10日
    浏览(83)
  • 如何生成微信小程序二维码,小程序内页二维码

    你自己得有个微信公众号,只需要知道小程序的名字就可以了 生成小程序二维码 第一步编辑素材 第二步搜索小程序名字,然后回车,下一步 第三步选小程序码 小程序内页二维码 第一步编辑素材 第二步搜索小程序名字,然后回车,下一步 第三步点击‘获取更多路径’ 第四

    2024年02月15日
    浏览(51)
  • 小程序获取企业微信二维码,使用联系我插件配置企业微信二维码

    通过配置获取企业微信二维码总共分为五步: 第一步:登录企业微信管理后台,查询企业微信的企业ID(corpid)和Secret(corpsecret); 第二步:获取access_token; 第三步:通过员工ID配置生成config_id(即企业微信联系我plugid); 第四步:通过config_id获取企业已配置的「联系我」方式;

    2024年02月09日
    浏览(46)
  • 【微信小程序二维码配置】微信公众平台配置二维码,小程序测试二维码,小程序动态二维码,然后扫码打开对应页面进行操作

    微信公众平台地址:微信公众平台 选择 开发管理 – 开发设置 – 扫普通链接二维码打开小程序 配置项 二维码规则: URL 为内含下载校验文件的服务器 URL , 可以加二级,比如我的 https://*** /preview , 二级随便写什么都可以 测试链接(选填): 匹配二维码规则地址,后加 *** 参数, 因

    2024年01月19日
    浏览(70)
  • 微信小程序显示二维码

    在请求接口的success下面写入这段代码。 在他的上一个请求数据的打他下面创建一个空的用于存放数据的东西比如obj:\\\" \\\"用于存放数据。 将它放到一个一个点击事件中,通过触发点击事件执行代码 如果窒息看代码的话const tupian 这个变量让他等有一张网络图片。 这段代码是使

    2024年02月11日
    浏览(56)
  • 微信小程序 — 生成二维码功能

    微信小程序实现生成二维码功能。需要用到canvas组件,设置 type为2d.  需要使用js包 weapp-qrcode-canvas-2d https://github.com/DoctorWei/weapp-qrcode-canvas-2d weapp-qrcode-canvas-2d 是使用新版canvas-2d接口在微信小程序中生成二维码(外部二维码)的js包。canvas 2d 接口支持同层渲染且性能更佳,可大

    2024年02月09日
    浏览(60)
  • 微信小程序之生成二维码

     var context = wx.createCanvasContext(\\\'mycanvas\\\'); // 获取画布 CanvasContext.fillText string text 在画布上输出的文本 number x 绘制文本的左上角 x 坐标位置 number y 绘制文本的左上角 y 坐标位置 number maxWidth 需要绘制的最大宽度,可选 CanvasContext.drawImage string imageResource 所要绘制的图片资源(网络

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包