網(wǎng)站建設(shè) 日志免費(fèi)外鏈網(wǎng)
官方文檔:
加密解密文檔:加解密庫下載與返回碼 - 文檔 - 企業(yè)微信開發(fā)者中心
下載java樣例
加解密庫下載與返回碼 - 文檔 - 企業(yè)微信開發(fā)者中心
將解壓開的代碼
‘將文件夾:qq\weixin\mp\aes的代碼作為工具拷到項(xiàng)目中
pom文件中加入
<!--企業(yè)微信中用于加密解碼--><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId></dependency>
編寫會(huì)回調(diào)接口
/*** 企業(yè)微信*/
@RestController
@RequestMapping("/api/qyWx")
public class WxQyController extends BaseController {//tokenpublic final static String TOKEN = "企業(yè)微信中的";// encodingAESKeypublic final static String ENCODINGAES_KEY = "使用自己生成的企業(yè)微信自動(dòng)生成的有問題測試";//企業(yè)IDpublic final static String CORP_ID = "XXXXX";@GetMapping("/callback")public void list(HttpServletRequest request, HttpServletResponse response) throws IOException {// 微信加密簽名String msg_signature = request.getParameter("msg_signature");// 時(shí)間戳String timestamp = request.getParameter("timestamp");// 隨機(jī)數(shù)String nonce = request.getParameter("nonce");// 隨機(jī)字符串String echostr = request.getParameter("echostr");System.out.println("request=" + request.getRequestURL());System.out.println("msg_signature=" + msg_signature);System.out.println("timestamp=" + timestamp);System.out.println("nonce=" + nonce);System.out.println("echostr=" + echostr);PrintWriter out = response.getWriter();// 通過檢驗(yàn)msg_signature對(duì)請(qǐng)求進(jìn)行校驗(yàn),若校驗(yàn)成功則原樣返回echostr,表示接入成功,否則接入失敗String result = null;try {WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(TOKEN, ENCODINGAES_KEY, CORP_ID);result = wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr);} catch (AesException e) {e.printStackTrace();}if (result == null) {result = TOKEN;}out.print(result);out.close();out = null;}//自主生成EncodingAESKey@RequestMapping("/getEncodingAESKey")public String getEncodingAESKey() {/*** 主要解決有時(shí)候直接使用企業(yè)微信那邊生成的EncodingAESKey會(huì)報(bào)錯(cuò)* “Last encoded character (before the paddings if any) is a valid base 64 alphabet but not a possible value",** 使用 commons-codec 加密 32 位字符(我是用的 UUID 生成 ID 后去除 -)* 生成一個(gè) EncodingAESKey 替換微信生成的 EncodingAESKey* Base64.encodeBase64String(UUID.randomUUID().toString().replaceAll("-","").getBytes());* 第二步得到一個(gè) 44 位字符串,需要去除末尾等號(hào)得到 43 位EncodingAESKey,再去企業(yè)微信配置此EncodingAESKey*/String str = Base64.encodeBase64String(UUID.randomUUID().toString().replaceAll("-","").getBytes());return str;}}