자바 위 챗 공식 번호 청소 실현

본 논문 의 사례 는 여러분 에 게 위 챗 공중 번호 스 캔 의 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
순서
위 챗 JS-JDK 문서 설명 에 따 르 면 스 캔 을 실현 하 는 데 다음 과 같은 몇 가지 절차 가 있 습 니 다.
도 메 인 이름 바 인 딩
JS 파일 도입
config 인 터 페 이 스 를 통 해 권한 검증 설정 을 주입 합 니 다ready 인터페이스 처 리 를 통 해 성공 적 으로 검증 되 었 습 니 다
  • error 인터페이스 처리 실패 검증
  • 바 인 딩 도 메 인 이름
    JS 인터페이스 보안 도 메 인 이름 에 도 메 인 이름 을 입력 합 니 다.http 가 져 오지 않도록 주의 하 십시오.그림:

    JS 파일 도입
    
    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
    
    config 인터페이스 주입 권한 검증 설정
    
    $.ajax({
      url: "${pageContext.request.contextPath}/wechat/jsapisign",
      type: "post",
      data: {
       url: location.href.split('#')[0]
      },
      contentType: 'application/x-www-form-urlencoded;charset=utf-8',
      async: true,
      success: function (data) {
       wx.config({
        debug: false,
        appId: data.appid, //   ,        
        timestamp: data.timestamp, //   ,        
        nonceStr: data.nonceStr, //   ,        
        signature: data.signature,//   ,  ,   1
        jsApiList: ["scanQRCode"] //   ,     JS    ,  JS       2
       });
      }
     });
    위 챗 jsapi 검사
    
    public Map<String, String> jsApiSign(String url) {
      Map<String, String> ret = new HashMap<String, String>(16);
      String nonce_str = CheckUtil.create_nonce_str();
      String timestamp = CheckUtil.create_timestamp();
      String string1;
      String signature = "";
    
      String jsapi_ticket = wechatAccessTokenService.getJsApiTicket();
      //             ,     
      string1 = "jsapi_ticket=" + jsapi_ticket +
        "&noncestr=" + nonce_str +
        "&timestamp=" + timestamp +
        "&url=" + url;
      logger.info("jsApiSign===" + string1);
    
      try {
       MessageDigest crypt = MessageDigest.getInstance("SHA-1");
       crypt.reset();
       crypt.update(string1.getBytes("UTF-8"));
       signature = CheckUtil.byteToHex(crypt.digest());
      } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
       e.printStackTrace();
      }
    
      ret.put("appid", appid);
      ret.put("url", url);
      ret.put("jsapi_ticket", jsapi_ticket);
      ret.put("nonceStr", nonce_str);
      ret.put("timestamp", timestamp);
      ret.put("signature", signature);
      logger.info("jsApiSign===url=" + url + "==jsapi_ticket" + jsapi_ticket + "==nonce_str" + nonce_str + "==timestamp" + timestamp + "==signature" + signature);
      return ret;
     }
    
    
    public String getJsApiTicket() {
      AugeWechatAccessToken wechatAccesstoken = augeWechatAccessTokenMapper.selectByPrimaryKey(jsApiTicketId);
      logger.info("getJsApiTicket===" + wechatAccesstoken.getAccessToken());
      if (Strings.isNullOrEmpty(wechatAccesstoken.getAccessToken()) || wechatAccesstoken.getExpiresIn() - 100 * 1000 < System.currentTimeMillis()) {
       //     ,  
       return refreshJsApiTicket();
      } else {
       return wechatAccesstoken.getAccessToken();
      }
     }
    컨트롤 러 계층 코드
    
    @RequestMapping(value = "/jsapisign", method = {RequestMethod.GET, RequestMethod.POST}, produces = MEDIATYPE_CHARSET_JSON_UTF8)
     @ResponseBody
     public String jsApiSign(String url) {
      //    js    
      Map<String, String> signMap = wechatService.jsApiSign(url);
    
      return JSON.toJSONString(signMap);
     }
    
    프론트 JSP 페이지 전체 코드
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
     String path = request.getContextPath();
     String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html lang="zh-CN">
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=320.1,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
    <head>
     <base href="<%=basePath%>" rel="external nofollow" >
     <title>    </title>
     <link rel="stylesheet" href="http://203.195.235.76/jssdk/css/style.css"/>
     <script src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script>
     <script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script>
     <link rel="stylesheet" type="text/css" href="../../../resources/css/bookdetail.css" rel="external nofollow" >
    
    </head>
    
    <body>
    <div class="wrap" style="width: 100% ;height: 100%">
     <img src="../../../resources/images/borrow/return.png" alt="" style="width: 100% ;height: 75%">
     <div style="text-align: center; background-color: #f5f5f5; ">
      <img src="../../../resources/images/borrow/scanReturn.png" alt="" style="width: 40% ;height: 25%;" id="scanQRCode1">
     </div>
    
    </div>
    
    <script type="text/javascript">
     $.ajax({
      url: "${pageContext.request.contextPath}/wechat/jsapisign",
      type: "post",
      data: {
       url: location.href.split('#')[0]
      },
      contentType: 'application/x-www-form-urlencoded;charset=utf-8',
      async: true,
      success: function (data) {
       wx.config({
        debug: false,
        appId: data.appid, //   ,        
        timestamp: data.timestamp, //   ,        
        nonceStr: data.nonceStr, //   ,        
        signature: data.signature,//   ,  ,   1
        jsApiList: ["scanQRCode"] //   ,     JS    
       });
      }
     });
     wx.ready(function () {
      // 9.1.2           
      document.querySelector('#scanQRCode1').onclick = function () {
       wx.scanQRCode({
        needResult: 1,
        desc: 'scanQRCode desc',
        success: function (res) {
         //            Input
         var url = res.resultStr;
         //     , ","   
         if (url.indexOf(",") >= 0) {
          var tempArray = url.split(',');
          var barCode = tempArray[1];
          window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx96668744efc2b2de&redirect_uri=http://cx.ngrok.xiaomiqiu.cn/wechat/toReturnDetail?barCode=" + barCode + "&response_type=code&scope=snsapi_base&state=BINDFACE#wechat_redirect";
    
         } else {
          alert("        !");
         }
        }
       });
      };
     });
     //   jsapi     
     wx.error(function (res) {
      alert("    jsapi     :" + res.errMsg);
     });
    
    </script>
    </body>
    </html>
    
    
    주:개발 중 에 쉽게 발생 하 는 signature 검사 오류 가 있 습 니 다.우 리 는 앞 뒤 url 의 일치 성 을 통 해 판단 할 수 있 습 니 다.그 다음으로 가끔 오 류 는 accessToken 이 새로 고침 되 지 않 았 기 때문에 다시 새로 고침 해 야 합 니 다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기