一、微信小程序登录流程大致为:
第一步:前端调用wx.login()函数,获取返回的code值。(每次通过wx.login()得到的code值可能不一样)
第二步:传递获取到的code值到服务器端,在服务器端用小程序appid,appsecret等去请求微信服务器,获取openid和session_key。(注:每个微信账号,在每个小程序中获取到的openid是唯一的,它可以作为判断新用户和老用户的依据。)
第三步:将用户openid保存到数据库,并将用户id返回到前端,放到缓存中保持登录态。
二、前期准备:
在开始微信小程序SDK集成前 我们可以先阅读微信官方给出的接口文档 学习微信对接流程 和接口参数对接
微信官方链接:https://developers.weixin.qq.com/miniprogram/dev/framework/
微信官方给出的文档对初次接触微信小程序对接的小伙伴并不是很友好
给大家推荐一款基于微信SDK开发的。 WxJava - 微信开发 Java SDK
支持微信支付、开放平台、公众号、企业号/企业微信、小程序等的后端开发
码云源码链接:https://gitee.com/binary/weixin-java-tools?_from=gitee_search
三、正题 Java后台参数配置—相关:
<!--wx-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>4.1.0</version>
</dependency>
<!--wx-pay-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-pay</artifactId>
<version>4.1.0</version>
</dependency>
<!--spring-mock-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-mock</artifactId>
<version>2.0.8</version>
</dependency>
配置文件参数:
配置参数:
wx.app.id= 小程序Id
wx.secret= 小程序环境
wx.mch.id= 商户Id
wx.mch.key= 商户Key
wx.payNotifyUrl= 微信支付回调地址 公网地址一定是 例如 http:www.baidu.com/你的接口Url
wx.refundNotifyUrl= 微信退款回调地址 公网地址一定是
wx.pay.certPath=classpath:cert/wx/apiclient_cert.p12 加载微信提供的加密解密的文件
SpringBootConfig配置类:
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.config.WxMaConfig;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@PropertySource("classpath:properties/wx-${spring.profiles.active}.properties")
public class WxConfig {
@Value("${wx.app.id}")
public String wxAppId;
@Value("${wx.secret}")
public String wxSecret;
@Value("${wx.mch.id}")
public String wxMchId;
@Value("${wx.mch.key}")
public String wxMchKey;
@Value("${wx.payNotifyUrl}")
public String payNotifyUrl;
@Value("${wx.refundNotifyUrl}")
public String refundNotifyUrl;
@Value("${wx.pay.certPath}")
public String wxPayCertPath;
@Bean("wxMaConfig")
public WxMaConfig WxMaConfig() {
WxMaDefaultConfigImpl wxMaConfig = new WxMaDefaultConfigImpl();
wxMaConfig.setAppid(wxAppId);
wxMaConfig.setSecret(wxSecret);
return wxMaConfig;
}
@Bean("wxMaService")
public WxMaService wxMpService(@Qualifier("wxMaConfig") WxMaConfig wxMaConfig) {
WxMaService wxMpService = new WxMaServiceImpl();
wxMpService.setWxMaConfig(wxMaConfig);
return wxMpService;
}
@Bean
public WxPayConfig wxPayConfig() {
WxPayConfig wxPayConfig = new WxPayConfig();
wxPayConfig.setAppId(wxAppId);
wxPayConfig.setMchId(wxMchId);
wxPayConfig.setMchKey(wxMchKey);
wxPayConfig.setNotifyUrl(payNotifyUrl);
wxPayConfig.setTradeType("JSAPI");
wxPayConfig.setKeyPath(wxPayCertPath);
return wxPayConfig;
}
@Bean
public WxPayService wxPayService(WxPayConfig wxPayConfig) {
WxPayService wxPayService = new WxPayServiceImpl();
wxPayService.setConfig(wxPayConfig);
return wxPayService;
}
}
四、登录代码案例:
<