ホームページ > Java > &#&チュートリアル > JAVA WeChat パブリック アカウント開発トークンの検証に失敗した場合はどうすればよいですか?

JAVA WeChat パブリック アカウント開発トークンの検証に失敗した場合はどうすればよいですか?

coldplay.xixi
リリース: 2020-06-13 09:37:46
オリジナル
3881 人が閲覧しました

JAVA WeChat パブリック アカウント開発トークンの検証に失敗した場合はどうすればよいですか?

JAVA WeChat 公開アカウントの開発時に TOKEN 検証が失敗した場合はどうすればよいですか?

JAVA WeChat パブリック アカウント開発のトークン検証エラーの解決策:

WeChat パブリック プラットフォーム サーバーを構成するとき、トークンを導入する必要がありますが、それを送信するときにWeChat バックエンドがコード内の検証トークン コードを検出しなかったため、トークンの検証が失敗したことを示すプロンプトが表示されます。その後、公式ドキュメントに従ってトークンを検証し、検証後に結果を WeChat パブリック プラットフォームに返す必要があります。

検証コードは:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

public class SignUtil {

    

     private static String token = "WnbVm6GTQj4BPmLliSday4K";//这里是自定义的token,需和你提交的token一致

 

     /**

      * 校验签名

      *

      * @param signature

     *            签名

    * @param timestamp

     *            时间戳

     * @param nonce

     *            随机数

    * @return 布尔值

     */

    public static boolean checkSignature(String signature, String timestamp, String nonce) {

        String checktext = null;

        if (null != signature) {

            // 对ToKen,timestamp,nonce 按字典排序

            String[] paramArr = new String[] { token, timestamp, nonce };

            Arrays.sort(paramArr);

            

            try {

              MessageDigest md = MessageDigest.getInstance("SHA-1");

             // 对接后的字符串进行sha1加密

             byte[] digest = md.digest(content.toString().getBytes());

              checktext = byteToStr(digest);

          } catch (NoSuchAlgorithmException e) {

             e.printStackTrace();

          }

    }

      // 将加密后的字符串与signature进行对比

      return checktext != null ? checktext.equals(signature.toUpperCase()) : false;

   }

   /**

    * 将字节数组转化为16进制字符串

   *

     * @param byteArrays

    *            字符数组

   * @return 字符串

    */

  private static String byteToStr(byte[] byteArrays) {

       String str = "";

       for (int i = 0; i < byteArrays.length; i++) {

          str += byteToHexStr(byteArrays[i]);

    }

      return str;

 }

  /**

   * 将字节转化为十六进制字符串

   *

 * @param myByte

    *            字节

* @return 字符串

 */

 private static String byteToHexStr(byte myByte) {

    char[] Digit = { &#39;0&#39;, &#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;, &#39;5&#39;, &#39;6&#39;, &#39;7&#39;, &#39;8&#39;, &#39;9&#39;, &#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;E&#39;, &#39;F&#39; };

       char[] tampArr = new char[2];

    tampArr[0] = Digit[(myByte >>> 4) & 0X0F];

       tampArr[1] = Digit[myByte & 0X0F];

       String str = new String(tampArr);

     return str;

    }

}

ログイン後にコピー

送信時、パブリック プラットフォームはあなたのアドレスを要求し、バックグラウンドで検証したかどうかを確認します。検証部分:

1

2

3

4

5

6

7

8

9

10

11

if (StringUtils.isNotBlank(request.getParameter("signature"))) {

            String signature = request.getParameter("signature");

           String timestamp = request.getParameter("timestamp");

            String nonce = request.getParameter("nonce");

            String echostr = request.getParameter("echostr");

            LOGGER.info("signature[{}], timestamp[{}], nonce[{}], echostr[{}]", signature, timestamp, nonce, echostr);

            if (SignUtil.checkSignature(signature, timestamp, nonce)) {

               LOGGER.info("数据源为微信后台,将echostr[{}]返回!", echostr);

               response.getOutputStream().println(echostr);

            }

        }

ログイン後にコピー

推奨チュートリアル: 「JAVA ビデオ チュートリアル

以上がJAVA WeChat パブリック アカウント開発トークンの検証に失敗した場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート