package com.hotent.system.consts; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import cn.hutool.core.util.StrUtil; import com.hotent.base.exception.BaseException; import com.hotent.base.util.AppUtil; import com.hotent.system.enums.BaseUrlEnum; import com.hotent.system.model.SysExternalUnite; import com.hotent.system.persistence.manager.SysExternalUniteManager; /** * 微信公众号常量/小程序常量 * * @author pangquan * */ public class WeChatOffAccConsts { public final static String METHOD_GET = "GET"; public final static String METHOD_POST = "POST"; private final static String OPEN_AUTHORIZE_URL = "https://open.weixin.qq.com/connect/oauth2/authorize"; private final static String WX_URL = "https://api.weixin.qq.com/sns/oauth2"; private final static String WX_Base_Url = "https://api.weixin.qq.com"; public static SysExternalUnite getUnite() { SysExternalUniteManager manager = AppUtil.getBean(SysExternalUniteManager.class); return manager.getWeChatOfficialAccounts(); } public static String generateMenuUrl(String baseUrl, String corpId, BaseUrlEnum baseUrlEnum) throws UnsupportedEncodingException { String path = BaseUrlEnum.PC.equals(baseUrlEnum)?"index":"home"; if(!baseUrl.endsWith(StrUtil.SLASH)){ path = StrUtil.SLASH + path; } String redirectUri = baseUrl + "/weChatOffAcc?redirect=" + baseUrl + "/home"; return OPEN_AUTHORIZE_URL + "?appid=" + corpId + "&redirect_uri=" + URLEncoder.encode(redirectUri, "UTF-8") + "&response_type=code&scope=snsapi_base&state=hotent#wechat_redirect"; } /** * 通过code appid secret 获取access_token * * @param code * @return */ public static String getWxAccessToken(String code) { SysExternalUnite unite = getUnite(); String url = WX_URL + "/access_token?appid=" + unite.getCorpId() + "&secret=" + unite.getCorpSecret() + "&code=" + code + "&grant_type=authorization_code"; return url; } /** * 防止token超时refresh刷新 access_token * * @param appid * refreshToken * @return */ public static String refreshToken(String refreshToken) { SysExternalUnite unite = getUnite(); String url = WX_URL + "/refresh_token?appid=" + unite.getCorpId() + "&grant_type=refresh_token" + "&refresh_token=" + refreshToken; return url; } /** * 通过access_token openid获取用户基本信息 * * @param access_token * openid * * @return */ public static String getWxUserInfo(String access_token, String openid) { String url = WX_Base_Url + "/sns/userinfo?access_token=" + access_token + "&openid=" + openid; return url; } /** * 微信公众号发送模板消息 * * @return */ public static String send(String access_token) { String url = WX_Base_Url + "/cgi-bin/message/template/send?access_token=" + access_token; return url; } public static String getTokenUrl() { SysExternalUnite unite = getUnite(); String url = WX_Base_Url + "/token?grant_type=client_credential&appid=" + unite.getCorpId() + "&secret=" + unite.getCorpSecret(); return url; } public static String getWxAuthorize(String paramStr) throws UnsupportedEncodingException { SysExternalUnite unite = getUnite(); String corpId = unite.getCorpId(); String baseUrl = unite.getBaseUrl() + "/weChatOffAcc?params=" + paramStr; String redirect = URLEncoder.encode(baseUrl, "utf-8"); String url = OPEN_AUTHORIZE_URL + "?appid=" + corpId + "&redirect_uri=" + redirect + "&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect"; return url; } //-------------------------------------以下小程序的接口地址-------------------------------------------------- public static SysExternalUnite getMiniprogramUnite() { SysExternalUniteManager manager = AppUtil.getBean(SysExternalUniteManager.class); SysExternalUnite miniprogram = manager.getMiniprogram(); if(miniprogram != null){ return miniprogram; } throw new BaseException("系统查无小程序集成信息"); } public static String code2SessionUrl(String code){ SysExternalUnite miniprogramUnite = getMiniprogramUnite(); return String.format(WX_Base_Url+ "/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code", miniprogramUnite.getAgentId(), miniprogramUnite.getAgentSecret(), code); } }