当前位置: 代码迷 >> 综合 >> 微信第三方平台【一】获取验证票据 component_verify_ticket,授权结果接收
  详细解决方案

微信第三方平台【一】获取验证票据 component_verify_ticket,授权结果接收

热度:30   发布时间:2024-02-09 02:46:21.0

在第三方平台创建审核通过后,微信服务器会向其 ”授权事件接收URL” 每隔 10 分钟以 POST 的方式推送 component_verify_ticke,

推送到程序后,需要根据微信官方提供的加解密代码,进行解密。拿到ticket之后,mysql保存一下【我自己是redis一份,mysql一份】

接收验证票据和授权结果的URL为,申请第三方平台的时候,填写的“授权事件接收URL”

上代码:

public String componentVerifyTicket(HttpServletRequest request, HttpServletResponse response) {log.info(ThirdRunTimeInfoConstant.START_RECEIVE);try {request.setCharacterEncoding(ModuleConstant.UTF8);response.setCharacterEncoding(ModuleConstant.UTF8);// 微信加密签名String msgSignature = request.getParameter(ModuleConstant.MSG_SIGNATURE);// 时间戳String timeStamp = request.getParameter(ModuleConstant.TIMESTAMP);// 随机数String nonce = request.getParameter(ModuleConstant.NONCE);String encryptType = request.getParameter(ModuleConstant.ENCRYPT_TYPE);String signature = request.getParameter(ModuleConstant.SIGNATURE);log.info(String.format(ThirdRunTimeInfoConstant.VERIFY_TICKET,msgSignature,timeStamp,nonce,encryptType,signature));// 从请求中读取整个post数据InputStream inputStream;String postData = null;inputStream = request.getInputStream();postData= IOUtils.toString(inputStream,ModuleConstant.UTF8);WXBizMsgCrypt wxBizMsgCrypt = new WXBizMsgCrypt(token,aesKey,componentAppId);String msg = wxBizMsgCrypt.decryptMsg(msgSignature, timeStamp, nonce, postData);log.info(String.format(ThirdRunTimeInfoConstant.MSG,msg));// 将xml转为mapMap<String, String> result = WXXmlToMapUtil.xmlToMap(msg);String infotype = result.get(ModuleConstant.INFO_TYPE);log.info(String.format(ThirdRunTimeInfoConstant.INFO_TYPE,infotype));switch (infotype){case ModuleConstant.TICKET_UNDERLINE_KEY:   //接收票据 【component_verify_ticket】String ComponentVerifyTicket = result.get(ModuleConstant.TICKET_KEY);log.info(String.format(COMPONENT_VERIFY_TICKET,ComponentVerifyTicket));// 缓存 ticketredisThird.setComponentVerifyTicket(ComponentVerifyTicket);// 存数据库ComponentVerifyTicketFormDTO ticketFormDTO = new ComponentVerifyTicketFormDTO();ticketFormDTO.setComponentAppId(componentAppId);ticketFormDTO.setComponentVerifyTicket(ComponentVerifyTicket);//先逻辑删ticketDao.deleteOldComponentVerifyTicket();ticketDao.insertComponentVerifyTicket(ticketFormDTO);log.info(ModuleConstant.TICKET_UNDERLINE_KEY+":"+ComponentVerifyTicket);break;case ModuleConstant.AUTHORIZED: //授权成功this.disposeAuthResult(result);log.info(AUTH_STATUS);break;case ModuleConstant.UNAUTHORIZED://用户取消授权//todo 取消授权String authorizerAppId = result.get(ModuleConstant.AUTHORIZER_APP_ID_HUMP);customerMpDao.updateAuthorizationFlag(authorizerAppId);this.disposeAuthResult(result);log.info(REMOVE_AUTH);break;case ModuleConstant.UPDATE_AUTHORIZED://授权变更this.disposeAuthResult(result);log.info(UPDATE_AUTH);break;}} catch (Exception e) {log.error(e.getMessage());return ModuleConstant.SUCCESS;}return ModuleConstant.SUCCESS;
}

不论代码是否出错,最终一定要反回  “success”,是个死值。

收权结果,接收到后,根据项目情况写自己的逻辑