1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 微信公众号生成临时二维码

微信公众号生成临时二维码

时间:2019-05-05 03:51:37

相关推荐

微信公众号生成临时二维码

微信公众号生成临时二维码

微信公众平台生成带参数的二维码官方文档

分为三个部分:获取access_token通过ticket换取二维码生成带参数的二维码

特别注意:需要有生成二维码的权限

整个代码带有引入包,能运行。

有个问题

"{\"expire_seconds\": 604800, \"action_name\": \"QR_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": 123}}}"

下面这个地方本来想用bean拼接,然后json转。但是怎么都不好用,将官网例子和自己的比较没有任何区别。但是就是报参数类型不正确。所以直接写死了

直接上代码:

1、常量

public class WechartConst {public static final String GET_TOKEN_URL = "https://api./cgi-bin/token?grant_type=client_credential&appid="+ WechartConst.APPID +"&secret="+ WechartConst.SECRET;//生成带参数的二维码public static final String CREATE_QRCODE_URL = "https://api./cgi-bin/qrcode/create?access_token=TOKEN";//通过ticket换取二维码public static final String SHOW_QRCODE_URL = "https://mp./cgi-bin/showqrcode?ticket=TICKET";public static final String APPID = "xxx";public static final String SECRET = "xxxx";public static final String IMG_NAME = "微信二维码";public static final String SAVE_IMG_ADDR = "C:\\Users\\admin\\Desktop\\";}

2、http请求

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import lombok.extern.slf4j.Slf4j;import .ssl.*;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import .ConnectException;import .URL;import java.security.cert.X509Certificate;@Slf4jpublic class HttpsUtil {/*** 发起https请求并获取结果** @param requestUrl 请求地址* @param requestMethod 请求方式(GET、post)* @param outputStr 提交的数据* @return json字符串*/public static JSONObject request(String requestUrl, String requestMethod, String outputStr) {StringBuffer buffer = new StringBuffer();JSONObject jsonObject ;try {// 创建SSLContext对象,并使用我们制定的信任管理器初始化TrustManager[] tm = { new MyX509TrustManager() };SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");sslContext.init(null, tm, new java.security.SecureRandom());// 从上述SSLContext对象中得到SSLSocketFactory对象SSLSocketFactory ssf = sslContext.getSocketFactory();URL url = new URL(requestUrl);HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();httpUrlConn.setSSLSocketFactory(ssf);httpUrlConn.setDoOutput(true);httpUrlConn.setDoInput(true);httpUrlConn.setUseCaches(false);// 设置请求方式(GET/POST)httpUrlConn.setRequestMethod(requestMethod);if ("GET".equalsIgnoreCase(requestMethod)) {httpUrlConn.connect();}// 当有数据需要提交时if (null != outputStr) {OutputStream outputStream = httpUrlConn.getOutputStream();// 注意编码格式,防止中文乱码outputStream.write(outputStr.getBytes("UTF-8"));outputStream.close();}// 将返回的输入流转换成字符串InputStream inputStream = httpUrlConn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}bufferedReader.close();inputStreamReader.close();// 释放资源inputStream.close();httpUrlConn.disconnect();log.debug("https buffer:" + buffer.toString());} catch (ConnectException ce) {log.error("server connection timed out");} catch (Exception e) {log.error( e.getMessage());}jsonObject = JSON.parseObject(buffer.toString());return jsonObject;}/*** 证书信任管理器(用于https请求)*/static class MyX509TrustManager implements X509TrustManager {@Overridepublic void checkClientTrusted(X509Certificate[] x509Certificates, String s) {}@Overridepublic void checkServerTrusted(X509Certificate[] x509Certificates, String s) {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}}}

3、调用方法

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.his.operation.model.entity.QrCodeParam;import lombok.extern.slf4j.Slf4j;import .ssl.HttpsURLConnection;import java.io.BufferedInputStream;import java.io.File;import java.io.FileOutputStream;import .URL;@Slf4jpublic class TemporaryQRcode {public static String ACCESS_TOKEN = "";public void getAccessToken() {JSONObject jsonObject = HttpsUtil.request(WechartConst.GET_TOKEN_URL, "GET", null);if (null != jsonObject) {String response = jsonObject.toJSONString();if (!jsonObject.containsKey("errcode")) {String accessToken = jsonObject.getString("access_token");System.out.println("获取access_token成功" + response);ACCESS_TOKEN = accessToken;} else {log.error("临时带参二维码ticket失败:" + response);}}}/*** 生成临时二维码** @param expireSeconds 二维码有效时间(单位为秒)* @param sceneId 场景id 临时二维码场景值Id为32位非0整数* @param savePath二维码保存路径* @return*/public String getTempQrcode(int expireSeconds, int sceneId, String savePath) {// 需要提交json数据QrCodeParam qrCodeParam = new QrCodeParam();QrCodeParam.ActionInfo actionInfo = qrCodeParam.new ActionInfo();QrCodeParam.ActionInfo.Scene scene = actionInfo.new Scene();//设置场景值scene.setSceneId(sceneId);actionInfo.setScene(scene);qrCodeParam.setActionInfo(actionInfo);qrCodeParam.setActionName("QR_SCENE");qrCodeParam.setExpireSeconds(expireSeconds);getAccessToken();String ticket = getTicket(JSON.toJSONString(qrCodeParam));//是否保存二维码图片,不保存可直接返回qrCodeUrl//String qrCodeUrl = WechartConst.SHOW_QRCODE_URL.replace("TICKET", ticket);return getQRcode(ticket, savePath);}/*** 获取ticket** @param qrCodeParam* @return*/private String getTicket(String qrCodeParam) {String ticket = null;// 拼接请求地址String requestUrl = WechartConst.CREATE_QRCODE_URL.replace("TOKEN", ACCESS_TOKEN);// 创建临时带参二维码JSONObject jsonObject = HttpsUtil.request(requestUrl, "POST", "{\"expire_seconds\": 604800, \"action_name\": \"QR_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": 123}}}");if (null != jsonObject) {String response = JSON.toJSONString(jsonObject);if (!jsonObject.containsKey("errcode")) {ticket = jsonObject.getString("ticket");System.out.println("临时带参二维码ticket成功" + response);} else {log.error("临时带参二维码ticket失败:" + response);}}return ticket;}/*** 通过ticket换取二维码并保存二维码图片** @param ticket* @param savePath* @return*/private String getQRcode(String ticket, String savePath) {String filepath;String requestUrl = WechartConst.SHOW_QRCODE_URL.replace("TICKET", ticket);try {URL url = new URL(requestUrl);HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();conn.setDoInput(true);conn.setRequestMethod("GET");if (!savePath.endsWith("/")) {savePath += "/";}// 将ticket 作为文件名filepath = savePath + WechartConst.IMG_NAME + ".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();conn.disconnect();System.out.println("根据ticket换取二维码成功");} catch (Exception e) {filepath = null;log.error("根据ticket换取二维码失败" + e.getMessage());}return filepath;}}

4、miain方法

public static void main(String[] args) {TemporaryQRcode temporaryQRcode = new TemporaryQRcode();//前两个参数没用temporaryQRcode.getTempQrcode(0, 0, WechartConst.SAVE_IMG_ADDR);}

总结:

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