欢迎使用CSDN-markdown编辑器
来源:互联网 发布:株洲中车 知乎 编辑:程序博客网 时间:2024/06/10 02:02
package com.shop.api.controller;
import com.shop.common.config.Global;
import com.shop.common.entity.*;
import com.shop.common.handler.CommercialTenantHandler;
import com.shop.common.handler.TicketHandler;
import com.shop.common.handler.TokenHandler;
import com.shop.common.util.ApiUtils;
import com.shop.common.util.IsObjectNullUtils;
import com.shop.common.util.WXPayUtil;
import com.shop.common.util.WXThirdparty.WXToken;
import com.shop.common.util.WXencryption.AesException;
import com.shop.common.util.WXencryption.WXBizMsgCrypt;
import net.sf.json.JSONObject;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Method;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Y on 2017/9/6.
* 第三方平台
*/
@Controller
@RequestMapping(value = “/apiauthorizedeventacceptance”)
public class APIAuthorizedeventAcceptance {
@Autowiredprivate TicketHandler ticketHandler;@Autowiredprivate TokenHandler tokenHandler;@Autowiredprivate CommercialTenantHandler commercialTenantHandler;private String authCode;//test@RequestMapping(value ="/test",method = RequestMethod.GET)@ResponseBodypublic Map<String,Object> authcallback() { Map<String,Object> retmap=new HashMap<>(); try { ApiUtils.logger.info("class: APIAuthorizedeventAcceptance test into"); String gettoken = tokenHandler.gettoken(); ApiUtils.logger.info("class: APIAuthorizedeventAcceptance test return gettoken={}", gettoken); return retmap; } catch (Exception ex) { ex.printStackTrace(); ApiUtils.logger.info("class: APIAuthorizedeventAcceptance test return exception={},retmap={}", ex,retmap); return retmap; }}/** * 去往授权页面 * @return */@RequestMapping(value ="/touser",method = RequestMethod.GET)public String touser( ModelMap modelMap, HttpServletRequest request) { try { ApiUtils.logger.info("class: APIAuthorizedeventAcceptance userauthorization ","点了"); //获取预授权码 String gettoken = tokenHandler.gettoken(); if (IsObjectNullUtils.is(gettoken)){ return "wx/400"; } authCode= WXToken.getpreAuthCode(gettoken); String wxurl="https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid="+Global.getComponent_Appid()+"&pre_auth_code="+authCode+"&redirect_uri=https://open.8d3j.com/apiauthorizedeventacceptance/authcallback"; modelMap.put("wxurl",wxurl); ApiUtils.logger.info("class: APIAuthorizedeventAcceptance userauthorization return wxurl={}", wxurl); return "wx/userauthorization"; } catch (Exception ex) { ex.printStackTrace(); ApiUtils.logger.info("class: APIAuthorizedeventAcceptance message return exception={},retmap={}", ex); return "wx/400"; }}/** * 授权完成回调页面 * @param authcode * @return */@RequestMapping(value ="/authcallback",method = RequestMethod.GET)public String authcallback( @RequestParam(required = false,value = "auth_code")String authcode, @RequestParam(required = false,value = "expires_in")Long expiresin, ModelMap modelMap, HttpServletRequest request) { try { ApiUtils.logger.info("class: APIAuthorizedeventAcceptance authcallback into authcode={}",authcode); if (IsObjectNullUtils.is(authcode)){ return "wx/400"; } String gettoken = tokenHandler.gettoken(); if (IsObjectNullUtils.is(gettoken)){ return "wx/400"; } //使用授权码换取公众号或小程序的接口调用凭证及信息 JsonRootBean getsmallroutineinterface = WXToken.getsmallroutineinterface(authcode, gettoken); if (IsObjectNullUtils.is(getsmallroutineinterface)){ ApiUtils.logger.info("class: APIAuthorizedeventAcceptance authcallback null smallroutineinterfacemap"); return "wx/400"; } if (IsObjectNullUtils.is(getsmallroutineinterface)){ ApiUtils.logger.info("class: APIAuthorizedeventAcceptance authcallback null getsmallroutineinterface"); return "wx/400"; } //存入商户基本信息及token //创建商户对象 CommercialTenant commercialTenant=new CommercialTenant(); //创建token Token token=new Token(); //存入appid commercialTenant.setAuthorizerAppid( getsmallroutineinterface.getAuthorization_info().getAuthorizer_appid()); token.setRemark1(getsmallroutineinterface.getAuthorization_info().getAuthorizer_appid()); ApiUtils.logger.info("class: APIAuthorizedeventAcceptance authcallback null authorizer_access_token"+getsmallroutineinterface.getAuthorization_info().getAuthorizer_access_token()); token.setToken(getsmallroutineinterface.getAuthorization_info().getAuthorizer_access_token()); commercialTenant.setAuthorizerRefreshToken(getsmallroutineinterface.getAuthorization_info().getAuthorizer_refresh_token()); token.setFlag("0"); token.setUpdataTime(new Date()); token.setCreateTime(new Date()); //存入token Token selecttoken = tokenHandler.selecttoken(token); if (IsObjectNullUtils.is(selecttoken)){ int save = tokenHandler.save(token); if (save>0){ ApiUtils.logger.info("class: APIAuthorizedeventAcceptance authcallback save token success"); }else { ApiUtils.logger.info("class: APIAuthorizedeventAcceptance authcallback save token fail"); } }else { int updateTokens = tokenHandler.updateTokens(token); if (updateTokens>0){ ApiUtils.logger.info("class: APIAuthorizedeventAcceptance authcallback updateTokens token success"); }else { ApiUtils.logger.info("class: APIAuthorizedeventAcceptance authcallback updateTokens token fail"); } } //获取授权方基本信息 Root authorizerbaseinfo = WXToken.getAuthorisedbasicinfo(getsmallroutineinterface.getAuthorization_info().getAuthorizer_appid(), tokenHandler.gettoken()); //存入授权方基本信息 if (IsObjectNullUtils.is(authorizerbaseinfo)){ ApiUtils.logger.info("class: APIAuthorizedeventAcceptance authcallback null authorizerbaseinfo"); return "wx/400"; } if (!IsObjectNullUtils.is(authorizerbaseinfo.getAuthorizer_info())){ Authorizer_info authorizer_info = authorizerbaseinfo.getAuthorizer_info(); //授权方昵称 if (!IsObjectNullUtils.is(authorizer_info.getNick_name())){ commercialTenant.setNickName(authorizer_info.getNick_name()); } //授权方头像 if (!IsObjectNullUtils.is(authorizer_info.getHead_img())){ commercialTenant.setHeadImg(authorizer_info.getHead_img()); } //授权方公众号类型 if (!IsObjectNullUtils.is(authorizer_info.getService_type_info().getId())){ commercialTenant.setServiceTypeInfo( authorizer_info.getService_type_info().getId()+""); } //授权方 认证类型 if (!IsObjectNullUtils.is(authorizer_info.getVerify_type_info().getId())){ commercialTenant.setVerifyTypeInfo(authorizer_info.getVerify_type_info().getId()+""); } //授权公众号的原始ID if (!IsObjectNullUtils.is(authorizer_info.getUser_name())){ commercialTenant.setUserName(authorizer_info.getUser_name()); } //公众号主体名称 if (!IsObjectNullUtils.is(authorizer_info.getPrincipal_name())){ commercialTenant.setPrincipalName(authorizer_info.getPrincipal_name()); } //授权方公众号所设置的微信号 if (!IsObjectNullUtils.is(authorizer_info.getAlias())){ commercialTenant.setAlias(authorizer_info.getAlias()); } //开发者图片url if (!IsObjectNullUtils.is(authorizer_info.getQrcode_url())){ commercialTenant.setQrcodeUrl(authorizer_info.getQrcode_url()); } //类型授权 1 小程序 2 公众号 if (!IsObjectNullUtils.is(authorizer_info.getMiniProgramInfo())){ commercialTenant.setMiniprograminfo("1"); }else { commercialTenant.setMiniprograminfo("0"); } //帐号介绍 if (!IsObjectNullUtils.is(authorizer_info.getSignature())){ commercialTenant.setSignature((authorizer_info.getSignature())); } commercialTenant.setFlag("0"); commercialTenant.setCreateTime(new Date()); commercialTenant.setUpdateTime(new Date()); CommercialTenant commercialTenant1 = commercialTenantHandler.selectByEntity(commercialTenant); if (IsObjectNullUtils.is(commercialTenant1)){ int insert = commercialTenantHandler.insert(commercialTenant); if (insert>0){ modelMap.put("merchantid",commercialTenant.getId()); return "wx/create_merchant"; }else { ApiUtils.logger.info("class: APIAuthorizedeventAcceptance authcallback return save modelMap={}",modelMap); return "wx/400"; } }else { int update = commercialTenantHandler.update(commercialTenant); if (update>0){ modelMap.put("merchantid",commercialTenant.getId()); return "wx/create_merchant"; }else { ApiUtils.logger.info("class: APIAuthorizedeventAcceptance authcallback return update modelMap={}",modelMap); return "wx/400"; } } } ApiUtils.logger.info("class: APIAuthorizedeventAcceptance authcallback return modelMap={}",modelMap); return "wx/400"; } catch (Exception ex) { ex.printStackTrace(); ApiUtils.logger.info("class: APIAuthorizedeventAcceptance authcallback return exception={},modelMap={}", ex,modelMap); return "wx/400"; }}/** * 全网发布 * @param request * @param response * @return */@RequestMapping(value = "{appid}/callback")@ResponseBodypublic void message( @PathVariable String appid, HttpServletRequest request, HttpServletResponse response ) { Map<String,Object> retmap=new HashMap<>(); try { //appid是用来区分来自于那个公众号或小程序 ApiUtils.logger.info("class: APIAuthorizedeventAcceptance message request={}",request); ApiUtils.logger.info("第三方平台全网发布-------------{appid}/callback-----------验证开始。。。。"); //获取请求的xml StringBuilder sb = new StringBuilder(); BufferedReader in = request.getReader(); String line; while ((line = in.readLine()) != null) { sb.append(line); } in.close(); String xml = sb.toString(); Document doc = DocumentHelper.parseText(xml); Element rootElt = doc.getRootElement(); String toUserName = rootElt.elementText("ToUserName"); //微信全网测试账号 ApiUtils.logger.info("全网发布接入检测消息反馈开始--------------------------------------"+toUserName); //调用检测微信消息方法 Method2 m=new Method2(); m.checkWeixinAllNetworkCheck(request, response, xml); ApiUtils.logger.info("class: APIAuthorizedeventAcceptance message return s={}"); } catch (Exception ex) { ex.printStackTrace(); ApiUtils.logger.info("class: APIAuthorizedeventAcceptance message return exception={},retmap={}", ex,retmap); //return ""; }}public void checkWeixinAllNetworkCheck(HttpServletRequest request, HttpServletResponse response,String xml) throws DocumentException, IOException, AesException { String nonce = request.getParameter("nonce"); String timestamp = request.getParameter("timestamp"); String msgSignature = request.getParameter("msg_signature"); WXBizMsgCrypt pc = new WXBizMsgCrypt(Global.getComponent_Token(),Global.getComponent_Key(),Global.getComponent_Appid()); xml = pc.decryptMsg(msgSignature, timestamp, nonce, xml); Document doc = DocumentHelper.parseText(xml); Element rootElt = doc.getRootElement(); String msgType = rootElt.elementText("MsgType"); String toUserName = rootElt.elementText("ToUserName"); String fromUserName = rootElt.elementText("FromUserName"); ApiUtils.logger.info("---全网发布接入检测--step.1-----------msgType="+msgType+"-----------------toUserName="+toUserName+"-----------------fromUserName="+fromUserName); ApiUtils.logger.info("---全网发布接入检测--step.2-----------xml="+xml); if("event".equals(msgType)){ ApiUtils.logger.info("---全网发布接入检测--step.3-----------事件消息--------"); String event = rootElt.elementText("Event"); replyEventMessage(request,response,event,toUserName,fromUserName); }else if("text".equals(msgType)){ ApiUtils.logger.info("---全网发布接入检测--step.3-----------文本消息--------"); String content = rootElt.elementText("Content"); processTextMessage(request,response,content,toUserName,fromUserName); }}public void replyEventMessage(HttpServletRequest request, HttpServletResponse response, String event, String toUserName, String fromUserName) throws DocumentException, IOException { String content = event + "from_callback"; ApiUtils.logger.info("---全网发布接入检测------step.4-------事件回复消息 content="+content + " toUserName="+toUserName+" fromUserName="+fromUserName); replyTextMessage(request,response,content,toUserName,fromUserName);}public void processTextMessage(HttpServletRequest request, HttpServletResponse response,String content,String toUserName, String fromUserName) throws IOException, DocumentException{ if("TESTCOMPONENT_MSG_TYPE_TEXT".equals(content)){ String returnContent = content+"_callback"; replyTextMessage(request,response,returnContent,toUserName,fromUserName); }else { output(response, ""); //接下来客服API再回复一次消息 replyApiTextMessage(request,response,content.split(":")[1],fromUserName); }}public void replyApiTextMessage(HttpServletRequest request, HttpServletResponse response, String auth_code, String fromUserName) throws DocumentException, IOException { String authorization_code = auth_code; // 得到微信授权成功的消息后,应该立刻进行处理!!相关信息只会在首次授权的时候推送过来 System.out.println("------step.1----使用客服消息接口回复粉丝----逻辑开始-------------------------"); try { /*String gettoken = tokenHandler.gettoken(); System.out.println("------step.2----使用客服消息接口回复粉丝------- component_access_token = "+gettoken + "---------authorization_code = "+authorization_code); net.sf.json.JSONObject authorizationInfoJson = JwThirdAPI.getApiQueryAuthInfo(Global.getComponent_Appid(), authorization_code, gettoken); System.out.println("------step.3----使用客服消息接口回复粉丝-------------- 获取authorizationInfoJson = "+authorizationInfoJson); net.sf.json.JSONObject infoJson = authorizationInfoJson.getJSONObject("authorization_info"); String authorizer_access_token = infoJson.getString("authorizer_access_token");*/ String merchantToken = tokenHandler.getMerchantToken(authorization_code); Map<String,Object> obj = new HashMap<String,Object>(); Map<String,Object> msgMap = new HashMap<String,Object>(); String msg = auth_code + "_from_api"; msgMap.put("content", msg); obj.put("touser", fromUserName); obj.put("msgtype", "text"); obj.put("text", msgMap); WXToken.sendMessage(obj, merchantToken); } catch (Exception e) { e.printStackTrace(); }}/** * 回复微信服务器"文本消息" * @param request * @param response * @param content * @param toUserName * @param fromUserName * @throws DocumentException * @throws IOException */public void replyTextMessage(HttpServletRequest request, HttpServletResponse response, String content, String toUserName, String fromUserName) throws DocumentException, IOException { System.out.println("------进入replyTextMessage-------------------------"); Long createTime = Calendar.getInstance().getTimeInMillis() / 1000; StringBuffer sb = new StringBuffer(); sb.append("<xml>"); sb.append("<ToUserName><![CDATA["+fromUserName+"]]></ToUserName>"); sb.append("<FromUserName><![CDATA["+toUserName+"]]></FromUserName>"); sb.append("<CreateTime>"+createTime+"</CreateTime>"); sb.append("<MsgType><![CDATA[text]]></MsgType>"); sb.append("<Content><![CDATA["+content+"]]></Content>"); sb.append("</xml>"); String replyMsg = sb.toString(); String returnvaleue = ""; try { WXBizMsgCrypt pc = new WXBizMsgCrypt(Global.getComponent_Token(),Global.getComponent_Key(),Global.getComponent_Appid()); returnvaleue = pc.encryptMsg(replyMsg, createTime.toString(), "easemob"); System.out.println("------------------加密后的返回内容 returnvaleue: "+returnvaleue); } catch (AesException e) { e.printStackTrace(); } output(response, returnvaleue);}/** * 工具类:回复微信服务器"文本消息" * @param response * @param returnvaleue */public void output(HttpServletResponse response, String returnvaleue){ try { PrintWriter pw = response.getWriter(); pw.write(returnvaleue); System.out.println("****************returnvaleue***************="+returnvaleue); pw.flush(); } catch (IOException e) { e.printStackTrace(); }}/** * 授权事件url * @param timestamp * @param nonce * @param msgSignature * @param postData * @return */@RequestMapping(value ="/testurl")@ResponseBodypublic String testurl( @RequestParam("timestamp")String timestamp, @RequestParam("nonce")String nonce, @RequestParam("msg_signature")String msgSignature, @RequestBody String postData ) { Map<String,Object> retmap=new HashMap<>(); try { ApiUtils.logger.info("class: APIAuthorizedeventAcceptance testurl timestamp={},nonce={},msgSignature={},postData={}",timestamp,nonce,msgSignature,postData); //加密 WXBizMsgCrypt msg=new WXBizMsgCrypt(Global.getComponent_Token(),"1234567890qwertyuiopASDFGHJKLzxcvbnmQWERTYU",Global.getComponent_Appid()); // 第三方收到公众号平台发送的消息 String result2 = msg.decryptMsg(msgSignature,timestamp,nonce,postData); System.out.println("解密后明文: " + result2); Map<String, String> stringStringMap = WXPayUtil.xmlToMap(result2); for (String key : stringStringMap.keySet()) { System.out.println("key= "+ key + " and value= " + stringStringMap.get(key)); } if (!IsObjectNullUtils.is(stringStringMap.containsKey("InfoType"))){ //存入或者更新数据库 //查询出是否存在appid对应的ticket Ticket ticket=new Ticket(); ticket.setRemark1(Global.getComponent_Appid()); ticket.setFlag("0"); Ticket ticketinfo = ticketHandler.selectticket(ticket); //判断是否存在 if (IsObjectNullUtils.is(ticketinfo)){ //不存在则插入 Ticket ticketsave=new Ticket(); ticketsave.setFlag("0"); ticketsave.setRemark1(Global.getComponent_Appid()); ticketsave.setCreateTime(new Date()); ticketsave.setUpdataTime(new Date()); ticketsave.setTicket(stringStringMap.get("ComponentVerifyTicket")+""); int save = ticketHandler.save(ticketsave); if (save>0){ ApiUtils.logger.info("class: APIAuthorizedeventAcceptance testurl save ticket success"); }else { ApiUtils.logger.info("class: APIAuthorizedeventAcceptance testurl save ticket fail"); } }else { //存在则更新 Ticket ticketupdate=new Ticket(); ticketupdate.setId(ticketinfo.getId()); ticketupdate.setUpdataTime(new Date()); ticketupdate.setTicket(stringStringMap.get("ComponentVerifyTicket")+""); int update = ticketHandler.updateTickets(ticketupdate); if (update>0){ ApiUtils.logger.info("class: APIAuthorizedeventAcceptance testurl update ticket success"); }else { ApiUtils.logger.info("class: APIAuthorizedeventAcceptance testurl update ticket fail"); } } } ApiUtils.logger.info("class: APIAuthorizedeventAcceptance testurl return retmap={}", result2); return "success"; } catch (Exception ex) { ex.printStackTrace(); ApiUtils.logger.info("class: APIAuthorizedeventAcceptance testurl return exception={},retmap={}", ex,retmap); return ""; }} }
package com.shop.api.controller;
import com.shop.common.config.Global;
import com.shop.common.entity.JsonRootBean;
import com.shop.common.handler.TokenHandler;
import com.shop.common.util.ApiUtils;
import com.shop.common.util.WXThirdparty.WXToken;
import com.shop.common.util.WXencryption.AesException;
import com.shop.common.util.WXencryption.WXBizMsgCrypt;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Y on 2017/9/20.
*/
public class Method2 {
@Autowired
private TokenHandler tokenHandler;
public void checkWeixinAllNetworkCheck(HttpServletRequest request, HttpServletResponse response, String xml) throws Exception { String nonce = request.getParameter("nonce"); String timestamp = request.getParameter("timestamp"); String msgSignature = request.getParameter("msg_signature"); //解密xml WXBizMsgCrypt pc = new WXBizMsgCrypt(Global.getComponent_Token(),Global.getComponent_Key(),Global.getComponent_Appid()); xml = pc.decryptMsg(msgSignature, timestamp, nonce, xml); //获取xml内容 Document doc = DocumentHelper.parseText(xml); Element rootElt = doc.getRootElement(); String msgType = rootElt.elementText("MsgType"); String toUserName = rootElt.elementText("ToUserName"); String fromUserName = rootElt.elementText("FromUserName"); ApiUtils.logger.info("---全网发布接入检测--step.1-----------msgType="+msgType+"-----------------toUserName="+toUserName+"-----------------fromUserName="+fromUserName); ApiUtils.logger.info("---全网发布接入检测--step.2-----------xml="+xml); //事件 if("event".equals(msgType)){ ApiUtils.logger.info("---全网发布接入检测--step.3-----------事件消息--------"); String event = rootElt.elementText("Event"); //replyEventMessage(request,response,event,toUserName,fromUserName); String content = event + "from_callback"; ApiUtils.logger.info("---全网发布接入检测------step.4-------事件回复消息 content="+content + " toUserName="+toUserName+" fromUserName="+fromUserName); System.out.println("------进入replyTextMessage-------------------------"); Long createTime = Calendar.getInstance().getTimeInMillis() / 1000; StringBuffer sb = new StringBuffer(); sb.append("<xml>"); sb.append("<ToUserName><![CDATA["+fromUserName+"]]></ToUserName>"); sb.append("<FromUserName><![CDATA["+toUserName+"]]></FromUserName>"); sb.append("<CreateTime>"+createTime+"</CreateTime>"); sb.append("<MsgType><![CDATA[text]]></MsgType>"); sb.append("<Content><![CDATA["+content+"]]></Content>"); sb.append("</xml>"); String replyMsg = sb.toString(); String returnvaleue = ""; try { WXBizMsgCrypt pcs = new WXBizMsgCrypt(Global.getComponent_Token(),Global.getComponent_Key(),Global.getComponent_Appid()); returnvaleue = pcs.encryptMsg(replyMsg, createTime.toString(), "easemob"); System.out.println("------------------加密后的返回内容 returnvaleue: "+returnvaleue); } catch (AesException e) { e.printStackTrace(); } output(response, returnvaleue); }else if("text".equals(msgType)){ //文本消息 ApiUtils.logger.info("---全网发布接入检测--step.3-----------文本消息--------"); String content = rootElt.elementText("Content"); //processTextMessage(request,response,content,toUserName,fromUserName); if("TESTCOMPONENT_MSG_TYPE_TEXT".equals(content)){ //普通文本消息 String returnContent = content+"_callback"; //replyTextMessage(request,response,returnContent,toUserName,fromUserName); System.out.println("------进入replyTextMessage-------------------------"); Long createTime = Calendar.getInstance().getTimeInMillis() / 1000; StringBuffer sb = new StringBuffer(); sb.append("<xml>"); sb.append("<ToUserName><![CDATA["+fromUserName+"]]></ToUserName>"); sb.append("<FromUserName><![CDATA["+toUserName+"]]></FromUserName>"); sb.append("<CreateTime>"+createTime+"</CreateTime>"); sb.append("<MsgType><![CDATA[text]]></MsgType>"); sb.append("<Content><![CDATA["+returnContent+"]]></Content>"); sb.append("</xml>"); String replyMsg = sb.toString(); String returnvaleue = ""; try { WXBizMsgCrypt p = new WXBizMsgCrypt(Global.getComponent_Token(),Global.getComponent_Key(),Global.getComponent_Appid()); returnvaleue = p.encryptMsg(replyMsg, createTime.toString(), "easemob"); System.out.println("------------------加密后的返回内容 returnvaleue: "+returnvaleue); } catch (AesException e) { e.printStackTrace(); } //return returnvaleue; output(response, returnvaleue); System.out.println("返回文本消息成功"); }else { //回复api文本消息 output(response, ""); //接下来客服API再回复一次消息 //replyApiTextMessage(request,response,content.split(":")[1],fromUserName); String authorization_code = content.split(":")[1]; // 得到微信授权成功的消息后,应该立刻进行处理!!相关信息只会在首次授权的时候推送过来 System.out.println("------step.1----使用客服消息接口回复粉丝----逻辑开始-------------------------"); System.out.println("authorization_code===="+authorization_code); //获取第三方token //String gettoken = tokenHandler.gettoken(); JsonRootBean getsmallroutineinterface = WXToken.getsmallroutineinterface(authorization_code, tokenHandler.gettoken()); String authorizer_access_token = getsmallroutineinterface.getAuthorization_info().getAuthorizer_access_token(); System.out.println("authorizer_access_token========="+authorizer_access_token); Map<String,Object> obj = new HashMap<String,Object>(); Map<String,Object> msgMap = new HashMap<String,Object>(); String msg = authorization_code + "_from_api"; msgMap.put("content", msg); obj.put("touser", fromUserName); obj.put("msgtype", "text"); obj.put("text", msgMap); WXToken.sendMessage(obj, authorizer_access_token); } }}public void output(HttpServletResponse response, String returnvaleue){ try { PrintWriter pw = response.getWriter(); pw.write(returnvaleue); System.out.println("****************returnvaleue***************="+returnvaleue); pw.flush(); pw.close(); } catch (IOException e) { e.printStackTrace(); }}
}
package com.shop.common.util.WXThirdparty;
import com.shop.common.config.Global;
import com.shop.common.entity.JsonRootBean;
import com.shop.common.entity.Root;
import com.shop.common.util.ApiUtils;
import com.shop.common.util.IsObjectNullUtils;
import com.shop.common.util.LogUtil;
import com.shop.common.util.http.HttpObject;
import com.shop.common.util.http.HttpRespons;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Y on 2017/9/11.
*/
public class WXToken {
public static Logger logger = LogUtil.getApiLogger();/** * 获取第三方token * @param token * @param authorizerappid * @param authorizerrefreshtoken * @return * @throws Exception */public static Map<String, Object> getMerchantToken (String token,String authorizerappid,String authorizerrefreshtoken)throws Exception{ Map<String,Object> map=new HashMap(); map.put("component_appid", Global.getComponent_Appid()); map.put("authorizer_appid", authorizerappid); map.put("authorizer_refresh_token", authorizerrefreshtoken); HttpObject http = new HttpObject(); HttpRespons result1=http.sendPost("https:// api.weixin.qq.com /cgi-bin/component/api_authorizer_token?component_access_token="+token,map); logger.info("获取第三方token=" + result1.toString()); JSONObject jsonObject = JSONObject.fromObject(result1.getContent()); Map<String, Object> retMap = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class); logger.info("获取第三方token=" + retMap.toString()); if (!IsObjectNullUtils.is(retMap)) { return retMap; } return null;}/** * 获取预授权码 * @param token * @return */public static String getpreAuthCode(String token)throws Exception{ Map<String,Object> map=new HashMap(); map.put("component_appid", Global.getComponent_Appid()); HttpObject http = new HttpObject(); HttpRespons result1=http.sendPost("https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token="+token,map); logger.info("获取pre_auth_code返回result1=" + result1.toString()); JSONObject jsonObject = JSONObject.fromObject(result1.getContent()); Map<String, Object> retMap = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class); logger.info("获取pre_auth_code返回remap=" + retMap.toString()); if (!IsObjectNullUtils.is(retMap)) { return (String)retMap.get("pre_auth_code"); } return null;}/** * 获取第三方平台component_access_token * @return */public static String getComponentAccessToken(String ticket)throws Exception{ Map<String,Object> map=new HashMap(); map.put("component_appid", Global.getComponent_Appid()); map.put("component_appsecret",Global.getComponent_Appsecret()); map.put("component_verify_ticket",ticket); HttpObject http = new HttpObject(); HttpRespons result1=http.sendPost("https://api.weixin.qq.com/cgi-bin/component/api_component_token",map); logger.info("获取component_access_token返回result1=" + result1.toString()); JSONObject jsonObject = JSONObject.fromObject(result1.getContent()); Map<String, Object> retMap = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class); logger.info("获取omponent_access_token返回remap=" + retMap.toString()); if (!IsObjectNullUtils.is(retMap)) { return (String)retMap.get("component_access_token"); } return null;}/** * 使用授权码换取公众号或小程序的接口调用凭证及信息 * @return */public static JsonRootBean getsmallroutineinterface(String authorizationcode,String token)throws Exception{ if (IsObjectNullUtils.is(authorizationcode)){ return null; } if (IsObjectNullUtils.is(token)){ return null; } Map<String,Object> map=new HashMap(); map.put("component_appid", Global.getComponent_Appid()); map.put("authorization_code",authorizationcode); HttpObject http = new HttpObject(); HttpRespons result1=http.sendPost("https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token="+token,map); logger.info("使用授权码换取公众号或小程序的接口调用凭证及信息返回result1=" + result1.toString()); JSONObject jsonObject = JSONObject.fromObject(result1.getContent()); JsonRootBean auth=(JsonRootBean)JSONObject.toBean(jsonObject, JsonRootBean.class); logger.info("使用授权码换取公众号或小程序的接口调用凭证及信息remap=" + auth.toString()); if (!IsObjectNullUtils.is(auth)) { logger.info("使用授权码换取公众号或小程序的接口调用凭证及信息不为空时remap="); return auth; } return null;}/** * 回复粉丝消息 * @param obj * @param merchantToken * @throws Exception */public static void sendMessage(Map<String,Object> obj,String merchantToken)throws Exception{ HttpObject http = new HttpObject(); HttpRespons result1=http.sendPost("https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+merchantToken,obj); logger.info("回复粉丝消息=" + result1.toString());}/** * 获取授权方的帐号基本信息 * @return */public static Root getAuthorisedbasicinfo(String authorizationappid,String token)throws Exception{ ApiUtils.logger.info("class: WXToken getAuthorisedbasicinfo into authorizationappid={},token={}",authorizationappid,token); if (IsObjectNullUtils.is(authorizationappid)){ return null; } if (IsObjectNullUtils.is(token)){ return null; } Map<String,Object> map=new HashMap(); map.put("component_appid", Global.getComponent_Appid()); map.put("authorizer_appid",authorizationappid); HttpObject http = new HttpObject(); HttpRespons result1=http.sendPost("https://api.weixin.qq.com/cgi-bin/component/api_get_authorizer_info?component_access_token="+token,map); logger.info("获取授权方的帐号基本信息=" + result1.toString()); JSONObject jsonObject = JSONObject.fromObject(result1.getContent()); Root root = (Root)JSONObject.toBean(jsonObject, Root.class); logger.info("获取授权方的帐号基本信息=" + root.toString()); if (!IsObjectNullUtils.is(root)) { return root; } return null;}
}
其实挺乱的 看不懂的可以找我交流下 微信号:yhhxfhh
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- top指令下的内存概念
- jQuery常用方法
- docker容器的配置
- StringBuffer类
- 降低与软件相关的商务风险需要系统的视角
- 欢迎使用CSDN-markdown编辑器
- 编号的后6位是固定的6位数,新增一条自动+1,高位补0的实现
- **Ubuntu中interfaces文件设置失效的问题!**
- JVM参数
- 数据结构与算法 第一课
- Zookeeper与Paxos
- Mybatis实现原理/工作流程
- 简单实现日期计算器的基本功能
- 基于springboot ThreadPoolTaskScheduler类实现定时任务动态添加修改