微信小程序分享小程序码的生成(带参数)以及参数的获取
Posted 雪松
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序分享小程序码的生成(带参数)以及参数的获取相关的知识,希望对你有一定的参考价值。
这篇文章主要介绍了微信小程序分享小程序码的生成(带参数)以及参数的获取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
1.小程序码介绍
从微信小程序开发文档上我们可以了解到,目前微信支持两种二维码(左),小程序码和小程序二维码(右)。官方推荐使用小程序码,因为小程序码具有更好的辨识度。
官方提供生成小程序码的两种方式
一种适用于需要的码的数量相对较少的业务场景:接口地址
https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN
access_token是公众号的全局唯一接口调用凭据。
获取access_token方法详见:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183
具体参数见图(0-2)
另一中适用于使用数量极多的场景。接口地址:
https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN
具体参数见图(0-3)
通过scene参数来给页面添加参数
2.前端请求获取小程序码具体实现
因为第二中方法可生成的小程序码极多,所以我们一般会使用这种方法来获取小程序码。
今天主要像大家介绍一下第二种方法。
一般我们主要常用的参数是:scene(如果需要页面参数)、page和width。
page是页面地址,例如:‘pages/index’。pages前面不能有斜杠
scene是参数,为字符串。比如要传入一个用户id=1234,要根据这个用户id来给当前页面返回不同的内容,那么scene参数就可以写成"1234",多个参数按一定规则分开,如&符号,第二个参数是recommendId=123则可以这样写"1234&123"。我们来开一下代码:
Page( data: , getQrcode() wx.request( url: "https://www....com/weixin/get-qrcode",//域名省略 data: page: "pages/index", scene: "1234&123", width: 300 , header: \'content-type\': \'application/x-www-form-urlencoded\' , method: \'POST\', dataType: \'json\', success: function (res) let qrcodeUrl = res.data;//服务器小程序码地址 , fail: function () , complete: options.complete || function () ) )
解析:get-qrcode接口是自己小程序后端的接口,前端调用此接口,传入相应参数,后台通过参数请求小程序接口获取到小程序码存到自己服务上,返回小程序码服务器地址。
3.用户扫码进入后的逻辑
我们可以在onload生命周期中处理参数
onLoad: function(options) if (options.scene) let scene = decodeURIComponent(options.scene);//&是我们定义的参数链接方式 let userId = scene.split("&")[0]; let recommendId = scene.split(\'&\')[1];//其他逻辑处理。。。。。
到此这篇关于微信小程序分享小程序码的生成(带参数)以及参数的获取的文章就介绍到这了
java微信小程序参数二维码生成带背景图加字体(无限生成)
需求 :
1,因为项目需求 ,生成数以万计的二维码
2 ,每个二维码带不同的参数
3,二维码有固定背景图
4 , 往生成图片上写入 字体和编号(动态 )
设计技术 :
1,微信接口token ,nginx 缓存
2,二维码 图片定义 写字
maven
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-jpeg</artifactId>
<version>3.0-rc5</version>
</dependency>
还有rt.jar 在你java安装文件的bin里面
获取token信息
public void GetUrl() throws ClientProtocolException, IOException { HttpGet httpGet = new HttpGet( "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + Configure.getAppID() + "&secret=" + Configure.getSecret() ); HttpClient httpClient = HttpClients.createDefault(); HttpResponse res = httpClient.execute(httpGet); HttpEntity entity = res.getEntity(); String result = EntityUtils.toString(entity, "UTF-8"); JSONObject jsons = JSONObject.fromObject(result); String expires_in = jsons.getString("expires_in"); //缓存 if(Integer.parseInt(expires_in)==7200){ //ok String access_token = jsons.getString("access_token"); Jedis cache = new Jedis("127.0.0.1", 6379); System.out.println("access_token:"+access_token); Pipeline pipeline = cache.pipelined(); pipeline.set("access_token", access_token); pipeline.expire("access_token", 7200); pipeline.sync(); }else{ System.out.println("出错获取token失败!"); } }
获取二维码 信息图片
public String GetPostUrl(String access_token,String id) throws Exception { //String result = HttpRequest.sendPost("http://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+access_token, path); System.out.println(id); String url ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token="; Map<String, Object> map = new HashMap<String, Object>(); map.put("path", "pages/index/index?###="+id);//你二维码中跳向的地址 map.put("width", "430");//图片大小 JSONObject json = JSONObject.fromObject(map); System.out.println(json); String res= HttpClientConnectionManager.httpPostWithJSON(url + access_token, json.toString(),id); System.out.println(res); return null; }
返回图片保存 ,根据 id
public static String httpPostWithJSON(String url, String json,String id) throws Exception { String result = null; DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json"); StringEntity se = new StringEntity(json); se.setContentType("application/json"); se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "UTF-8")); httpPost.setEntity(se); // httpClient.execute(httpPost); HttpResponse response = httpClient.execute(httpPost); if (response != null) { HttpEntity resEntity = response.getEntity(); if (resEntity != null) { InputStream instreams = resEntity.getContent(); String uploadSysUrl = "D://erweima/"; File saveFile = new File(uploadSysUrl+id+".png"); // 判断这个文件(saveFile)是否存在 if (!saveFile.getParentFile().exists()) { // 如果不存在就创建这个文件夹 saveFile.getParentFile().mkdirs(); } saveToImgByInputStream(instreams, uploadSysUrl, id+".png"); } } httpPost.abort(); return result; } /* @param instreams 二进制流 * @param imgPath 图片的保存路径 * @param imgName 图片的名称 * @return * 1:保存正常 * 0:保存失败 */ public static int saveToImgByInputStream(InputStream instreams,String imgPath,String imgName){ int stateInt = 1; if(instreams != null){ try { File file=new File(imgPath+imgName);//可以是任何图片格式.jpg,.png等 FileOutputStream fos=new FileOutputStream(file); byte[] b = new byte[1024]; int nRead = 0; while ((nRead = instreams.read(b)) != -1) { fos.write(b, 0, nRead); } fos.flush(); fos.close(); } catch (Exception e) { stateInt = 0; e.printStackTrace(); } finally { try { instreams.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return stateInt; }
然后是图片重合和增加字体
public void changeImage(String imageurl,String i ){ try { // InputStream imagein = new FileInputStream( // "D:/systemAvatarNew1.png"); // InputStream imagein2 = new FileInputStream( // "D:/qqfile/1852230493/FileRecv/4-02.png"); InputStream imagein = new FileInputStream( "D:/systemAvatarNew1.png"); InputStream imagein2 = new FileInputStream( imageurl); BufferedImage image = ImageIO.read(imagein); BufferedImage image2 = ImageIO.read(imagein2); //image2.getWidth() - 160, image2.getHeight() - 155, Graphics g = image.getGraphics(); g.drawImage(image2, 300, 230, 410,422,null); // g.drawImage(image2, image.getWidth() - image2.getWidth() - 195, // image.getHeight() - image2.getHeight() - 190, // 340,349,null); OutputStream outImage = new FileOutputStream( imageurl); JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(outImage); enc.encode(image); BufferedImage bimg=ImageIO.read(new FileInputStream(imageurl)); //得到Graphics2D 对象 Graphics2D g2d=(Graphics2D)bimg.getGraphics(); //设置颜色和画笔粗细 g2d.setColor(Color.black); g2d.setStroke(new BasicStroke(5)); //String pathString = "D://qqfile/1852230493/FileRecv/SourceHanSansCN-/SourceHanSansCN-Heavy.otf"; // Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, new File(pathString)); g2d.setFont(new Font("微软雅黑", Font.PLAIN, 36)); //g2d.setFont(Loadfont.loadFont(pathString, 45)); //绘制图案或文字 g2d.drawString("编号: "+i, 320, 700); // g2d.drawString(i, 450, 700); ImageIO.write(bimg, "JPG",new FileOutputStream(imageurl)); File fromFile = new File(imageurl); File toFile = new File(imageurl); Image1 Image1 =new Image1(); Image1.resizePng(fromFile, toFile, 1000, 1000, false); imagein.close(); imagein2.close(); outImage.close(); } catch (Exception e) { e.printStackTrace(); } }
接下来再 main方法里面跑一下 就ok ,如果是需要返回前台信息的,就直接记录地址,前台显示就可以了
需要源码的可以加qq1852230493
以上是关于微信小程序分享小程序码的生成(带参数)以及参数的获取的主要内容,如果未能解决你的问题,请参考以下文章
关于.NET HttpClient方式获取微信小程序码(二维码)