代码目的:

  • 扫码进入小程序特定界面;
  • 把自己的业务参数放入二维码当中;

步骤:

1、获取微信连接token:

  • 在生成二维码之前,要先获取到api的授权接口;
  • 地址为:“https://api.weixin.qq.com/cgi-bin/token”;
  • token的有效时间为2小时;
// 网页授权接口
    private final static String GetAccessTokenUrl =
            "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET";
 /**
     * 获取二维码生成的token
     * @param appid   小程序appid
     * @param appsecret    小程序密钥
     * @return
     */
    private static String getAccessToken(String appid, String appsecret) {
        String requestUrl = GetAccessTokenUrl.replace("APPID", appid).replace("SECRET", appsecret);
        HttpClient client = null;
        String accessToken = null;
        try {
            client = new DefaultHttpClient();
            HttpGet httpget = new HttpGet(requestUrl);
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            String response = client.execute(httpget, responseHandler);
            JSONObject OpenidJSONO = JSON.parseObject(response);
            accessToken = String.valueOf(OpenidJSONO.get("access_token"));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            client.getConnectionManager().shutdown();
        }
        return accessToken;
    }

2、发起请求,生成二维码:

  • 获取二维码地址:https://api.weixin.qq.com/wxa/getwxacodeunlimit
 /**
     *  获取二维码
     * @param token  授权令牌
     * @param scene 业务参数值,不得超过32个字符
     * @return
     */
    public File createQRCode(String token, String scene){
        //调用上面方法获取token,建议accessToken进行缓存
        Map<String, Object> params = new HashMap<>();
        params.put("scene", scene);
        params.put("path", "/pages/goods-detall/index"); //扫码后进入小程序的页面位置
        params.put("width", 280);//不是必须,需要的宽度,默认430x430,最小280最大1280
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        HttpPost httpPost = new HttpPost("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+token);
        httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json");
        String body = JSON.toJSONString(params);//必须是json模式的 post
        StringEntity entity = null;
        String resultPath = null;
        try {
            entity = new StringEntity(body);
            entity.setContentType("image/png");
            httpPost.setEntity(entity);
            HttpResponse response;
            response = httpClient.execute(httpPost);
            InputStream inputStream = response.getEntity().getContent();
            //文件起个名字
            Date date=new Date();
            Long timestamp=date.getTime();
            String rqName = timestamp.toString()+".jgp";
            File rqFile= new File(rqName);
            return rqFile;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }