ホームページ  >  記事  >  Java  >  Java で WeChat アプレットの Sun コードを生成する方法

Java で WeChat アプレットの Sun コードを生成する方法

WBOY
WBOY転載
2023-04-28 09:49:062601ブラウズ

    実装計画

    ミニプログラムのサンコード生成は以下の方法で実現できます。

    Java で WeChat アプレットの Sun コードを生成する方法

    #制限付き Sun コードの生成

    #実装手順

    ##ミニ プログラムの access_token を取得する
    • パスと関連パラメータを設定します
    • getwxacodeunlimit インターフェイスを呼び出し、返されたイメージをローカルに保存します
    • 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;
          }
    説明: WeChat API インターフェイスを呼び出し、ミニ プログラムの appid パラメーターと appsecret パラメーターを渡すだけです。
    WeChat API を呼び出してミニ プログラムの Sun コードを生成します

     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;
       }

    Description
    パラメータの説明
    パス: QR コードをスキャンして、ミニ プログラムのページ パスを入力します。最大長は 128 バイトで、空にすることはできません。例:pages/index/index
    • access_token: ミニ プログラム認証トークン
    #特別な注意が必要です。このソリューションによって生成されるミニプログラムのサン コードと QR コードの総数は 100,000 を超えることはできません。WeChat には、使用状況を照会するための対応する API インターフェイスが提供されていません。数量を超えると、ミニ プログラムが無効になり、現在 WeChat はクエリの数をリセットできません。これは、生成されるクエリの数が少ないシナリオに適しています。
    無制限の sun コードを生成する

    ミニ プログラムの access_token を取得する

    最初のソリューションと同じ
    WeChat API を呼び出してミニ プログラムの sun コードを生成する

    /**
         * 生成无限制的小程序码
         * @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;
       }

    Description
    パラメータの説明
    scene: 表示可能な最大 32 文字、パラメータ形式は自分で定義できます a&b または a=1&b= 2
    • access_token: ミニプログラム認証トークン
    • パラメータが長すぎる問題
    シーンパラメータの長さのため32 文字のみをサポートします。パラメータが 32 ビットを超える場合、どのように処理しますか?
    解決策

    この問題の解決策は、小さなプログラム パラメータ テーブルを設計し、生成されたパラメータをテーブルに格納し、シーン パラメータを主キーとして設定して小さなプログラムを生成することです。このテーブルでは、ミニ プログラムがコードをスキャンした後、まずバックグラウンドにリクエストして、シーン パラメーターを通じてミニ プログラムの特定のパラメーターを取得します。
    #以下の例:

    #

    以上がJava で WeChat アプレットの Sun コードを生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。