1. 程式人生 > >Java實現微信開發--"接入"

Java實現微信開發--"接入"

Java實現微信開發–”接入”

  • 使用Java開發語言,進行微信”接入”,有如下要求:
  • 1、有一定Java基礎
  • 2、對微信公眾號有一定了解
  • 3、瞭解測試號、訂閱號、公眾號區別
  • 4、本文只是進行簡單”接入”教程(公眾號以開發模式接入程式碼),往後會推出基於接入後其他開發,如:微信支付、微信模版訊息傳送等等,記得關注小編喲

1、微信介紹

1.1、微信公眾管理平臺

  • 當你申請”訂閱號”、”公眾號”成功後,會有一個對應的帳號登入公眾號管理平臺
  • 所有配置均在公眾號管理平臺中進行配置

1.2、微信測試號

  • 測試,顧名思義就是提供了微信的所有許可權,供開發者進行開發測試所用
  • 每一個人都可以在
    微信測試平臺
    中進行掃碼登入,登入後即可使用測試帳號

1.3、官方接入開發文件

  • 不少人通過檢視官方接入指南後還是一臉懵逼,那麼先看看官網開發文件是如何介紹的吧。
  • 第一步:填寫伺服器配置(填寫配置?寫什麼?)
  • 第二步:驗證訊息的確來自微信伺服器(如何驗證?)
  • 第三步:依據介面文件實現業務邏輯(what?)
  • 下面就進行程式碼編寫,並且一一解答。

2、程式碼編寫

2.1、WeChatCheckUtil(第二步:驗證訊息的確來自微信伺服器)

  • 建立WeChatCheckUtil類,建立這個類是幹什麼的呢?
  • 用於驗證,驗證訊息的確來自微信伺服器,一個類就搞定”驗證”?
  • 當然不是

    ,這是用於簽名驗證,何為簽名驗證?為什麼要使用簽名驗證?

    當一個使用者向公眾號傳送訊息,訊息先到達微信伺服器,微信伺服器只是知道某人向某個公眾號傳送了訊息,但是微信伺服器並不知道該如何回覆這段訊息,這個時候微信伺服器將根據”接入”配置去找指定邏輯處理程式碼,看看程式碼中對這段訊息是怎麼處理的,但是微信伺服器如何確認找到的”邏輯處理程式碼”對不對呢?就是根據這個”簽名驗證”來確認。

  • 注意 private static String token =”test_token”;中的token值,需要配置Token

package com.weixin.util.wechat;

import
org.apache.commons.lang.StringUtils; import java.security.MessageDigest; import java.util.Arrays; /** * 微信核心接入簽名校驗 */ public class WeChatCheckUtil { private static String token ="test_token"; /** * 微信核心簽名校驗 * * @param signature 微信伺服器傳入"簽名" * @param timestamp 微信伺服器傳入"時間戳" * @param nonce 微信伺服器傳入"隨機數" * @return true:校驗通過,false:校驗失敗 */ public static boolean checkSignature(String signature, String timestamp, String nonce) { if (StringUtils.isBlank(token) || StringUtils.isBlank(signature) || StringUtils.isBlank(timestamp) || StringUtils.isBlank(nonce)) { return false; } String[] arr = new String[]{token, timestamp, nonce}; // 按字典序排序 Arrays.sort(arr); // 將三個引數字串拼接成一個字串 StringBuffer sb = new StringBuffer(); for (int i = 0; i < arr.length; i++) { sb.append(arr[i]); } String str = sb.toString(); // 進行sha1加密 String temp = getSha1(str); //校驗是否和微信平臺傳入的簽名一致 return temp.equals(signature); } /** * sha1加密 * * @param str 需要加密的字串 * @return 加密成功:加密成功後的字串,加密失敗:null */ public static String getSha1(String str) { if (null == str || 0 == str.length()) { return null; } char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; try { MessageDigest mdTemp = MessageDigest.getInstance("SHA1"); mdTemp.update(str.getBytes("UTF-8")); byte[] md = mdTemp.digest(); int j = md.length; char[] buf = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; buf[k++] = hexDigits[byte0 >>> 4 & 0xf]; buf[k++] = hexDigits[byte0 & 0xf]; } return new String(buf); } catch (Exception e) { return null; } } }

2.2、WeChatController(第二步:驗證訊息的確來自微信伺服器)

  • 注意程式碼註解@GetMapping(“WeiXin”),這個就是配置URL
  • 此類中詳細將”接入”程式碼詳細展示出,如何實現邏輯處理並沒有展示出來,想學習更多,可以在文章評論留言或者直接關注私信小編,小編會及時傳送一份Demo供你學習,當然也歡迎大家討論學習
package com.weixin.controller;

import com.weixin.service.wechat.WeChatCoreService;
import com.weixin.util.wechat.WeChatCheckUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

/**
 * @author LPh
 * <p>
 * 微信核心接入類
 */
@RestController
@Slf4j
public class WeChatController {

   @Autowired
   private WeChatCoreService weChatCoreService;


   /**
    * 微信核心接入
    *
    * @param signature 簽名
    * @param timestamp 時間戳
    * @param nonce     隨機數
    * @param echostr   隨機字串
    * @return 接入成功:enchostr,接入失敗:""
    */
   @GetMapping("WeiXin")
   public String wxCoreAccess(@RequestParam(name = "signature", required = false) String signature,
                              @RequestParam(name = "timestamp", required = false) String timestamp,
                              @RequestParam(name = "nonce", required = false) String nonce,
                              @RequestParam(name = "echostr", required = false) String echostr) {

      log.info("【微信核心接入】,請求接入引數,signature={},timestamp={},nonce={},echostr={}", signature, timestamp, nonce, echostr);

      if (WeChatCheckUtil.checkSignature(signature, timestamp, nonce)) {
         log.info("【微信核心接入】,引數校驗正確,接入成功!");
         return echostr;
      } else {
         log.info("【微信核心接入,引數校驗錯誤,接入失敗!】");
         return "";
      }
   }


   /**
    * 公眾號響應微信請求
    *
    * @param request 使用者向公眾號發起的請求
    * @return 公眾號響應請求,處理後的結果
    */
   @PostMapping("WeiXin")
   public String wxCoreResponse(HttpServletRequest request) {
      log.info("【響應微信請求】,正在處理微信請求...");
      String responseMessage = weChatCoreService.wxCoreProcessRequest(request);//此部分程式碼未詳細展示,所設計的內容有點多
      return responseMessage;
   }
}

3、進行配置(第一步:填寫伺服器配置)

3.1、Tomcat啟動

  • 1、編寫好程式碼好,記得啟動
  • 2、程式碼啟動後,必須要公網能訪問,所以這裡使用到對映工具,如natapp
  • 3、對於對映工具的使用不多做介紹,官網中有詳細教程
    這裡寫圖片描述

3.2、測試帳號配置

  • 公眾號配置和測試帳號配置是一樣的,小編使用測試配置配置方便演示
    這裡寫圖片描述

-到達這一步,提交顯示”成功”,說明已經接入成功
-小編會逐步更新基於第三方SDK實現微信接入
-當然,也會逐步推出微信開發的其他相關知識