当前位置: 首页 > news >正文

wordpress自动生成网站地图手机怎么做微电影网站

wordpress自动生成网站地图,手机怎么做微电影网站,小程序开发公司排行榜前10,郑州app软件开发公司首先我们可以看到官方文档上是有三种码的 获取小程序码 这里特别要注意的是第一种和第三种是有数量限制的#xff0c;所以大家生成的时候记得保存#xff0c;也不要一直瞎生成 还有一点要注意的是第一种和第二种是太阳码 第三种是方形码 好了直接上代码 这里要注意#xff…首先我们可以看到官方文档上是有三种码的 获取小程序码 这里特别要注意的是第一种和第三种是有数量限制的所以大家生成的时候记得保存也不要一直瞎生成 还有一点要注意的是第一种和第二种是太阳码 第三种是方形码 好了直接上代码 这里要注意它请求成功返回的是一个 base64 的图片流但是失败返回的是JSON字符串我这里没有处理请求失败的问题 package com.sakura.user.utils;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.sakura.common.exception.BusinessException; import com.sakura.common.redis.RedisUtil; import com.sakura.common.tool.HttpsRequestUtil; import com.sakura.common.tool.StringUtil; import com.sakura.user.param.GetAppCodeParam; import com.sakura.user.vo.wx.WxAccessTokenVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component;/*** author Sakura* date 2024/8/22 11:04* 微信小程序工具类*/ Component Slf4j public class WxAppUtil {Value(${wx.app.appid})private String appid;Value(${wx.app.secret})private String secret;// 获取授权tokenprivate static final String GET_TOKEN https://api.weixin.qq.com/cgi-bin/token;private static final String WX_APP_ACCESS_TOKEN wx_app_access_token;// 获取小程序码URLprivate static final String GET_APP_CODE_URL https://api.weixin.qq.com/wxa/getwxacode;// 获取不受限制的小程序码private static final String GET_UNLIMITED_APP_CODE_URL https://api.weixin.qq.com/wxa/getwxacodeunlimit;private static final String GET_APP_QR_CODE_URL https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode;Autowiredprivate RedisUtil redisUtil;// 获取授权凭证public String getAccessToken() {// 优先从Redis获取没有再调接口// 如果Redis里面有则直接取Redis里面的if (redisUtil.hasKey(WX_APP_ACCESS_TOKEN)) {log.info(redisUtil.get(WX_APP_ACCESS_TOKEN).toString());return redisUtil.get(WX_APP_ACCESS_TOKEN).toString();}// 拼接请求参数StringBuilder strUrl new StringBuilder();strUrl.append(GET_TOKEN).append(?grant_typeclient_credential).append(appid).append(appid).append(secret).append(secret);try {String resultStr HttpsRequestUtil.sendGetRequest(strUrl.toString());log.info(【微信小程序获取授权凭证】返回结果 resultStr);WxAccessTokenVo wxAccessTokenVo JSON.parseObject(resultStr, WxAccessTokenVo.class);if (StringUtil.isBlank(wxAccessTokenVo.getAccess_token())) {throw new BusinessException(微信小程序获取授权凭证异常);}//官方 access_token expires_in 为 2个小时, 这里设置 100分钟redisUtil.set(WX_APP_ACCESS_TOKEN, wxAccessTokenVo.getAccess_token(), 100 * 60);return wxAccessTokenVo.getAccess_token();} catch (Exception e) {log.info(【微信小程序获取授权凭证】获取异常 e.getMessage());e.printStackTrace();throw new BusinessException(微信小程序获取授权凭证异常);}}// 获取小程序码public byte[] getAppCode(GetAppCodeParam getAppCodeParam) {// 先要获取access_tokenString accessToken getAccessToken();// 拼接请求参数StringBuilder strUrl new StringBuilder();strUrl.append(GET_APP_CODE_URL).append(?access_token).append(accessToken);// 封装请求参数到bodyJSONObject jsonObject new JSONObject();jsonObject.put(path, getAppCodeParam.getPath());if (StringUtil.isNotBlank(getAppCodeParam.getEnvVersion())) {jsonObject.put(env_version, getAppCodeParam.getEnvVersion());}if (getAppCodeParam.getWidth() ! null) {jsonObject.put(width, getAppCodeParam.getWidth());}if (getAppCodeParam.getIsHyaline() ! null) {jsonObject.put(is_hyaline, getAppCodeParam.getIsHyaline());}try {return HttpsRequestUtil.sendPostReturnByte(strUrl.toString(), jsonObject.toJSONString());} catch (Exception e) {log.info(【微信小程序获取小程序码】获取小程序码异常 e.getMessage());e.printStackTrace();throw new BusinessException(微信小程序获取小程序码异常);}}// 获取无限制的小程序码public byte[] getUnlimitedAppCode(GetAppCodeParam getAppCodeParam) {// 先要获取access_tokenString accessToken getAccessToken();// 拼接请求参数StringBuilder strUrl new StringBuilder();strUrl.append(GET_UNLIMITED_APP_CODE_URL).append(?access_token).append(accessToken);// 封装请求参数到bodyJSONObject jsonObject new JSONObject();jsonObject.put(scene, getAppCodeParam.getScene());if (StringUtil.isNotBlank(getAppCodeParam.getPage())) {jsonObject.put(page, getAppCodeParam.getPage());}if (StringUtil.isNotBlank(getAppCodeParam.getEnvVersion())) {jsonObject.put(env_version, getAppCodeParam.getEnvVersion());}if (getAppCodeParam.getWidth() ! null) {jsonObject.put(width, getAppCodeParam.getWidth());}if (getAppCodeParam.getIsHyaline() ! null) {jsonObject.put(is_hyaline, getAppCodeParam.getIsHyaline());}if (getAppCodeParam.getCheckPath() ! null) {jsonObject.put(check_path, getAppCodeParam.getCheckPath());}try {return HttpsRequestUtil.sendPostReturnByte(strUrl.toString(), jsonObject.toJSONString());} catch (Exception e) {log.info(【微信小程序获取不限制小程序码】获取不限制小程序码异常 e.getMessage());e.printStackTrace();throw new BusinessException(微信小程序获取不限制小程序码异常);}}// 获取小程序二维码public byte[] getAppQRCode(GetAppCodeParam getAppCodeParam) {// 先要获取access_tokenString accessToken getAccessToken();// 拼接请求参数StringBuilder strUrl new StringBuilder();strUrl.append(GET_APP_QR_CODE_URL).append(?access_token).append(accessToken);// 封装请求参数到bodyJSONObject jsonObject new JSONObject();jsonObject.put(path, getAppCodeParam.getPath());if (getAppCodeParam.getWidth() ! null) {jsonObject.put(width, getAppCodeParam.getWidth());}try {return HttpsRequestUtil.sendPostReturnByte(strUrl.toString(), jsonObject.toJSONString());} catch (Exception e) {log.info(【微信小程序获取小程序二维码】获取小程序二维码异常 e.getMessage());e.printStackTrace();throw new BusinessException(微信小程序获取小程序二维码异常);}} } http 工具类 import java.io.*; import java.net.HttpURLConnection; import java.net.URL;/*** author Sakura* date 2024/6/24 17:07*/ public class HttpsRequestUtil {public static String sendPostRequest(String urlString, String jsonInputString) throws IOException {URL url new URL(urlString);HttpURLConnection connection (HttpURLConnection) url.openConnection();// 设置请求方法为POSTconnection.setRequestMethod(POST);// 设置请求头connection.setRequestProperty(Content-Type, application/json);connection.setRequestProperty(Accept, application/json);// 启用输出流用于发送请求数据connection.setDoOutput(true);try (OutputStream os connection.getOutputStream()) {byte[] input jsonInputString.getBytes(utf-8);os.write(input, 0, input.length);}// 获取响应try (BufferedReader br new BufferedReader(new InputStreamReader(connection.getInputStream(), utf-8))) {StringBuilder response new StringBuilder();String responseLine;while ((responseLine br.readLine()) ! null) {response.append(responseLine.trim());}return response.toString();} finally {// 关闭连接connection.disconnect();}}public static String sendGetRequest(String urlString) throws IOException {URL url new URL(urlString);HttpURLConnection connection (HttpURLConnection) url.openConnection();// 设置请求方法为GETconnection.setRequestMethod(GET);// 设置请求头connection.setRequestProperty(Accept, application/json);// 获取响应try (BufferedReader br new BufferedReader(new InputStreamReader(connection.getInputStream(), utf-8))) {StringBuilder response new StringBuilder();String responseLine;while ((responseLine br.readLine()) ! null) {response.append(responseLine.trim());}return response.toString();} finally {// 关闭连接connection.disconnect();}}public static byte[] sendPostReturnByte(String urlString, String jsonInputString) throws IOException {URL url new URL(urlString);HttpURLConnection connection (HttpURLConnection) url.openConnection();// 设置请求方法为POSTconnection.setRequestMethod(POST);// 设置请求头connection.setRequestProperty(Content-Type, application/json);connection.setRequestProperty(Accept, application/json);// 启用输出流用于发送请求数据connection.setDoOutput(true);try (OutputStream os connection.getOutputStream()) {byte[] input jsonInputString.getBytes(utf-8);os.write(input, 0, input.length);}// 获取响应try (InputStream is connection.getInputStream()) {ByteArrayOutputStream buffer new ByteArrayOutputStream();int bytesRead;byte[] data new byte[1024];while ((bytesRead is.read(data, 0, data.length)) ! -1) {buffer.write(data, 0, bytesRead);}return buffer.toByteArray();} finally {// 关闭连接connection.disconnect();}}}请求的参数 import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors;import javax.validation.constraints.NotNull; import java.io.Serializable;/*** 获取小程序码参数** author Sakura* since 2024-08-26*/ Data Accessors(chain true) ApiModel(value 获取小程序码参数) public class GetAppCodeParam implements Serializable {private static final long serialVersionUID 1L;ApiModelProperty(类型1小程序码 2不受限制小程序码 3小程序二维码)NotNull(message 小程序码类型不能为空)private Integer type;ApiModelProperty(type为1.3时必传 扫码进入的小程序页面路径)private String path;ApiModelProperty(type为1.2时可传 要打开的小程序版本。正式版为 \release\体验版为 \trial\开发版为 \develop\。默认是正式版。)private String envVersion;ApiModelProperty(二维码宽度 默认430二维码的宽度单位 px最小 280px最大 1280px)private Integer width;ApiModelProperty(type为2时必传 自定义参数最大32个可见字符 如 a1)private String scene;ApiModelProperty(type为2时可传 默认是true检查page 是否存在为 true 时 page 必须是已经发布的小程序存在的页面否则报错为 false 时允许小程序未发布或者 page 不存在 但page 有数量上限60000个请勿滥用。)private Boolean checkPath;ApiModelProperty(type为2时可传 默认是主页页面 page例如 pages/index/index根路径前不要填加 /不能携带参数参数请放在scene字段里如果不填写这个字段默认跳主页面。scancode_time为系统保留参数不允许配置)private String page;ApiModelProperty(type为1.2时可传 默认值false是否需要透明底色为 true 时生成透明底色的小程序码)private Boolean isHyaline;}还有因为返回的是个流所以我们还需要把它转成图片保存起来这里大家可以上传到云存储也可就放在服务器上我这里就是放在服务器上的在本地项目或者服务器 jar 包目录下 “./resources/files/appcode” Overridepublic String getAppCode(GetAppCodeParam getAppCodeParam) throws Exception {// 根据类型获取不同二维码byte[] bytes null;if (getAppCodeParam.getType() 1) {bytes wxAppUtil.getAppCode(getAppCodeParam);} else if (getAppCodeParam.getType() 2) {bytes wxAppUtil.getUnlimitedAppCode(getAppCodeParam);} else if (getAppCodeParam.getType() 3) {bytes wxAppUtil.getAppQRCode(getAppCodeParam);}if (bytes null || bytes.length 1) {throw new BusinessException(获取小程序码失败);}// 目标目录String outputDir ./resources/files/appcode;// 创建目录如果不存在File directory new File(outputDir);if (!directory.exists()) {directory.mkdirs();}// 生成图片文件的完整路径String outputFileName RandomStringUtils.randomAlphanumeric(32);String outputFilePath outputDir / outputFileName .png;// 将字节数组写入到图片文件中try (FileOutputStream fos new FileOutputStream(outputFilePath)) {fos.write(bytes);}return https://sakura.com/api-wx/appCode/download/ outputFileName;}因为图片存在服务器上了我们还需要下载下来 看不懂的可以看下我另一篇讲什么上传下载文件的 Java实现本地文件上传下载接口示例 Overridepublic void download(HttpServletResponse response, String code) throws Exception {File downloadFile new File(./resources/files/appcode/ code .png);if (!downloadFile.exists() || downloadFile.length() 0) {throw new BusinessException(500, 文件不存在);}// 确定文件的Content-TypeString mimeType Files.probeContentType(downloadFile.toPath());if (mimeType null) {mimeType application/octet-stream; // 默认类型}response.setContentType(mimeType);response.addHeader(Content-Length, String.valueOf(downloadFile.length()));response.addHeader(Content-Disposition, attachment; filename\ code .png\);try (InputStream is new FileInputStream(downloadFile);OutputStream os response.getOutputStream()) {IOUtils.copy(is, os);os.flush(); // 确保数据已写入输出流} catch (IOException e) {log.info(下载图片发生IO异常);e.printStackTrace();throw new BusinessException(500, 文件下载失败);} catch (Exception e) {log.info(下载图片发生异常);e.printStackTrace();throw new BusinessException(500, 文件下载失败);}}最后小程序获取 AccessToken 是需要添加白名单的然后第二种码在小程序没发布的时候 check_path 一定要传 false默认是 true 会报错的
http://www.dnsts.com.cn/news/170905.html

相关文章:

  • 浙江建设继续教育网站首页设计网站收费
  • 婚纱摄影行业网站公司名称可以变更吗
  • 苏州网站建设推广建筑工程承包合同
  • 关于文明网站建设存在的问题抖音seo排名系统公司
  • 晋江市住房和城乡建设网站wordpress 文字框
  • 长沙网页设计公司一个网站可以优化多少关键词
  • 石家庄网站制作找谁龙岩seo包年系统排行榜
  • 省建设厅网站安全生产标准化l礼品文化网站建设
  • 官方网站车联网是谁做免费ppt模板下载第一ppt
  • 番禺建设网站集团智能建造就业方向及前景
  • 织梦可以做家教网站吗济南网站建设公司-远大云.
  • 广州智能模板建站营销策略都有哪些4p
  • 湘潭网站建设优等磐石网络在线商城建设
  • html门户网站模板青岛建网站需要花多少钱
  • 衡水网站建设地方丰联汽配网站建设成本
  • 电话投放小网站网上购物app
  • seo技术快速网站排名私人浏览器
  • 涪陵建设工程信息网站南昌网站seo厂家
  • 做期货与做网站的关系软件开发项目经理
  • 深圳设计网站推荐建筑行业平台
  • 仿站网站源码下载网站转移权重
  • 温州网站建设服务器官方网站手机 优帮云
  • 网站名称怎么收录福建住房与城乡建设部网站
  • 做简历的网站都有哪些我想弄个网站
  • 做网站需要多少钱 百度搭建一个电商网站需要多少费用
  • 枣庄联通网站备案共享办公室租赁平台
  • 北京网站开发团队wordpress主题怎么该轮播
  • 苏州网站建设建站网小程序营销策略
  • 网站 备案网站网页制作排行榜
  • 石家庄网站优化排名推广天津业之峰装饰公司怎么样