获取小程序太阳码,小程序如何生成太阳码
目录
背景实现方案生成有限制太阳码实现步骤获取小程序的访问令牌调用微信美国石油学会(美国石油协会)生成小程序太阳码说明参数说明注意事项获取小程序的访问令牌调用微信美国石油学会(美国石油协会)生成小程序太阳码说明参数说明参数过长问题解决方案生成无限制太阳码扩展功能总结
背景
当前小程序盛行的时代,无论走在那里都会看到各种各样的小程序太阳码,小程序项目中经常也会用到小程序的太阳码,那么我们如何生成小程序的太阳码呢?
实现方案
我们可以通过如下的方法实现小程序太阳码生成。
生成有限制太阳码
实现步骤
获取小程序的访问令牌设置路径、使用相关参数调用getwxacodeunlimit接口,并将返回图片存储到本地
获取小程序的access_token
公共静态字符串getAccessToken(String appid,String app secret){ String request URL=https://api.weixin.qq.com/cgi-bin/token?grant _ type=client _ credential appid= appid secret= app secret ;字符串accessToken=null请尝试{ String response=http客户端tutil。getinstance().sendHttpsGet(requestUrl,null);JSON对象JSON=JSON对象。解析对象(响应);访问令牌=字符串。(JSON的值。get( access _ token );} catch(异常e){ logger。error( getaccessstoken error ,e);}返回accessToken}说明:调用微信应用程序接口接口传入小程序的应用编号和密钥参数即可。
调用微信api生成小程序太阳码
公共静态字符串generalimitsuncode(WxScanCodeParam param)抛出异常{ String token=param。getaccesstoken();MapString,String params=new HashMap();params.put(path ,param。getpath());params.put(width , 430 );可关闭的http客户端http客户端=http客户端生成器。创建().build();http post http post=new http post( https://API。微信。QQ。com/wxa/getwxacode?access _ token= token);addHeader(HTTP .CONTENT_TYPE, application/JSON );字符串体=JSON。tojsonstring(params);string entity entity=新的字符串实体(body);实体。设置内容类型(“image/jpg”);httpPost.setEntity(实体);HttpResponse响应=http客户端。执行(http post);int状态码=响应。getstatusline().getStatusCode();if (statusCode==HttpStatus .SC_OK) {
HttpEntity entity2 = response.getEntity(); if(!entity2.getContentType().getValue().equals("image/jpeg")) { String result = EntityUtils.toString(entity2, "UTF-8"); logger.error("generate sun code error,http execute result:" + result); return null; } } else { logger.error("generate sun code error,http execute result:" + statusCode); } InputStream inputStream = response.getEntity().getContent(); // 保存图片到本地 int flag = saveImg(inputStream, param.getFilePath(), name); if (flag == 0) { throw new SysException("保存图片[" + name + "]失败"); } else { logger.info("太阳码[{}]生成成功", name); } return param.getFilePath() + File.separatorChar + name; }
说明
参数说明
path:扫码进入的小程序页面路径,最大长度 128 字节,不能为空;例如:pages/index/indexaccess_token:小程序授权token
注意事项
需要特殊注意,本方案生成的小程序太阳码与二维码的总数不能超过10万个,微信没有提供对应的Api接口查询的使用的数量,一旦超过了数量,将会导致小程序失效,且微信目前无法重置查询次数,适合于生成数量少的场景。
生成无限制太阳码
获取小程序的access_token
如同第一种的方案
调用微信api生成小程序太阳码
/** * 生成无限制的小程序码 * @param param * @return * @throws Exception */ public static String generatUnlimitSunCode(WxScanCodeParam param) throws Exception { String token =param.getAccessToken(); Map<String, String> params = new HashMap<>(); params.put("scene", param.getScene()); params.put("page", param.getPath()); params.put("width", "430"); CloseableHttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+token); httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json"); String body = JSON.toJSONString(params); StringEntity entity = new StringEntity(body); entity.setContentType("image/jpg"); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) { HttpEntity entity2 = response.getEntity(); if(!entity2.getContentType().getValue().equals("image/jpeg")) { String result = EntityUtils.toString(entity2, "UTF-8"); logger.error("generate sun code error,http execute result:" + result); return null; } } else { logger.error("generate sun code error,http execute result:" + statusCode); } InputStream inputStream = response.getEntity().getContent(); //太阳码写标题 String content=param.getWriteContent(); if(StringUtil.isNotEmpty(content) && param.isWrite()) { inputStream = ImageUtil.addImageTitle(param.getWriteContent(), inputStream, 450, 450); } String name = param.getFileName()+".jpg";//文件名加后缀,跟上面对应 int flag = saveImg(inputStream, param.getFilePath(), name);// 保存图片 if (flag == 0) { throw new SysException("保存图片[" + name + "]失败"); } else { logger.info("太阳码[{}]生成成功", name); } return param.getFilePath() + File.separatorChar + name; }
说明
参数说明
scene:最大32个可见字符,参数格式可以自行定义a&b或者a=1&b=2都行access_token:小程序授权token
参数过长问题
由于scene参数的长度只支持32位字符,如果参数超过了32位,我们将如何合处理?
解决方案
改问题的解决方案为:设计一张小程序参数表,将生成的参数存储到表中,生成小程序是scene参数设置此表表的主键,小程序扫码后,先请求后台通过scene参数获取小程序的具体参数。
如下示例:
扩展功能
如何给生成的小程序添加标题或者水印等如何生成待小程序码的海报关于这些功能的实现,如果有需要的可以随时与我联系。
总结
本文讲解了如何生成微信小程序太阳码,通过微信提供的两种方案都可以实现,在实际的项目中建议采用第二种方案。
到此这篇关于Java中生成微信小程序太阳码的实现方案的文章就介绍到这了,更多相关小程序太阳码内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。