springboot的微信公众号(十一)生成带参数的二维码

微信公众平台的文档提供生成自定义的二维码参数,将想要的参数封装到二维码中,当用户扫描二维码的时候会通过扫码事件来获取这个参数。

生成的二维码类型分为:永久二维码和临时二维码

它们又分为:字符串参数和int类型的参数

 开发者通过调用生成二维码的参数获取一个ticket,然后通过这个ticket获取二维码图片

我这里是获取到ticket后写一条文本消息,将获取二维码链接发送到微信端,然后点击链接即可获取二维码

效果图如下:

 

官方文档上面的请求:post请求,参数为json字符串

 

 

下面上代码:先获取ticket

if ("5".equals(content)) {
			//生成带参数的二维码,并将二维码的链接发送给用户
			String ticket= WeiXinUtil.cerateCode();//生成票据
			String url = WeiXinUtil.SHOW_CODE.replace("TICKET", ticket);
			MsgUtil.sendTextMsgToUser(url, openId,formUser,response);
		}
/**
	 * 生成带参数的二维码
	 * @return
	 */
	public static String cerateCode() {
		String url  = WeiXinUtil.CREATE_CODE.replace("ACCESS_TOKEN", WeiXinUtil.getAccessToken());
		String code = JSONObject.fromObject(MsgUtil.initStrCode()).toString();
		JSONObject result = HttpUtil.doPoststr(url,code);
		if("ok".equals(result.getString("ticket"))){
			System.out.println("result"+result);
        }
		return result.getString("ticket");
	}

然后就是初始化参数:我这里初始化了四种参数,分别对应上面的四种

/**
	 * 生成临时的以字符串为参数的二维码
	 * @return
	 */
	public static TemporaryCode<?> initStrCode() {
		TemporaryCode<Object> code = new TemporaryCode<>();
		ActionInfo<Object> actionInfo = new ActionInfo<>();
		SceneStr scene = new SceneStr();
		scene.setScene_str("test");
		actionInfo.setScene(scene);
		code.setAction_info(actionInfo);
		code.setAction_name("QR_STR_SCENE");
		code.setExpire_seconds(604800);//过期时间
		return code;
	}
	/**
	 * 生成临时的以数字为参数的二维码
	 * @return
	 */
	public static TemporaryCode<?> initIdCode() {
		TemporaryCode<Object> code = new TemporaryCode<>();
		ActionInfo<Object> actionInfo = new ActionInfo<>();
		SceneId scene = new SceneId();
		scene.setScene_id(123);
		actionInfo.setScene(scene);
		code.setAction_info(actionInfo);
		code.setAction_name("QR_STR_SCENE");
		code.setExpire_seconds(604800);//过期时间
		return code;
	}
	/**
	 * 生成永久二维码 scene_id
	 */
	public static PermanentCode<?> initIdCodePer() {
		PermanentCode<Object> code = new PermanentCode<>();
		ActionInfo<Object> actionInfo = new ActionInfo<>();
		SceneId scene = new SceneId();
		scene.setScene_id(123);
		actionInfo.setScene(scene);
		code.setAction_info(actionInfo);
		code.setAction_name("QR_LIMIT_STR_SCENE");
		return code;
	}
	/**
	 * 生成永久二维码 scene_str
	 * @return
	 */
	public static PermanentCode<?> initStrCodePer() {
		PermanentCode<Object> code = new PermanentCode<>();
		ActionInfo<Object> actionInfo = new ActionInfo<>();
		SceneStr scene = new SceneStr();
		scene.setScene_str("test");
		actionInfo.setScene(scene);
		code.setAction_info(actionInfo);
		code.setAction_name("QR_LIMIT_STR_SCENE");
		return code;
	}

本文中使用的是第一个,临时的二维码,有过期时间的

对应的实体类

 

/**
 * 
 * @author Administrator
 *  永久二维码
 * @param <T>
 */
public class PermanentCode<T> {
	private String action_name;
	private ActionInfo<T> action_info;
	public String getAction_name() {
		return action_name;
	}
	public void setAction_name(String action_name) {
		this.action_name = action_name;
	}
	public ActionInfo<T> getAction_info() {
		return action_info;
	}
	public void setAction_info(ActionInfo<T> action_info) {
		this.action_info = action_info;
	}

	
}
/**
 *   临时二维码
 * @author Administrator
 *
 * @param <T>
 */
public class TemporaryCode<T> {
	private int expire_seconds;
	private String action_name;
	private ActionInfo<T> action_info;
	public int getExpire_seconds() {
		return expire_seconds;
	}
	public void setExpire_seconds(int expire_seconds) {
		this.expire_seconds = expire_seconds;
	}
	public String getAction_name() {
		return action_name;
	}
	public void setAction_name(String action_name) {
		this.action_name = action_name;
	}
	public ActionInfo<T> getAction_info() {
		return action_info;
	}
	public void setAction_info(ActionInfo<T> action_info) {
		this.action_info = action_info;
	}

	
}
public class ActionInfo<T> {
	private  T scene;

	public T getScene() {
		return scene;
	}

	public void setScene(T scene) {
		this.scene = scene;
	}
	
	

}
public class SceneStr {
	private String scene_str;//表示字符串参数

	public String getScene_str() {
		return scene_str;
	}

	public void setScene_str(String scene_str) {
		this.scene_str = scene_str;
	}
	
	
}
public class SceneId {
	private int scene_id;//表示数字参数

	public int getScene_id() {
		return scene_id;
	}

	public void setScene_id(int scene_id) {
		this.scene_id = scene_id;
	}
	
}

在前面的代码中,我们往里面放的参数是字符串test,后面我们进行扫码事件的时候可以验证一下

还有两个接口地址

//生成二维码的接口
	public static final String CREATE_CODE= "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=ACCESS_TOKEN";
	//展示二维码的接口
	public static final String SHOW_CODE= "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET";

到这里生成二维码就结束了

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值