java获取微信小程序二维码

java获取微信小程序二维码

近期正好遇到了,随手记录下

首先获取微信小程序二维码需要小程序的appid 以及secret

然后根据appid和secret去获取小程序的token 即 access_token

获取token发送给微信的路径"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appId+"&secret="+secret;

//获取微信token
    private String getAccessToken() throws Exception {
        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appId+"&secret="+secret;
        //SysUtil是自己封装的HttpUtils工具类方法 
        JSONObject get = SysUtil.getCmHttpReqRes(url, "GET", null, null);

        if (get.getString("access_token") == null) ExceptionUtil.throwException("获取AccessToken失败:" + get.getString("errmsg"));

        return get.getString("access_token");

    }

然后根据token 获取二维码图片
获取二维码的方式和获取token大同小异 路径都是写死的"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + access_token

int width = 430;
        Boolean auto_color = false;
        Map<String,Object> lineColor = new HashMap<>();
        lineColor.put("r",0);
        lineColor.put("g",0);
        lineColor.put("b",0);
        Boolean is_hyaline = false;

        Map<String,Object> data = new HashMap<>();
        data.put("scene",scene);//这里是写入二维码的参数,扫描二维码能获取到的
        data.put("page",page);//扫二维码进入的小程序路径   不给默认进入首页
        data.put("width",width); //二维码的宽度
        data.put("auto_color",auto_color);  //auth_color 为 false 时生效,使用 rgb 设置颜色 
											//例如 {"r":"xxx","g":"xxx","b":"xxx"},十进制表示

        data.put("is_hyaline",is_hyaline); //二维码是否需要透明底色, is_hyaline 为true时,生成透明底色的小程序码
        //路径也是固定的"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="
        String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;
		//这里有个坑,需要用HttpResponse获取,不然会有问题
        HttpResponse httpResponse = HttpUtils.doPost(url, new JSONObject(data));
		//拿到httpResponse后,在获取里面的图片
        InputStream content = httpResponse.getEntity().getContent();  
		//二维码的图片处理见  Java图片处理笔记

HttpUtils工具类需要自取

public class HttpUtils {

    private static ObjectMapper objectMapper = new ObjectMapper();

    public static HttpResponse doPost(String url, JSONObject jsonData) {
        // 指定Post请求
        HttpPost httpPost = new HttpPost(url);
        // 创建httpclient
        HttpClient httpClient = new DefaultHttpClient();
        // 发送请求
        HttpResponse httpResponse;
        // 返回的json
        JSONObject jsonObject = null;
        // 封装post请求数据
        StringEntity entity = new StringEntity(jsonData.toString(), "utf-8");
        httpPost.setEntity(entity);
        try {
            // 发送请求
            httpResponse = httpClient.execute(httpPost);
            // 判断请求是否成功
            if(httpResponse.getStatusLine().getStatusCode()== HttpStatus.SC_OK){
                // 得到请求响应信息
//                String str = EntityUtils.toString(httpResponse.getEntity(), "utf-8");
                // 返回json
//                jsonObject = new JSONObject(Boolean.parseBoolean(str));
                return httpResponse;
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java生成微信小程序带参数二维码的完整代: ```java import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import org.apache.commons.codec.binary.Base64; import org.json.JSONObject; public class WxMaQrcodeUtils { private static final String API_URL = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode"; private static final String PARAM_PAGE = "page"; private static final String PARAM_SCENE = "scene"; private static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token"; /** * 获取access_token * * @param appid 小程序appid * @param secret 小程序secret * @return access_token */ public static String getAccessToken(String appid, String secret) { String accessToken = null; try { String url = ACCESS_TOKEN_URL + "?grant_type=client_credential&appid=" + appid + "&secret=" + secret; URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("GET"); int responseCode = con.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { InputStream inputStream = con.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder stringBuilder = new StringBuilder(); String line; while ((line = bufferedReader.readLine()) != null) { stringBuilder.append(line); } bufferedReader.close(); JSONObject jsonObject = new JSONObject(stringBuilder.toString()); accessToken = jsonObject.getString("access_token"); } } catch (Exception e) { e.printStackTrace(); } return accessToken; } /** * 生成小程序带参数二维码 * * @param accessToken 小程序access_token * @param page 小程序页面路径 * @param scene 小程序页面参数 * @return base64格式的二维码图片数据 */ public static String createQrcode(String accessToken, String page, String scene) { String base64Image = null; try { Map<String, Object> params = new HashMap<>(); params.put(PARAM_PAGE, page); params.put(PARAM_SCENE, scene); URL obj = new URL(API_URL + "?access_token=" + accessToken); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("POST"); con.setRequestProperty("Content-Type", "application/json"); con.setDoOutput(true); con.getOutputStream().write(new JSONObject(params).toString().getBytes("UTF-8")); int responseCode = con.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { InputStream inputStream = con.getInputStream(); byte[] imageBytes = new byte[inputStream.available()]; inputStream.read(imageBytes); inputStream.close(); base64Image = Base64.encodeBase64String(imageBytes); } } catch (Exception e) { e.printStackTrace(); } return base64Image; } public static void main(String[] args) { String appid = "your_appid"; String secret = "your_secret"; String accessToken = getAccessToken(appid, secret); String page = "pages/index/index"; String scene = "key=value"; String base64Image = createQrcode(accessToken, page, URLEncoder.encode(scene)); System.out.println(base64Image); } } ``` 注意,需要引入Apache Commons Codec库。 其中,getAccessToken方法用于获取小程序的access_token,createQrcode方法用于生成小程序带参数二维码并返回base64格式的图片数据。在main方法中调用以上两个方法即可生成小程序二维码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值