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

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

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

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

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

2、找入口

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

如果上面的步骤都没有错误,这个时候以后就会返回一段ticket代码。复制“ticket”:后面双引号的那段代码,重新回到微信开发者文档,见下图红框内的链接点击进去,然后就会打开一个空白网页,然后把你复制的代码替代打开的网址链接后面的TICKET就可以了,见下图2的网址后面红色遮挡部分。这时就获得一个带参数的二维码图片啦,可以自行下载。
https://mp.weixin.qq.com/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.weixin.qq.com/cgi-bin/qrcode/create";
    // 通过ticket换取二维码
    private String showqrcode_path = "https://mp.weixin.qq.com/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.weixin.qq.com/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.weixin.qq.com/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.weixin.qq.com/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.weixin.qq.com/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.weixin.qq.com/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;
    }

}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值