接口在java編程語言中是一個抽象類型,是抽象方法的集合,接口通常以interface來聲明。一個類通過繼承接口的方式,從而來繼承接口的抽象方法。那java怎么用小程序的接口?下面來我們就來給大家講解一下。
使用weixin-java-miniapp實現(xiàn)微信小程序登錄接口,我們使用開源的包
<dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-miniapp</artifactId> <version>3.9.0</version> </dependency>
第一步:小程序通過wx.login()獲取code。
第二步:小程序通過wx.request()發(fā)送code到開發(fā)者服務器。
第三步:開發(fā)者服務器接收小程序發(fā)送的code,并攜帶appid、appsecret(這兩個需要到微信小程序后臺查看)、code發(fā)送到微信服務器。
第四步:微信服務器接收開發(fā)者服務器發(fā)送的appid、appsecret、code進行校驗。校驗通過后向開發(fā)者服務器發(fā)送session_key、openid。
第五步:開發(fā)者服務器自己生成一個skey(自定義登錄狀態(tài))與openid、session_key進行關聯(lián),并存到數(shù)據(jù)庫中(mysql、redis等)。
第六步:開發(fā)者服務器返回生成skey(自定義登錄狀態(tài))到小程序。
第七步:小程序存儲skey(自定義登錄狀態(tài))到本地。
1、將我們一些基礎配置信息先放到application.yml 文件中
wx: miniapp: configs: -appid: appid# 微信小程序的appid secret: secret# 微信小程序的Secret token: token# 微信小程序消息服務器配置的token aesKey: aesKey# 微信小程序消息服務器配置的EncodingAESKey msgDataFormat: JSON
2、用java對象和配置映射
@Data @ConfigurationProperties(prefix = "wx.miniapp") public class WxMaProperties { private List < Config > configs; @Data public static class Config { private String appid; private String secret; private String token; private String aesKey; private String msgDataFormat; } }
@Slf4j @Configuration @EnableConfigurationProperties(WxMaProperties.class) public class WxMaConfiguration { public final WxMaProperties properties; public static final Map < String, WxMaMessageRouter > routers = Maps.newHashMap(); public static Map < String, WxMaService > maServices; @Autowired public WxMaConfiguration(WxMaProperties properties) { this.properties = properties; } public static WxMaService getMaService(String appid) { WxMaService wxService = maServices.get(appid); if (wxService == null) { throw new IllegalArgumentException(String.format("未找到對應appid=[%s]的配置,請核實!", appid)); } return wxService; } public static WxMaMessageRouter getRouter(String appid) { return routers.get(appid); } @PostConstruct public void init() { List < WxMaProperties.Config > configs = this.properties.getConfigs(); if (configs == null) { throw new WxRuntimeException("大哥,拜托先看下項目首頁的說明(readme文件),添加下相關配置,注意別配錯了!"); } maServices = configs.stream() .map(a - > { WxMaDefaultConfigImpl config = new WxMaRedisConfigImpl(new JedisPool()); config.setAppid(a.getAppid()); config.setSecret(a.getSecret()); config.setToken(a.getToken()); config.setAesKey(a.getAesKey()); config.setMsgDataFormat(a.getMsgDataFormat()); WxMaService service = new WxMaServiceImpl(); service.setWxMaConfig(config); routers.put(a.getAppid(), this.newRouter(service)); return service; }) .collect(Collectors.toMap(s - > s.getWxMaConfig() .getAppid(), a - > a)); } }
從配置代碼中可以看到初始化的時候 new WxMaDefaultConfigImpl、 WxMaServiceImpl 這兩個類,那么作用是什么呢?請看登錄接口!
3、登錄接口
@GetMapping("/login") public String login(@PathVariable String appid, String code) { if (StringUtils.isBlank(code)) { return "empty jscode"; } final WxMaService wxService = WxMaConfiguration.getMaService(appid); try { WxMaJscode2SessionResult session = wxService.getUserService() .getSessionInfo(code); this.logger.info(session.getSessionKey()); this.logger.info(session.getOpenid()); //TODO 可以增加自己的邏輯,關聯(lián)業(yè)務相關數(shù)據(jù) return JsonUtils.toJson(session); } catch (WxErrorException e) { this.logger.error(e.getMessage(), e); return e.toString(); } }
WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(code);
這個是開源包封裝好的,我們來看下源碼
可以看出來這里的appid 和secret 和從WxMaconfig中獲取的,這就是我們之前WxMaService設置的config
WxMaService service = new WxMaServiceImpl();
service.setWxMaConfig(config);
這種方式可以支持多個小程序,還有另外一種配置,支持單個小程序。
1、還是一樣yml文件配置
2、還是一樣映射到java對象
@Configuration @ConfigurationProperties(prefix = "wx.mini") public class WxProperties { private String appId; private String appSecret; private String mchId; private String mchSecret; private String notifyUrl; private String keyPath; public String getNotifyUrl() { return notifyUrl; } public void setNotifyUrl(String notifyUrl) { this.notifyUrl = notifyUrl; } public String getMchSecret() { return mchSecret; } public void setMchSecret(String mchSecret) { this.mchSecret = mchSecret; } public String getAppId() { return this.appId; } public void setAppId(String appId) { this.appId = appId; } public String getAppSecret() { return appSecret; } public void setAppSecret(String appSecret) { this.appSecret = appSecret; } public String getMchId() { return mchId; } public void setMchId(String mchId) { this.mchId = mchId; } public String getKeyPath() { return keyPath; } public void setKeyPath(String keyPath) { this.keyPath = keyPath; } }
@Configuration public class WxConfig { @Autowired private WxProperties wxProperties; @Bean public WxMaConfig wxMaConfig() { WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); config.setAppid(wxProperties.getAppId()); config.setSecret(wxProperties.getAppSecret()); return config; } @Bean public WxMaService wxMaService(WxMaConfig maConfig) { WxMaService service = new WxMaServiceImpl(); service.setWxMaConfig(maConfig); return service; }
3、登錄接口
這樣我們就完成了Java微信小程序接口的登陸,接口能夠達到統(tǒng)一訪問, 并且能夠保證代碼的安全性,所以java接口起到重要作用!最后大家如果想要了解更多初識java知識,敬請關注賦能網(wǎng)。
本文鏈接:
本文章“java怎么用小程序的接口?java登陸微信小程序接口技巧”已幫助 95 人
免責聲明:本信息由用戶發(fā)布,本站不承擔本信息引起的任何交易及知識產(chǎn)權侵權的法律責任!
本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓機構》培訓課程》學習資訊》課程優(yōu)惠》課程開班》學校地址等機構信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細解答:
咨詢熱線:4008-569-579