Rumah  >  Artikel  >  Java  >  Bagaimana untuk menjana kod matahari applet WeChat di Jawa

Bagaimana untuk menjana kod matahari applet WeChat di Jawa

WBOY
WBOYke hadapan
2023-04-28 09:49:062642semak imbas

    Pelan pelaksanaan

    Kita boleh mencapai penjanaan kod matahari program mini melalui kaedah berikut.

    Bagaimana untuk menjana kod matahari applet WeChat di Jawa

    Jana kod matahari terhad

    Langkah pelaksanaan

    • Dapatkan akses_token program mini

    • Tetapkan laluan dan dengan parameter yang berkaitan

    • Panggil antara muka getwxacodeunlimit dan simpan imej yang dikembalikan secara setempat

    Dapatkan small Program access_token
    public static String getAccessToken(String appid, String appsecret)
        {
            String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+appsecret+"";
            String accessToken = null;
            try
            {
                String response = HttpClientUtil.getInstance().sendHttpsGet(
                        requestUrl, null);
                JSONObject json = JSONObject.parseObject(response);
                accessToken = String.valueOf(json.get("access_token"));
            }
            catch (Exception e)
            {
                logger.error("getAccessToken error", e);
            }
    
            return accessToken;
        }

    Penerangan: Cuma panggil antara muka API WeChat dan masukkan parameter appid dan appecret program mini.

    Panggil WeChat API untuk menjana kod matahari program mini
     public static String generatLimitSunCode(WxScanCodeParam param) throws Exception 
        {
           String token =param.getAccessToken();
           Map<String, String> params = new HashMap<>();
           params.put("path", param.getPath());
           params.put("width", "430");
           CloseableHttpClient httpClient = HttpClientBuilder.create().build();
           HttpPost httpPost = new HttpPost("https://api.weixin.qq.com/wxa/getwxacode?access_token="+token);
           httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json");
           String body = JSON.toJSONString(params);
           StringEntity entity = new StringEntity(body);
           entity.setContentType("image/jpg");
           httpPost.setEntity(entity);
           HttpResponse response = httpClient.execute(httpPost);
           int statusCode = response.getStatusLine().getStatusCode();
           if (statusCode == HttpStatus.SC_OK) 
           {
               HttpEntity entity2 = response.getEntity();
               if(!entity2.getContentType().getValue().equals("image/jpeg"))
               {
                   String result = EntityUtils.toString(entity2, "UTF-8");
                   logger.error("generate sun code error,http execute result:" + result);
                   return null;
               }
           }
           else
           {
               logger.error("generate sun code error,http execute result:" + statusCode);
           }
           
           InputStream inputStream = response.getEntity().getContent();
            // 保存图片到本地     
           int flag = saveImg(inputStream, param.getFilePath(), name);
           if (flag == 0)
           {
               throw new SysException("保存图片[" + name + "]失败");
           }
           else
           {
               logger.info("太阳码[{}]生成成功", name);
           }
           return param.getFilePath() + File.separatorChar + name;
       }
    Arahan
    Penerangan parameter
    • laluan: imbas kod QR ke masukkan laluan halaman program mini, panjang maksimum 128 bait, tidak boleh kosong sebagai contoh: pages/index/index

    • access_token: Token kebenaran program mini

    Nota

    Perhatian khusus diperlukan Jumlah kod matahari program mini dan kod QR yang dijana oleh penyelesaian ini tidak boleh melebihi 100,000 WeChat tidak menyediakan antara muka API yang sepadan untuk menanyakan kuantiti penggunaan. Apabila kuantiti melebihi, Ini akan menyebabkan program mini menjadi tidak sah, dan pada masa ini WeChat tidak boleh menetapkan semula bilangan pertanyaan, yang sesuai untuk senario di mana bilangan yang dijana adalah kecil.

    Jana kod matahari tanpa had

    Dapatkan akses_token program mini

    Sama seperti penyelesaian pertama

    Panggil WeChat api untuk menjana kod matahari program mini
    /**
         * 生成无限制的小程序码
         * @param param
         * @return
         * @throws Exception
         */
        public static String generatUnlimitSunCode(WxScanCodeParam param) throws Exception 
        {
           String token =param.getAccessToken();
           Map<String, String> params = new HashMap<>();
           params.put("scene", param.getScene());
           params.put("page", param.getPath());
           params.put("width", "430");
           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);
           StringEntity entity = new StringEntity(body);
           entity.setContentType("image/jpg");
           httpPost.setEntity(entity);
           HttpResponse response = httpClient.execute(httpPost);
           int statusCode = response.getStatusLine().getStatusCode();
           if (statusCode == HttpStatus.SC_OK) 
           {
               HttpEntity entity2 = response.getEntity();
               if(!entity2.getContentType().getValue().equals("image/jpeg"))
               {
                   String result = EntityUtils.toString(entity2, "UTF-8");
                   logger.error("generate sun code error,http execute result:" + result);
                   return null;
               }
           }
           else
           {
               logger.error("generate sun code error,http execute result:" + statusCode);
           }
           
           InputStream inputStream = response.getEntity().getContent();
           
           //太阳码写标题
           String content=param.getWriteContent();
           if(StringUtil.isNotEmpty(content) && param.isWrite())
           {
              inputStream = ImageUtil.addImageTitle(param.getWriteContent(), inputStream, 450, 450);
           }
          
           String name = param.getFileName()+".jpg";//文件名加后缀,跟上面对应
           
    
           int flag = saveImg(inputStream, param.getFilePath(), name);// 保存图片
           if (flag == 0)
           {
               throw new SysException("保存图片[" + name + "]失败");
           }
           else
           {
               logger.info("太阳码[{}]生成成功", name);
           }
           return param.getFilePath() + File.separatorChar + name;
       }
    Perihalan
    Perihalan parameter
    • adegan: sehingga 32 aksara yang boleh dilihat, format parameter boleh ditakrifkan sendiri a&b atau a=1&b= 2

    • access_token: Token kebenaran program mini

    Parameter adalah masalah terlalu panjang

    Sejak panjang parameter adegan hanya menyokong 32 aksara, jika parameter melebihi 32 bit, bagaimana kita akan mengendalikannya?

    Penyelesaian

    Penyelesaian kepada masalah ialah: reka bentuk jadual parameter atur cara kecil, simpan parameter yang dijana dalam jadual dan jana atur cara kecil dengan menetapkan parameter pemandangan sebagai kunci utama jadual ini, selepas program mini mengimbas kod, ia mula-mula meminta latar belakang untuk mendapatkan parameter khusus program mini melalui parameter pemandangan.

    Contoh di bawah:

    Bagaimana untuk menjana kod matahari applet WeChat di Jawa

    Atas ialah kandungan terperinci Bagaimana untuk menjana kod matahari applet WeChat di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam