最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中生成微信小程序太陽(yáng)碼的實(shí)現(xiàn)方案

 更新時(shí)間:2022年05月31日 16:21:28   作者:劍圣無(wú)痕  
這篇文章主要介紹了Java中生成微信小程序太陽(yáng)碼的實(shí)現(xiàn)方案,本文講解了如何生成微信小程序太陽(yáng)碼,通過(guò)微信提供的兩種方案都可以實(shí)現(xiàn),在實(shí)際的項(xiàng)目中建議采用第二種方案,需要的朋友可以參考下

背景

當(dāng)前小程序盛行的時(shí)代,無(wú)論走在那里都會(huì)看到各種各樣的小程序太陽(yáng)碼,小程序項(xiàng)目中經(jīng)常也會(huì)用到小程序的太陽(yáng)碼,那么我們?nèi)绾紊尚〕绦虻奶?yáng)碼呢?

實(shí)現(xiàn)方案

我們可以通過(guò)如下的方法實(shí)現(xiàn)小程序太陽(yáng)碼生成。

生成有限制太陽(yáng)碼

實(shí)現(xiàn)步驟

  • 獲取小程序的access_token
  • 設(shè)置path、with相關(guān)參數(shù)
  • 調(diào)用getwxacodeunlimit接口,并將返回圖片存儲(chǔ)到本地

獲取小程序的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;
    }

說(shuō)明:調(diào)用微信API接口傳入小程序的appid和appsecret參數(shù)即可。

調(diào)用微信api生成小程序太陽(yáng)碼

 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("太陽(yáng)碼[{}]生成成功", name);
       }
       return param.getFilePath() + File.separatorChar + name;
   }

說(shuō)明

參數(shù)說(shuō)明

  • path:掃碼進(jìn)入的小程序頁(yè)面路徑,最大長(zhǎng)度 128 字節(jié),不能為空;例如:pages/index/index
  • access_token:小程序授權(quán)token

注意事項(xiàng)

需要特殊注意,本方案生成的小程序太陽(yáng)碼與二維碼的總數(shù)不能超過(guò)10萬(wàn)個(gè),微信沒(méi)有提供對(duì)應(yīng)的Api接口查詢(xún)的使用的數(shù)量,一旦超過(guò)了數(shù)量,將會(huì)導(dǎo)致小程序失效,且微信目前無(wú)法重置查詢(xún)次數(shù),適合于生成數(shù)量少的場(chǎng)景。

生成無(wú)限制太陽(yáng)碼

獲取小程序的access_token

如同第一種的方案

調(diào)用微信api生成小程序太陽(yáng)碼

/**
     * 生成無(wú)限制的小程序碼
     * @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();
       
       //太陽(yáng)碼寫(xiě)標(biāo)題
       String content=param.getWriteContent();
       if(StringUtil.isNotEmpty(content) && param.isWrite())
       {
          inputStream = ImageUtil.addImageTitle(param.getWriteContent(), inputStream, 450, 450);
       }
      
       String name = param.getFileName()+".jpg";//文件名加后綴,跟上面對(duì)應(yīng)
       

       int flag = saveImg(inputStream, param.getFilePath(), name);// 保存圖片
       if (flag == 0)
       {
           throw new SysException("保存圖片[" + name + "]失敗");
       }
       else
       {
           logger.info("太陽(yáng)碼[{}]生成成功", name);
       }
       return param.getFilePath() + File.separatorChar + name;
   }

說(shuō)明

參數(shù)說(shuō)明

  • scene:最大32個(gè)可見(jiàn)字符,參數(shù)格式可以自行定義a&b或者a=1&b=2都行
  • access_token:小程序授權(quán)token

參數(shù)過(guò)長(zhǎng)問(wèn)題

由于scene參數(shù)的長(zhǎng)度只支持32位字符,如果參數(shù)超過(guò)了32位,我們將如何合處理?

解決方案

改問(wèn)題的解決方案為:設(shè)計(jì)一張小程序參數(shù)表,將生成的參數(shù)存儲(chǔ)到表中,生成小程序是scene參數(shù)設(shè)置此表表的主鍵,小程序掃碼后,先請(qǐng)求后臺(tái)通過(guò)scene參數(shù)獲取小程序的具體參數(shù)。

如下示例:

擴(kuò)展功能

  • 如何給生成的小程序添加標(biāo)題或者水印等
  • 如何生成待小程序碼的海報(bào)

關(guān)于這些功能的實(shí)現(xiàn),如果有需要的可以隨時(shí)與我聯(lián)系。

總結(jié)

本文講解了如何生成微信小程序太陽(yáng)碼,通過(guò)微信提供的兩種方案都可以實(shí)現(xiàn),在實(shí)際的項(xiàng)目中建議采用第二種方案。

到此這篇關(guān)于Java中生成微信小程序太陽(yáng)碼的實(shí)現(xiàn)方案的文章就介紹到這了,更多相關(guān)小程序太陽(yáng)碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot Test 多線(xiàn)程報(bào)錯(cuò)的根本原因(dataSource already closed)

    SpringBoot Test 多線(xiàn)程報(bào)錯(cuò)的根本原因(dataSource already

    在使用Springboot test進(jìn)行相關(guān)測(cè)試的時(shí)候,發(fā)現(xiàn)開(kāi)啟線(xiàn)程操作數(shù)據(jù)庫(kù)的時(shí)候異常,這篇文章主要介紹了SpringBoot Test 多線(xiàn)程報(bào)錯(cuò):dataSource already closed的根本原因及解決方法,需要的朋友可以參考下
    2022-06-06
  • spring boot容器啟動(dòng)流程

    spring boot容器啟動(dòng)流程

    spring cloud是基于spring boot快速搭建的,今天咱們就看看spring boot容器啟動(dòng)流程,需要的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-01-01
  • Java經(jīng)典面試題匯總--多線(xiàn)程

    Java經(jīng)典面試題匯總--多線(xiàn)程

    本篇總結(jié)的是Java多線(xiàn)程相關(guān)的面試題,后續(xù)會(huì)持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實(shí)習(xí)生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯(cuò)誤還望大家多多包涵,不吝賜教,謝謝
    2021-06-06
  • JavaWeb基礎(chǔ)教程之Java基礎(chǔ)加強(qiáng)版

    JavaWeb基礎(chǔ)教程之Java基礎(chǔ)加強(qiáng)版

    這篇文章主要介紹了JavaWeb基礎(chǔ)教程之Java基礎(chǔ)加強(qiáng)版的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • java單向鏈表的實(shí)現(xiàn)實(shí)例

    java單向鏈表的實(shí)現(xiàn)實(shí)例

    java單向鏈表的實(shí)現(xiàn)實(shí)例。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-10-10
  • Java使用join方法暫停當(dāng)前線(xiàn)程

    Java使用join方法暫停當(dāng)前線(xiàn)程

    這篇文章主要為大家詳細(xì)介紹了Java使用join方法暫停當(dāng)前線(xiàn)程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 一文教你如何使用原生的Feign

    一文教你如何使用原生的Feign

    Feign使得 Java HTTP 客戶(hù)端編寫(xiě)更方便,Feign 靈感來(lái)源于Retrofit、JAXRS-2.0和WebSocket,這篇文章主要給大家介紹了如何使用原生的Feign的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Java實(shí)現(xiàn)大數(shù)運(yùn)算的實(shí)例代碼

    Java實(shí)現(xiàn)大數(shù)運(yùn)算的實(shí)例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)大數(shù)運(yùn)算的實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • JMeter參數(shù)化4種實(shí)現(xiàn)方式(小結(jié))

    JMeter參數(shù)化4種實(shí)現(xiàn)方式(小結(jié))

    參數(shù)化是自動(dòng)化測(cè)試腳本的一種常用技巧,可將腳本中的某些輸入使用參數(shù)來(lái)代替,JMeter提供了多種參數(shù)化方式,下面就其中常用的4種展開(kāi)闡述,感興趣的可以來(lái)了解一下
    2021-12-12
  • 簡(jiǎn)單工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    簡(jiǎn)單工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了簡(jiǎn)單工廠模式的相關(guān)資料,和大家一起學(xué)習(xí)靜態(tài)工廠方法模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評(píng)論

兴化市| 涞水县| 大丰市| 宜城市| 大埔区| 闽侯县| 梧州市| 湛江市| 中江县| 大竹县| 石台县| 澄江县| 昆山市| 柳江县| 马鞍山市| 清远市| 祥云县| 五台县| 务川| 峨眉山市| 虞城县| 中卫市| 晋江市| 阳新县| 岑溪市| 大邑县| 定结县| 井研县| 都江堰市| 类乌齐县| 江孜县| 华坪县| 慈利县| 布尔津县| 开平市| 福建省| 河间市| 肥东县| 马边| 乌拉特中旗| 郁南县|