>Java >java지도 시간 >Java로 WeChat 애플릿 Sun 코드를 생성하는 방법

Java로 WeChat 애플릿 Sun 코드를 생성하는 방법

WBOY
WBOY앞으로
2023-04-28 09:49:062679검색

    구현 계획

    다음 방법을 통해 미니 프로그램 썬코드 생성을 구현할 수 있습니다.

    Java로 WeChat 애플릿 Sun 코드를 생성하는 방법

    제한된 sun 코드 생성

    구현 단계

    • 애플릿의 access_token 가져오기

    • 경로 및 관련 매개변수 설정

    • getwxacodeunlimit 인터페이스를 호출하고 반환된 이미지를 로컬에 저장

    미니 프로그램의 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;
        }

    지침: WeChat API 인터페이스를 호출하고 미니 프로그램의 appid 및 appsecret 매개변수를 전달하세요.

    WeChat API를 호출하여 미니 프로그램 썬 코드
     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;
       }
    Instructions
    매개변수 설명
    • path: 코드를 스캔하여 입력한 미니 프로그램 페이지의 경로, 최대 길이는 128바이트이며, 변경할 수 없습니다. 예: 페이지/색인/색인

    • access_token: 미니 프로그램 인증 토큰

    Notes

    이 솔루션에서 생성된 미니 프로그램 Sun 코드 및 QR 코드의 총 개수는 100,000을 초과할 수 없습니다. WeChat은 해당 API 인터페이스 쿼리를 제공하지 않습니다. 사용된 수량이 수량을 초과하면 미니 프로그램이 무효화되고 WeChat은 현재 쿼리 수를 재설정할 수 없습니다. 이는 생성된 쿼리 수가 적은 시나리오에 적합합니다.

    무제한 썬 코드 생성

    미니 프로그램의 access_token 가져오기

    첫 번째 솔루션과 동일

    WeChat API를 호출하여 미니 프로그램 썬 코드 생성
    /**
         * 生成无限制的小程序码
         * @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;
       }
    지침
    매개변수 설명
    • 장면: 최대 32 보이는 문자 및 매개변수 형식은 직접 정의할 수 있습니다. a&b 또는 a=1&b=2

    • access_token: 미니 프로그램 인증 토큰

    너무 긴 매개변수의 문제

    장면 매개변수의 길이는 32개만 지원하므로 문자, 매개변수가 32비트를 초과하는 경우 어떻게 처리합니까?

    해결책

    문제에 대한 해결책은: 작은 프로그램 매개변수 테이블을 설계하고, 생성된 매개변수를 테이블에 저장하고, 작은 프로그램 스캔 후 장면 매개변수를 이 테이블의 기본 키로 설정하여 작은 프로그램을 생성하는 것입니다. 코드, 먼저 장면 매개변수를 통해 미니 프로그램의 특정 매개변수를 얻기 위해 배경을 요청합니다.

    아래 예:

    Java로 WeChat 애플릿 Sun 코드를 생성하는 방법

    위 내용은 Java로 WeChat 애플릿 Sun 코드를 생성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제