微信公众平台的文档提供生成自定义的二维码参数,将想要的参数封装到二维码中,当用户扫描二维码的时候会通过扫码事件来获取这个参数。
生成的二维码类型分为:永久二维码和临时二维码
它们又分为:字符串参数和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";
到这里生成二维码就结束了