1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 微信公众号怎么生成带参数的二维码?

微信公众号怎么生成带参数的二维码?

时间:2022-06-27 02:43:36

相关推荐

微信公众号怎么生成带参数的二维码?

每位运营过微信公众平台的野生小编都知道,微信提供给开发者的文档是很高深的,最近为了弄个带参数的二维码,同样技术小白的小编也死了不少脑细胞了,然而我终于知道官方生成带参数的二维码的方法了。

1、注意事项我知道你们是没有心情看注意事项的,但是很重要,所以我先摆上来。用户扫描带参数的二维码,可能推送以下两种事件:

1)如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。

2)如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。是的,是把参数返回给开发者,也就是你自己,不是给用户推送特定信息或跳转到页面。(我也想要那种用户扫描关注后跳到指定页面的高级功能,也有一些微信号实现了,但是穷人家没有技术人员没有第三方平台的,我暂时不知道怎么做。憋问,让我研究了以后再分享给大家!)

2、找入口

好了现在正式来制作我们带参数的二维码吧。首先登录你的微信公众号,点击左下角【接口权限】,然后找到“生成带参数的二维码”,点击进入,这样我们就到了微信开发者文档的相关地方了。

兑换二维码

如果上面的步骤都没有错误,这个时候以后就会返回一段ticket代码。复制“ticket”:后面双引号的那段代码,重新回到微信开发者文档,见下图红框内的链接点击进去,然后就会打开一个空白网页,然后把你复制的代码替代打开的网址链接后面的TICKET就可以了,见下图2的网址后面红色遮挡部分。这时就获得一个带参数的二维码图片啦,可以自行下载。

https://mp./cgi-bin/showqrcode?ticket=

拿到token后根据官方文档选择所需要的二维码,是否是永久,来传入需要的参数

获取到ticket后直接在任意浏览器请求

附java代码实现获取ticket

package cn.xxs.wexingongzhonghao;import com.alibaba.fastjson.JSONObject;import com.google.gson.Gson;import org.junit.Test;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.util.HashMap;import java.util.Map;import java.util.TreeMap;public class CreateQRcode {private final static Logger log = LoggerFactory.getLogger(CreateQRcode.class);// 临时二维码private final static String QRSCENE = "QR_SCENE";// 临时二维码private final static String QRSCENESTR = "QR_STR_SCENE";// 永久二维码private final static String QR_LIMIT_SCENE = "QR_LIMIT_SCENE";// 永久二维码(字符串)private final static String QR_LIMIT_STR_SCENE = "QR_LIMIT_STR_SCENE";// 创建二维码private String create_ticket_path = "https://api./cgi-bin/qrcode/create";// 通过ticket换取二维码private String showqrcode_path = "https://mp./cgi-bin/showqrcode";/*** 创建临时带参数二维码 -- 数字* 获取临时带参二维码ticket** @param accessToken* @expireSeconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。* @param sceneId 场景Id* @return*/public String createTempTicket(String accessToken, String expireSeconds, int sceneId) {Map<String, Integer> intMap = new HashMap<>();intMap.put("scene_id", sceneId);Map<String, Map<String, Integer>> mapMap = new HashMap<>();mapMap.put("scene", intMap);Map<String, Object> paramsMap = new HashMap<>();paramsMap.put("expire_seconds", expireSeconds);paramsMap.put("action_name", QRSCENE);paramsMap.put("action_info", mapMap);String jsonObject = JSONObject.toJSONString(paramsMap);String requestUrl = "https://api./cgi-bin/qrcode/create?access_token="+accessToken;net.sf.json.JSONObject result = WeiXinUtil.doPostStr(requestUrl, jsonObject);log.info(result.get("ticket").toString());return result.get("ticket").toString();}/*** 创建临时带参数二维码 -- String* 获取临时带参二维码ticket** @param accessToken* @expireSeconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。* @param str 场景string* @return*/public String createTempStrTicket(String accessToken, String expireSeconds, String str) {Map<String, String> intMap = new HashMap<>();intMap.put("scene_str", str);Map<String, Map<String, String>> mapMap = new HashMap<>();mapMap.put("scene", intMap);Map<String, Object> paramsMap = new HashMap<>();paramsMap.put("expire_seconds", expireSeconds);paramsMap.put("action_name", QRSCENESTR);paramsMap.put("action_info", mapMap);String jsonObject = JSONObject.toJSONString(paramsMap);String requestUrl = "https://api./cgi-bin/qrcode/create?access_token="+accessToken;net.sf.json.JSONObject result = WeiXinUtil.doPostStr(requestUrl, jsonObject);log.info(result.get("ticket").toString());return result.get("ticket").toString();}@Test//测试方法public void test(){createTempTicket("23_ASxxxxxxxxxxxxxxxxxxxxdmzSwAp2JHc59OIpYjuumDasBmTTAKQjxgtrouLTnTuoiryTmrXXxQLJt90cp5NoyfqjFQGYHEc_kmxATHM-wX4AYYgbz_0wHlFGt8JolC93ROZNeAJAITH","604800",100);createTempStrTicket("23_ASVQxxxxxxxxxxxxxxxxxxxxjgZveNdmzSwAp2JHc59OIpYjuumDasBmTTAKQjxgtrouLTnTuoiryTmrXXxQLJt90cp5NoyfqjFQGYHEc_kmxATHM-wX4AYYgbz_0wHlFGt8JolC93ROZNeAJAITH","604800","李四王五");createForeverTicket("23_ASVQdixxxxxxxxxxxxxxxxxxxxveNdmzSwAp2JHc59OIpYjuumDasBmTTAKQjxgtrouLTnTuoiryTmrXXxQLJt90cp5NoyfqjFQGYHEc_kmxATHM-wX4AYYgbz_0wHlFGt8JolC93ROZNeAJAITH",100);String ticket= createForeverStrTicket("23_ASVQxxxxxxxxxxxxxxxxxxxxjgZveNdmzSwAp2JHc59OIpYjuumDasBmTTAKQjxgtrouLTnTuoiryTmrXXxQLJt90cp5NoyfqjFQGYHEc_kmxATHM-wX4AYYgbz_0wHlFGt8JolC93ROZNeAJAITH","张三");getRQcode(ticket,"D:/QR_code");//将二维码生成在D:/QR_code目录下}/*** 创建永久二维码(数字)** @param accessToken* @param sceneId* 场景Id* @return*/public String createForeverTicket(String accessToken, int sceneId) {Map<String, Integer> intMap = new HashMap<>();intMap.put("scene_id", sceneId);Map<String, Map<String, Integer>> mapMap = new HashMap<>();mapMap.put("scene", intMap);Map<String, Object> paramsMap = new HashMap<>();paramsMap.put("action_name", QR_LIMIT_SCENE);paramsMap.put("action_info", mapMap);String jsonObject = JSONObject.toJSONString(paramsMap);String requestUrl = "https://api./cgi-bin/qrcode/create?access_token="+accessToken;net.sf.json.JSONObject result = WeiXinUtil.doPostStr(requestUrl, jsonObject);log.info(result.get("ticket").toString());return result.get("ticket").toString();}/*** 创建永久二维码(字符串)** @param accessToken* @param sceneStr* 场景str* @return*/public String createForeverStrTicket(String accessToken, String sceneStr) {Map<String, String> intMap = new HashMap<>();intMap.put("scene_str", sceneStr);Map<String, Map<String, String>> mapMap = new HashMap<>();mapMap.put("scene", intMap);Map<String, Object> paramsMap = new HashMap<>();paramsMap.put("action_name", QR_LIMIT_STR_SCENE);paramsMap.put("action_info", mapMap);String jsonObject = JSONObject.toJSONString(paramsMap);String requestUrl = "https://api./cgi-bin/qrcode/create?access_token="+accessToken;net.sf.json.JSONObject result = WeiXinUtil.doPostStr(requestUrl, jsonObject);log.info(result.get("ticket").toString());return result.get("ticket").toString();}/*** 二维码ticket,然后凭借ticket到指定URL换取二维码 -----创建带参数的二维码* @param ticket 二维码ticket* @param savepath二维码保存路径* @return*/public static String getRQcode(String ticket, String savepath){String filepath = null;String requestUrl = "https://mp./cgi-bin/showqrcode?ticket=TICKET";try {requestUrl = requestUrl.replace("TICKET", URLDecoder.decode(ticket,"UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}try{URL url = new URL(requestUrl);HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();conn.setDoInput(true);conn.setRequestMethod("GET");if (!savepath.endsWith("/")){savepath += "/";}// 将ticket 作为文件名filepath = savepath + ticket + ".jpg";// 将微信服务器返回的输入流写入文件BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());FileOutputStream fos = new FileOutputStream(new File(filepath));byte[] buf = new byte[8096];int size = 0;while ((size = bis.read(buf)) != -1)fos.write(buf, 0, size);fos.close();bis.close();System.out.println(conn);conn.disconnect();System.out.println("根据ticket换取二维码成功");} catch (Exception e){filepath = null;System.out.println("根据ticket换取二维码失败" + e);}return filepath;}}

WeiXinUtil消息请求发送工具类

import net.sf.json.JSONObject;import org.apache.http.HttpEntity;import org.apache.http.HttpRequest;import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;import org.junit.Test;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class WeiXinUtil {/*** get请求* @param url* @return*/public static JSONObject doGetStr(String url){DefaultHttpClient httpClient = new DefaultHttpClient();HttpGet httpGet = new HttpGet(url);JSONObject jsonObject = null;try {HttpResponse response =httpClient.execute(httpGet);HttpEntity entity =response.getEntity();if(entity != null){String result = EntityUtils.toString(entity,"UTF-8");jsonObject = JSONObject.fromObject(result);}} catch (IOException e) {e.printStackTrace();}return jsonObject;}/*** post请求* @param url* @param outUrl* @return*/public static JSONObject doPostStr(String url,String outUrl){DefaultHttpClient httpClient = new DefaultHttpClient();HttpPost httpPost = new HttpPost(url);JSONObject jsonObject = null;try {httpPost.setEntity(new StringEntity(outUrl,"UTF-8"));HttpResponse response = httpClient.execute(httpPost);String result = EntityUtils.toString(response.getEntity(),"UTF-8");jsonObject = JSONObject.fromObject(result);} catch (IOException e) {e.printStackTrace();}return jsonObject;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。