Java實現微信開發--"接入"
阿新 • • 發佈:2019-01-27
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實現微信接入
-當然,也會逐步推出微信開發的其他相關知識