开发好了小程序后,为了方便用户访问,可以把小程序码展示出来让用户扫码访问。本文将介绍如何生成小程序码。包括:“生成二维码的前端代码”、“请求后端接口的代码”、“生成二维码的后端代码”。

1、生成二维码的前端代码。

输入宽度来生成指定大小的二维码:

<div id="codeMain"><div class="layui-form"><input type="text" class="layui-input QRwidth" lay-verify="QRwidth" placeholder="请输入生成二维码图片的宽度"title="请输入生成二维码图片的宽度" /><button class="layui-btn" lay-submit lay-filter="createQRcode"><i class="layui-icon layui-icon-edit"></i>生成二维码</button><a href="" download="商家二维码.jpg" class="downloadQRcode"><i class="layui-icon layui-icon-download-circle"></i>下载二维码</a></div><div class="showQRcode"><div class="theQRcode"><img src=""></div></div></div>

2、请求后端接口的代码。

//数据验证form.on('submit(createQRcode)', function(obj){var indexLoading = layer.load(1);var QRwidth = $(".QRwidth").val();$(".QRwidth").val("");$.ajax({url: generateQRCode_url,type: method_post,data: {             "width": QRwidth},cache: false,async: true,dataType: "json",success: function(data){console.log(data);$('.theQRcode img').attr('src',data.qrCodeUrl ); //图片链接(base64)$('.downloadQRcode').attr('href',data.qrCodeUrl );console.log($('.downloadQRcode').attr('href'))layer.close(indexLoading);},error: function(XMLHttpRequest, textStatus, errorThrown){layer.msg(XMLHttpRequest.status + ":" + XMLHttpRequest.statusText);layer.close(indexLoading);}});return false;});

数据格式检查代码:

//验证前端输入的宽度值form.verify({QRwidth: function(value, item){if(value < 280 || value > 1280){isToSend = true;return "二维码的宽度值必须大于280并且小于1280";}},});$('.downloadQRcode').click(function(){if($('.downloadQRcode').attr('href') == ''){$('.downloadQRcode').attr('download','');layer.msg("尚无二维码可下载");}});

3、生成二维码的后端代码。

检查宽度格式:

if (mpQrCode.getWidth() < 280 || mpQrCode.getWidth() > 1280) {logger.info("小程序码的宽度最小 280px,最大 1280px");params.put(BaseAction.JSON_ERROR_KEY, EnumErrorCode.EC_OtherError);break;}

请求微信accessToken:

WxAccessToken wxAccessToken = WxUtils.getAccessTokenFromWxServer(false, MP_APPID, MP_SECRET, accessTokenUrl);if (wxAccessToken == null || StringUtils.isEmpty(wxAccessToken.getAccessToken())) {logger.info("微信公众号向微信POST请求Token错误!!对应的appid为:" + MP_APPID);params.put(BaseAction.JSON_ERROR_KEY, EnumErrorCode.EC_OtherError);break;}

getAccessTokenFromWxServer方法:

/** 获取微信服务器返回的AccessToken,有效期为两小时,需自己储存。* 在缓存中保存AccessToken的有效期,如果超时,则重新申请一个,并刷新缓存。否则,继续重用上次申请的* 由于测试场使用的公众号正是BX的公众号,测试代码频繁(其实不算太频繁)刷新token,将来可能会令微信服务器禁止这种行为 //... */public static synchronized WxAccessToken getAccessTokenFromWxServer(boolean bDeleteOldToken, String appid, String secret, String url) {if (StringUtils.isEmpty(appid) || StringUtils.isEmpty(secret)) {logger.info("appid or secret is null");return null;}if (bDeleteOldToken) {mapAccessToken.clear();}// 判断缓存中有无AccessToken,如果有,直接返回if (mapAccessToken.containsKey(appid)) {Date expireDatetime = ((WxAccessToken) mapAccessToken.get(appid)).getDate1();if (!DatetimeUtil.isAfterDate(new Date(), expireDatetime, 0)) {return mapAccessToken.get(appid);}}// 缓存中无AccessToken或过期//// 将发送请求的必要信息替换成已注册的开发者的信息String newurl = String.format(url, appid, secret);// 向微信端发送请求,并返回JSON数据JSONObject jsonObject = getDataFromWxServer(newurl);if (jsonObject == null) {logger.info("获取AccessToken失败!!!"); // getDataFromWxServer()已经logger.error,这里不再需要报警return null;} else {Object wxErrCode = jsonObject.get(BaseWxModel.WX_ERRCODE);if (wxErrCode == null) {WxAccessToken accessToken = null;if (mapAccessToken.containsKey(appid)) {accessToken = mapAccessToken.get(appid);} else {accessToken = new WxAccessToken();}accessToken.setAccessToken(jsonObject.getString(WxAccessToken.field.getFIELD_NAME_accessToken()));accessToken.setExpiresin(jsonObject.getInt(WxAccessToken.field.getFIELD_NAME_expiresin()));accessToken.setDate1(DatetimeUtil.getDate(new Date(), accessToken.getExpiresin()));mapAccessToken.put(appid, accessToken);return accessToken;} else {if (BaseAction.ENV != EnumEnv.DEV) {logger.error("请求微信Token发生错误,错误码:" + wxErrCode);}return null;}}}

根据accessToken创建POST请求:

HttpClient httpClient = HttpClientBuilder.create().build();// 创建POST请求HttpPost httpPost = new HttpPost(String.format(wxaCodeUnlimit, wxAccessToken.getAccessToken()));httpPost.setHeader("Accept", "application/json");httpPost.setHeader("Content-Type", "application/json");//StringEntity entity = new StringEntity(json.toString(), "UTF-8");httpPost.setEntity(entity);

执行POST请求:

HttpResponse response = httpClient.execute(httpPost);StatusLine status = response.getStatusLine();int state = status.getStatusCode();logger.info("请求返回:" + state + "(" + wxaCodeUnlimit + ")");if (state != HttpStatus.SC_OK) {logger.info("微信公众号向微信POST请求小程序码错误!!对应的appid为:" + MP_APPID);params.put(BaseAction.JSON_ERROR_KEY, EnumErrorCode.EC_OtherError);break;}

创建文件下和保存微信返回的小程序码,并返回给前端显示:

String path = PATH + "/" + company.getDbName() + "/mp";if (!GeneralUtil.checkDiskSpaceAndCreateFolder(params, path)) {break;}File qrCodePictureDestination = new File(PATH + "/" + company.getDbName() + "/mp/" + company.getDbName() + ".jpg");OutputStream os = new FileOutputStream(qrCodePictureDestination);HttpEntity reEntity = response.getEntity();reEntity.writeTo(os);//StringBuilder filePath = new StringBuilder(qrCodePictureDestination.getPath().replaceAll("\\\\", "/"));for (int i = 0; i < CommoditySyncAction.DIR.length(); i++) {filePath.setCharAt(i, Character.toLowerCase(filePath.charAt(i)));// 确保下面的替换真正替换到东西}String qrCodePictureDir = filePath.toString().replaceAll(CommoditySyncAction.DIR, "/p");params.put("qrCodeUrl", qrCodePictureDir);params.put(BaseAction.JSON_ERROR_KEY, EnumErrorCode.EC_NoError);params.put(KEY_HTMLTable_Parameter_msg, "");//params.put(BaseAction.SP_OUT_PARAM_sErrorMsg, "");

Java实现生成小程序码功能相关推荐

  1. 微信小程序 生成小程序码 + Java后台

    微信小程序 生成小程序码 首先看下效果图: 微信小程序已经上线很久了.现在才开始把代码拷进来 因为真的很忙 ---- 先看代码吧.首先是小程序端的内容: 怕麻烦 全部拷进去吧 这块的需求就是完成分享小 ...

  2. 基于thinkphp6的上传excel批量生成带参数的小程序码功能

    前言 最近公司说要帮人生成一批一店一码的小程序码,本来想找第三方生成一下就好了,奈何数量有点多,满足此需求的只有某料二维码,但某料二维码批量上传生成小程序码需要小程序的管理员授权,因为某些原因,拿不到 ...

  3. dev 命令行参数调用_云开发·云调用生成小程序码

    小程序云开发已经支持云调用,开放了很多接口,一直想要的获取小程序码也支持了.这下轻量的小程序也可以有自定义小程序码的功能. 1. 需求 获得一个带参数的小程序码,传播出去以后,用户扫码进入指定页面,根 ...

  4. uniapp生成小程序码仿商品小程序码跳转到商品详情

    uniapp生成小程序码仿商品小程序码跳转到商品详情 之前在网上找了下没有相关教程去生成小程序商品小程序码微信扫码直接跳转到小程序详情页面,今天我们就用uniapp来实现这个,其实微信小程序端方法大致 ...

  5. php小程序码生成并保存,小程序中如何生成小程序码

    导语: 小程序是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或者搜一下即可打开应用.也体现了"用完即走"的理念,用户不用关心是否 ...

  6. .NET生成小程序码,并合自定义背景图生成推广小程序二维码

    前言: 对于小程序大家可能都非常熟悉了,随着小程序的不断普及越来越多的公司都开始推广使用起来了.今天接到一个需求就是生成小程序码,并且于运营给的推广图片合并在一起做成一张漂亮美观的推广二维码,扫码这种 ...

  7. java获取微信小程序码和小程序二维码

    一.小程序码和小程序二维码简介 首先,奉上微信官方文档:获取小程序码 - https://developers.weixin.qq.com/miniprogram/dev/framework/open ...

  8. 支付宝小程序获取手机号(证书方式解密)及生成小程序码代码示例

    注意:部分功能依赖于第三方支付工具类:ijpay import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference ...

  9. Java:获取微信小程序码

    预览小程序页面 需求 需要在后台配置小程序页面(装修页面),然后在后台预览小程序展示效果 官方文档 获取小程序accessToken 获取小程序码 步骤如下 获取小程序得accessToken 根据a ...

最新文章

  1. 测试工程师良品 —— Fiddler 工具简介
  2. 局部静态变量Static详解
  3. 收藏功能_微软Edge获得了新的收藏夹菜单、PDF功能等
  4. Oracle GoldenGate经典架构
  5. 加载geojson面数据_地理数据可视化
  6. 微信小程序 - 自定义switch切换(示例)
  7. python数据分析实况_Python数据分析实战:降雨量统计分析报告分析
  8. python语音属于什么语言_python到底是什么类型的语言
  9. ajax 最大链接数_[LeetCode] 479. 最大回文数乘积
  10. error parsing xml:unbound prefix
  11. bug6-_SymbolicException: Inputs to eager execution function cannot be Keras symbolic
  12. php 非聚集锁引,sql数据库聚集索引和非聚集索引示例
  13. mseed读取[2]
  14. 机器学习基础--各种学习方式(18)--核方法和多核学习
  15. 关于修复Office图标白色的问题
  16. 学习笔记4--自动驾驶汽车感知系统
  17. 技术部岗位职责——技术总监
  18. 中国自动上弦手表市场趋势报告、技术动态创新及市场预测
  19. 母版页的详细使用介绍
  20. Groovy脚本极限优化

热门文章

  1. Golang知识点七、defer
  2. CCL2022 | 汉语学习者文本纠错评测期待您的参与!
  3. 详解如何在STM32上使用4x4矩阵键盘
  4. 【LOJ#10131】暗的锁链
  5. 函数在某点极限存在,连续,可导三者之间的关系
  6. 代码静态分析工具-splint的学习与使用[转]
  7. python+opencv 实现图像人脸检测及视频中的人脸检测
  8. 树莓派配置mjpg视频流
  9. 浅谈surface go与ipad 2018
  10. 西门子PLC的符号表