您好,歡迎來(lái)到賦能網(wǎng)!

java怎么用小程序的接口?java登陸微信小程序接口技巧

賦能網(wǎng) 2023-05-09 95

接口在java編程語(yǔ)言中是一個(gè)抽象類型,是抽象方法的集合,接口通常以interface來(lái)聲明。一個(gè)類通過(guò)繼承接口的方式,從而來(lái)繼承接口的抽象方法。那java怎么用小程序的接口?下面來(lái)我們就來(lái)給大家講解一下。

使用weixin-java-miniapp實(shí)現(xiàn)微信小程序登錄接口,我們使用開源的包

<dependency>
    <groupId>com.github.binarywang</groupId>
    <artifactId>weixin-java-miniapp</artifactId>
    <version>3.9.0</version>
</dependency>

第一步:小程序通過(guò)wx.login()獲取code。

第二步:小程序通過(guò)wx.request()發(fā)送code到開發(fā)者服務(wù)器。

第三步:開發(fā)者服務(wù)器接收小程序發(fā)送的code,并攜帶appid、appsecret(這兩個(gè)需要到微信小程序后臺(tái)查看)、code發(fā)送到微信服務(wù)器。

第四步:微信服務(wù)器接收開發(fā)者服務(wù)器發(fā)送的appid、appsecret、code進(jìn)行校驗(yàn)。校驗(yàn)通過(guò)后向開發(fā)者服務(wù)器發(fā)送session_key、openid。

第五步:開發(fā)者服務(wù)器自己生成一個(gè)skey(自定義登錄狀態(tài))與openid、session_key進(jìn)行關(guān)聯(lián),并存到數(shù)據(jù)庫(kù)中(mysql、redis等)。

第六步:開發(fā)者服務(wù)器返回生成skey(自定義登錄狀態(tài))到小程序。

第七步:小程序存儲(chǔ)skey(自定義登錄狀態(tài))到本地。

1、將我們一些基礎(chǔ)配置信息先放到application.yml 文件中

wx:
    miniapp:
    configs:
    -appid: appid# 微信小程序的appid
secret: secret# 微信小程序的Secret
token: token# 微信小程序消息服務(wù)器配置的token
aesKey: aesKey# 微信小程序消息服務(wù)器配置的EncodingAESKey
msgDataFormat: JSON

2、用java對(duì)象和配置映射

@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("未找到對(duì)應(yīng)appid=[%s]的配置,請(qǐng)核實(shí)!", 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("大哥,拜托先看下項(xiàng)目首頁(yè)的說(shuō)明(readme文件),添加下相關(guān)配置,注意別配錯(cuò)了!");
        }
        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));
    }
}

從配置代碼中可以看到初始化的時(shí)候 new WxMaDefaultConfigImpl、 WxMaServiceImpl 這兩個(gè)類,那么作用是什么呢?請(qǐng)看登錄接口!

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 可以增加自己的邏輯,關(guān)聯(lián)業(yè)務(wù)相關(guān)數(shù)據(jù)
        return JsonUtils.toJson(session);
    }
    catch (WxErrorException e)
    {
        this.logger.error(e.getMessage(), e);
        return e.toString();
    }
}

WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(code);

這個(gè)是開源包封裝好的,我們來(lái)看下源碼

可以看出來(lái)這里的appid 和secret 和從WxMaconfig中獲取的,這就是我們之前WxMaService設(shè)置的config

WxMaService service = new WxMaServiceImpl();

service.setWxMaConfig(config);

這種方式可以支持多個(gè)小程序,還有另外一種配置,支持單個(gè)小程序。

1、還是一樣yml文件配置

2、還是一樣映射到j(luò)ava對(duì)象

@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微信小程序接口的登陸,接口能夠達(dá)到統(tǒng)一訪問(wèn), 并且能夠保證代碼的安全性,所以java接口起到重要作用!最后大家如果想要了解更多初識(shí)java知識(shí),敬請(qǐng)關(guān)注賦能網(wǎng)。


本文鏈接:

本文章“java怎么用小程序的接口?java登陸微信小程序接口技巧”已幫助 95 人

免責(zé)聲明:本信息由用戶發(fā)布,本站不承擔(dān)本信息引起的任何交易及知識(shí)產(chǎn)權(quán)侵權(quán)的法律責(zé)任!

本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓(xùn)機(jī)構(gòu)》培訓(xùn)課程》學(xué)習(xí)資訊》課程優(yōu)惠》課程開班》學(xué)校地址等機(jī)構(gòu)信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細(xì)解答:
咨詢熱線:4008-569-579

如果本頁(yè)不是您要找的課程,您也可以百度查找一下: