package com.farriver.bwf.web.controller.wechat; import com.alibaba.fastjson2.JSON; import com.farriver.bwf.common.model.ApiData; import com.farriver.bwf.common.statics.LangConstants; import com.farriver.bwf.common.utilities.HttpUtil; import com.farriver.bwf.data.transferobject.wechat.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; @Component @Service @CacheConfig(cacheNames = "bwf_WeChatOauthViaMiniProgramConfig_cache") public class WeChatOauthViaMiniProgramConfig { private static final Logger logger = LoggerFactory.getLogger(WeChatOauthViaMiniProgramConfig.class); @Value("${wx.mp_appid}") private String mp_appid = ""; @Value("${wx.mp_secret}") private String mp_secret = ""; @Value("${wx.mp_notify_url}") private String mp_notify_url = ""; @Value("${wx.mch_id}") private String mch_id = ""; @Value("${wx.paykey}") private String paykey = ""; @Value("${wx.serialNo}") private String serialNo = ""; @Value("${wx.privateKey}") private String privateKey = ""; @Cacheable public ApiData GetAccessToken() throws Exception { String url = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", mp_appid, mp_secret); String tokenData = HttpUtil.Get(url); MiniProgramAccessToken data = JSON.parseObject(tokenData, MiniProgramAccessToken.class); if (data != null) { return ApiData.ok(LangConstants.MSG_INFO_SUCCESS, data); } else { return ApiData.error(LangConstants.MSG_INFO_FAILED); } } @Cacheable public ApiData GetWXCode2Session(String code) throws Exception { String url = String.format("https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code", mp_appid, mp_secret, code); String tokenData = HttpUtil.Get(url); MiniProgramJSCode2Session data = JSON.parseObject(tokenData, MiniProgramJSCode2Session.class); if (data != null) { return ApiData.ok(LangConstants.MSG_INFO_SUCCESS, data); } else { return ApiData.error(LangConstants.MSG_INFO_FAILED); } } @Cacheable public ApiData GetUserPhoneNumber(MiniProgramUserPhoneNumberParam model) throws Exception { String url = String.format("https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=%s", model.getAccess_token()); MiniProgramUserPhoneNumberCode code = new MiniProgramUserPhoneNumberCode(); code.setCode(model.getCode()); String tokenData = HttpUtil.Post(url, JSON.toJSONString(code), ""); MiniProgramUserPhoneNumberResult data = JSON.parseObject(tokenData, MiniProgramUserPhoneNumberResult.class); if (data != null) { return ApiData.ok(LangConstants.MSG_INFO_SUCCESS, data); } else { return ApiData.error(LangConstants.MSG_INFO_FAILED); } } }