微信公众号获取带参数二维码
生活随笔
收集整理的這篇文章主要介紹了
微信公众号获取带参数二维码
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
換取微信公眾號二維碼第一步需要去設(shè)置ip白名單 本機電腦的ip地址(既百度輸入ip所得到的地址)
不多說直接上代碼
package com.kosn.base.controller;import com.alibaba.fastjson.JSON; import com.kosn.base.kit.PropKit; import com.kosn.base.model.WechatQRCode; import com.kosn.base.utils.HttpClientUtil; import com.kosn.base.utils.WeixinUtill; import com.wxpay.config.WXPayConfig; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.UnsupportedEncodingException; import java.net.URL;import javax.net.ssl.HttpsURLConnection;import net.sf.json.JSONObject; import org.springframework.web.bind.annotation.ResponseBody;import java.net.URLEncoder; import java.util.Map;@Controller public class QrCodeController {private static final String APPID = "自己的APPID";private static final String SECRET = "自己的SECRET";@RequestMapping("/token")@ResponseBodypublic static String getQR() {String getTokenUrl1 = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+APPID+"&secret="+SECRET; // 微信公眾號tokenString tokenResult = HttpClientUtil.doGet(getTokenUrl1);Map<String, String> tokenResultMap = JSON.parseObject(tokenResult, Map.class);String access_token = tokenResultMap.get("access_token");return access_token;}// 臨時二維碼// sceneid 自定義參數(shù)@RequestMapping("/qrcode")@ResponseBodypublic static String qr(int sceneid) { //獲得token不再說明String assesstoken = getQR();WechatQRCode wechatQRCode = createTemporaryTicket(assesstoken, 900, sceneid);return getRQcode(wechatQRCode.getTicket());}// 永久二維碼// sceneid 自定義參數(shù)@RequestMapping("/foreverqrcode")@ResponseBodypublic static String getForeverQrCode(int sceneid) {String assesstoken = getQR();String ticket = createForeverTicket(assesstoken, sceneid);return getRQcode(ticket);}/*** @param accessToken 接口訪問憑證* @param expireSeconds 二維碼有效時間 單位為秒 最長 1800秒 (30天)* @param sceneId 場景id 臨時二維碼場景值Id為32位非0整數(shù) 永久二維碼的場景值ID取1~10000* 也就是說永久二維碼一共可以創(chuàng)建10000個 臨時的多* @return*/public static WechatQRCode createTemporaryTicket(String accessToken, int expireSeconds, int sceneId) {WechatQRCode wechatQRCode = null;// 拼接請求地址String requestUrl = " https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN";requestUrl = requestUrl.replace("TOKEN", accessToken);// 需要提交json數(shù)據(jù)String jsonmsg = "{\"expire_seconds\":%d,\"action_name\": \"QR_SCENE\",\"action_info\":{\"scene\":{\"scene_id\":%d}}}";// 創(chuàng)建永久帶參二維碼JSONObject jsonObject = WeixinUtill.httpRequest(requestUrl, "POST", String.format(jsonmsg, expireSeconds, sceneId));if (null != jsonObject) {System.out.println(jsonObject);try {wechatQRCode = new WechatQRCode();wechatQRCode.setTicket(jsonObject.getString("ticket"));wechatQRCode.setExpire_seconds(jsonObject.getInt("expire_seconds"));System.out.println("零時帶參二維碼ticket成功=" + wechatQRCode.getTicket() + "Expire_seconds=" + wechatQRCode.getExpire_seconds());} catch (Exception e) {wechatQRCode = null;int err = jsonObject.getInt("errcode");String errormsg = jsonObject.getString("errmsg");}}return wechatQRCode;}/*** 永久二維碼** @param accessToken* @param sceneId 場景iD 1~10000* @return*/public static String createForeverTicket(String accessToken, int sceneId) {String url = null;// 拼接請求地址String requestUrl = " https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN";requestUrl = requestUrl.replace("TOKEN", accessToken);// 需要提交json數(shù)據(jù)String jsonmsg = "{\"action_name\": \"QR_LIMIT_SCENE\",\"action_info\":{\"scene\":{\"scene_id\":%d}}}";// 創(chuàng)建永久帶參二維碼JSONObject jsonObject = WeixinUtill.httpRequest(requestUrl, "POST", String.format(jsonmsg, sceneId));if (null != jsonObject) {try {url = jsonObject.getString("ticket");} catch (Exception e) {int err = jsonObject.getInt("errcode");String errormsg = jsonObject.getString("errmsg");}}String ticke = null;try {ticke = String.format(URLEncoder.encode(url, "UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}return ticke;}public static String getRQcode(String ticket) {String filepath = null;String requestUrl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET";requestUrl = requestUrl.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 + ticket + ".jpg"; // // // 將微信服務(wù)器返回的輸入流寫入文件 // // 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(); // } catch (Exception e) { // filepath = null; // }// return filepath;return requestUrl;}}## 所用到的工具類```java package com.kosn.base.utils;import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.slf4j.LoggerFactory;/*** @author zhangbo* 2019/11*/public class HttpClientUtil {public static String doGet(String uri) {//1:創(chuàng)建一個HttpClient的實例CloseableHttpClient httpclient = HttpClients.createDefault();//2:創(chuàng)建一個get請求實例HttpGet httpGet = new HttpGet(uri);//請求的響應(yīng):CloseableHttpResponse response1 = null;try {//3:使用HttpClient的實例執(zhí)行g(shù)et請求response1 = httpclient.execute(httpGet);//http請求的狀態(tài):404 500 200 // System.out.println(response1.getStatusLine());int statusCode = response1.getStatusLine().getStatusCode();if (statusCode == 200) {//請求成功:HttpEntity entity1 = response1.getEntity();String result = EntityUtils.toString(entity1, "utf-8");return result;} else {//請求失敗:自己做自己的業(yè)務(wù)邏輯System.out.println("請求失敗......:"+statusCode);}} catch (Exception ex) {ex.printStackTrace();}return null;} } ## 要實現(xiàn)的類```java package com.kosn.base.utils;import javax.net.ssl.X509TrustManager; import java.security.cert.CertificateException; import java.security.cert.X509Certificate;public class MyX509TrustManager implements X509TrustManager {@Overridepublic void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {}@Overridepublic void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];} }微信公眾平臺接口類
package com.kosn.base.utils;import java.awt.Menu; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ConnectException; import java.net.URL; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager;import net.sf.json.JSONException; import net.sf.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; //import com.b505.pojo.*; // /*** * * * 公眾平臺通用接口工具類* * @author * ** */ public class WeixinUtill {private static Logger log = LoggerFactory.getLogger(WeixinUtill.class);/*** * * 發(fā)起https請求并獲取結(jié)果 * * * * @param requestUrl 請求地址 * * @param requestMethod 請求方式(GET、POST) * * @param outputStr 提交的數(shù)據(jù) * * @return JSONObject(通過JSONObject.get(key)的方式獲取json對象的屬性值) * */public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) {JSONObject jsonObject = null;StringBuffer buffer = new StringBuffer();try {// 創(chuàng)建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);// 設(shè)置請求方式(GET/POST) httpUrlConn.setRequestMethod(requestMethod);if ("GET".equalsIgnoreCase(requestMethod))httpUrlConn.connect();// 當(dāng)有數(shù)據(jù)需要提交時 if (null != outputStr) {OutputStream outputStream = httpUrlConn.getOutputStream();// 注意編碼格式,防止中文亂碼 outputStream.write(outputStr.getBytes("UTF-8"));outputStream.close();}// 將返回的輸入流轉(zhuǎn)換成字符串 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();inputStream = null;httpUrlConn.disconnect();jsonObject = JSONObject.fromObject(buffer.toString());} catch (ConnectException ce) {log.error("Weixin server connection timed out.");} catch (Exception e) {log.error("https request error:{}", e);}return jsonObject;} }實體類
package com.kosn.base.model;
import java.util.Objects;
public class WechatQRCode {
// 獲取的二維碼
private String ticket;
// 二維碼的有效時間,單位為秒,最大不超過2592000(即30天)
private int expire_seconds;
}
總結(jié)
以上是生活随笔為你收集整理的微信公众号获取带参数二维码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你是汹涌的海浪......
- 下一篇: 团队协作远程办公,有哪些好用的app?