支付宝登录(一半)
This commit is contained in:
parent
8a9a04733f
commit
5c91bfa2aa
smart-switch-ruoyi
smart-switch-common
smart-switch-framework/src/main/java/com/ruoyi/framework/web/service
smart-switch-service/src/main/java/com/ruoyi/ss/user
smart-switch-web/src/main
|
@ -16,6 +16,12 @@
|
|||
</description>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>fastjson</artifactId>
|
||||
<version>2.0.53</version>
|
||||
</dependency>
|
||||
|
||||
<!--hutool-->
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
|
|
|
@ -1,8 +1,21 @@
|
|||
package com.ruoyi.common.auth.ali;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
import com.alibaba.fastjson.parser.Feature;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.AlipayClient;
|
||||
import com.alipay.api.AlipayConfig;
|
||||
import com.alipay.api.internal.util.AlipayEncrypt;
|
||||
import com.alipay.api.internal.util.AlipaySignature;
|
||||
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
|
||||
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 支付宝认证服务
|
||||
* @author wjh
|
||||
|
@ -11,12 +24,94 @@ import org.springframework.stereotype.Service;
|
|||
@Service
|
||||
public class AliAuthService {
|
||||
|
||||
@Autowired
|
||||
private AlipayClient alipayClient;
|
||||
|
||||
@Autowired
|
||||
private AliConfig aliConfig;
|
||||
|
||||
|
||||
public String getOpenId(String loginCode) {
|
||||
// TODO
|
||||
// 构造请求参数以调用接口
|
||||
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
|
||||
// 设置授权码
|
||||
request.setCode(loginCode);
|
||||
// 设置授权方式
|
||||
request.setGrantType("authorization_code");
|
||||
|
||||
try {
|
||||
AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
|
||||
System.out.println(response.getBody());
|
||||
|
||||
if (response.isSuccess()) {
|
||||
return response.getUserId();
|
||||
} else {
|
||||
System.out.println("调用失败");
|
||||
// sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接
|
||||
// String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response);
|
||||
// System.out.println(diagnosisUrl);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过密文获取到手机号
|
||||
*/
|
||||
public String getPhoneNumber(String response) {
|
||||
// TODO 获取手机号实现
|
||||
return this.decrypt(response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 解密
|
||||
* @param response 前端响应(密文)
|
||||
*/
|
||||
private String decrypt(String response) {
|
||||
|
||||
//1. 获取验签和解密所需要的参数
|
||||
Map<String, String> openapiResult = JSON.parseObject(response,new TypeReference<Map<String, String>>() {}, Feature.OrderedField);
|
||||
|
||||
String signType = "RSA2";
|
||||
String charset = "UTF-8";
|
||||
String encryptType = "AES";
|
||||
String sign = openapiResult.get("sign");
|
||||
String content = openapiResult.get("response");
|
||||
//判断是否为加密内容
|
||||
boolean isDataEncrypted = !content.startsWith("{");
|
||||
boolean signCheckPass = false;
|
||||
//2. 验签
|
||||
String signContent = content;
|
||||
// 你的小程序对应的支付宝公钥(为扩展考虑建议用appId+signType做密钥存储隔离)
|
||||
String signVeriKey = aliConfig.getAlipayPublicKey();
|
||||
// 你的小程序对应的加解密密钥(为扩展考虑建议用appId+encryptType做密钥存储隔离)
|
||||
String decryptKey = aliConfig.getPrivateKey();//如果是加密的报文则需要在密文的前后添加双引号
|
||||
if (isDataEncrypted) {
|
||||
signContent = "\"" + signContent + "\"";
|
||||
} try {
|
||||
signCheckPass = AlipaySignature.rsaCheck(signContent, sign, signVeriKey, charset, signType);
|
||||
} catch (AlipayApiException e) {
|
||||
// 验签异常, 日志
|
||||
} if (!signCheckPass) {
|
||||
//验签不通过(异常或者报文被篡改),终止流程(不需要做解密)
|
||||
throw new ServiceException("验签失败");
|
||||
}
|
||||
//3. 解密
|
||||
String plainData = null;
|
||||
if (isDataEncrypted) {
|
||||
try {
|
||||
plainData = AlipayEncrypt.decryptContent(content, encryptType, decryptKey, charset);
|
||||
} catch (AlipayApiException e) {
|
||||
//解密异常, 记录日志
|
||||
throw new ServiceException("解密异常");
|
||||
}
|
||||
} else {
|
||||
plainData = content;
|
||||
}
|
||||
|
||||
return plainData;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.ruoyi.common.auth.ali;
|
||||
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.AlipayClient;
|
||||
import com.alipay.api.AlipayConfig;
|
||||
import com.alipay.api.DefaultAlipayClient;
|
||||
import lombok.Data;
|
||||
|
@ -16,18 +17,36 @@ import org.springframework.stereotype.Component;
|
|||
@Data
|
||||
public class AliConfig {
|
||||
|
||||
// @Value("${ali.appId}")
|
||||
// private String appId;
|
||||
//
|
||||
// @Value("${ali.privateKey}")
|
||||
// private String privateKey;
|
||||
//
|
||||
// @Bean
|
||||
// public AlipayConfig alipayConfig() {
|
||||
// AlipayConfig config = new AlipayConfig();
|
||||
// config.setAppId(appId);
|
||||
// config.setPrivateKey(privateKey);
|
||||
//
|
||||
// return config;
|
||||
// }
|
||||
// 应用ID
|
||||
@Value("${ali.appId}")
|
||||
private String appId;
|
||||
|
||||
// 应用私钥
|
||||
@Value("${ali.privateKey}")
|
||||
private String privateKey;
|
||||
|
||||
// 应用公钥
|
||||
@Value("${ali.publicKey}")
|
||||
private String publicKey;
|
||||
|
||||
// 支付宝公钥
|
||||
@Value("${ali.alipayPublicKey}")
|
||||
private String alipayPublicKey;
|
||||
|
||||
private AlipayConfig getAlipayConfig() {
|
||||
AlipayConfig alipayConfig = new AlipayConfig();
|
||||
alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
|
||||
alipayConfig.setAppId(appId);
|
||||
alipayConfig.setPrivateKey(privateKey);
|
||||
alipayConfig.setAlipayPublicKey(alipayPublicKey);
|
||||
alipayConfig.setFormat("json");
|
||||
alipayConfig.setCharset("UTF-8");
|
||||
alipayConfig.setSignType("RSA2");
|
||||
return alipayConfig;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public AlipayClient alipayClient() throws AlipayApiException {
|
||||
return new DefaultAlipayClient(getAlipayConfig());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -172,11 +172,21 @@ public class Constants
|
|||
*/
|
||||
public static final String CUSTOM_LOGIN_WX = "wx_login";
|
||||
|
||||
/**
|
||||
* 支付宝登录
|
||||
*/
|
||||
public static final String CUSTOM_LOGIN_ALI = "ali_login";
|
||||
|
||||
/**
|
||||
* 登录用户为微信
|
||||
*/
|
||||
public static final String USER_TYPE_WX = "USER_TYPE_WX";
|
||||
|
||||
/**
|
||||
* 登录用户为支付宝
|
||||
*/
|
||||
public static final String USER_TYPE_ALI = "USER_TYPE_ALI";
|
||||
|
||||
/**
|
||||
* 登录用户为APP账密登录
|
||||
*/
|
||||
|
|
|
@ -244,4 +244,7 @@ public class SmUser extends BaseEntity
|
|||
|
||||
@ApiModelProperty("代理商是否允许商户开关设备")
|
||||
private Boolean agentAllowMchSwitch;
|
||||
|
||||
@ApiModelProperty("支付宝openId")
|
||||
private String aliOpenId;
|
||||
}
|
||||
|
|
|
@ -16,8 +16,8 @@ import javax.validation.constraints.NotNull;
|
|||
@ApiModel
|
||||
public class AliLoginBody {
|
||||
|
||||
// @ApiModelProperty("用于获取手机号的授权码,首次登录必填")
|
||||
// private String mobileCode;
|
||||
@ApiModelProperty("获取手机号的密文")
|
||||
private String mobileCiphertext;
|
||||
|
||||
@NotBlank(message = "登录授权码不允许为空")
|
||||
@ApiModelProperty("my.getAuthCode获取的登录授权码,用于获取openId,必填")
|
||||
|
|
|
@ -7,6 +7,7 @@ import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
|
|||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.ruoyi.common.auth.ali.AliAuthService;
|
||||
import com.ruoyi.common.core.domain.entity.SmUser;
|
||||
import com.ruoyi.common.core.domain.model.AliLoginBody;
|
||||
import com.ruoyi.common.core.domain.model.WxLoginBody;
|
||||
import com.ruoyi.common.enums.UserStatus;
|
||||
import com.ruoyi.common.enums.UserType;
|
||||
|
@ -270,7 +271,7 @@ public class SysLoginService
|
|||
// 通过openId查询用户
|
||||
String openId = wxAuthService.getOpenId(body.getLoginCode());
|
||||
ServiceUtil.assertion(openId == null, "获取微信openId失败");
|
||||
SmUser user = smUserService.selectSmUserByWxOpenId(openId);
|
||||
SmUserVO user = smUserService.selectSmUserByWxOpenId(openId);
|
||||
|
||||
// 若用户不存在,则使用openId进行注册
|
||||
if (user == null || Objects.equals(user.getDelFlag(), UserStatus.DELETED.getCode())) {
|
||||
|
@ -281,7 +282,7 @@ public class SysLoginService
|
|||
mobile = wxAuthService.getWxPhoneNumber(body.getMobileCode());
|
||||
}
|
||||
// 用户注册
|
||||
user = registerWx(openId, mobile);
|
||||
user = smUserService.registerWx(openId, mobile);
|
||||
}
|
||||
ServiceUtil.assertion(user == null, "用户不存在");
|
||||
|
||||
|
@ -308,34 +309,6 @@ public class SysLoginService
|
|||
return tokenService.createToken(loginUser);
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册微信用户
|
||||
* @param openId 微信OpenId
|
||||
*/
|
||||
private SmUserVO registerWx(String openId, String mobile) {
|
||||
if (StringUtils.isBlank(openId)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String name = "微信" + openId.substring(openId.length() - 4);
|
||||
|
||||
// 添加用户
|
||||
SmUserVO newUser = new SmUserVO();
|
||||
newUser.setUserName(name);
|
||||
newUser.setWxOpenId(openId);
|
||||
newUser.setPhonenumber(mobile);
|
||||
newUser.setType(UserType.USER.getType());
|
||||
smUserService.insertSmUser(newUser);
|
||||
|
||||
// 添加微信账户
|
||||
// Account accountData = new Account();
|
||||
// accountData.setUserId(newUser.getUserId());
|
||||
// accountData.setAccountNo(newUser.getWxOpenId());
|
||||
// accountData.setAccountType(AccountType.WECHAT.getType());
|
||||
// accountService.insertSmAccount(accountData);
|
||||
|
||||
return newUser;
|
||||
}
|
||||
|
||||
public String userLogin(String username, String password, String code, String uuid) {
|
||||
// 验证码校验
|
||||
|
@ -344,7 +317,7 @@ public class SysLoginService
|
|||
return this.appLogin(username, password);
|
||||
}
|
||||
|
||||
public String aliLogin(WxLoginBody body) {
|
||||
public String aliLogin(AliLoginBody body) {
|
||||
// 通过支付宝openId查询用户
|
||||
String openId = aliAuthService.getOpenId(body.getLoginCode());
|
||||
ServiceUtil.assertion(openId == null, "获取支付宝openId失败");
|
||||
|
@ -353,24 +326,23 @@ public class SysLoginService
|
|||
|
||||
// 若用户不存在,则使用openId进行注册
|
||||
if (user == null || Objects.equals(user.getDelFlag(), UserStatus.DELETED.getCode())) {
|
||||
// 获取手机号
|
||||
boolean loginWithPhone = sysConfigService.getBoolean(ConfigKey.ARRIVAL_DELAY);
|
||||
String mobile = null;
|
||||
if (loginWithPhone && StringUtils.hasText(body.getMobileCode())) {
|
||||
mobile = wxAuthService.getWxPhoneNumber(body.getMobileCode());
|
||||
if (loginWithPhone && StringUtils.hasText(body.getMobileCiphertext())) {
|
||||
mobile = aliAuthService.getPhoneNumber(body.getMobileCiphertext());
|
||||
}
|
||||
// 用户注册
|
||||
user = registerWx(openId, mobile);
|
||||
user = smUserService.registerAli(openId, mobile);
|
||||
}
|
||||
ServiceUtil.assertion(user == null, "用户不存在");
|
||||
|
||||
Authentication authentication = null;
|
||||
try {
|
||||
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUserId(), Constants.CUSTOM_LOGIN_WX);
|
||||
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUserId(), Constants.CUSTOM_LOGIN_ALI);
|
||||
// 用户名和密码等信息保存在一个上下文中,只要是同一线程等会就能拿到用户名和密码,也就是能在loadUserByUsername(String username)方法中进行密码验证等
|
||||
AuthenticationContextHolder.setContext(authenticationToken);
|
||||
// 把用户登录类型放在上下文中的details属性中,在UserDetailsServiceImpl.loadUserByUsername中获取
|
||||
authenticationToken.setDetails(Constants.USER_TYPE_WX);
|
||||
authenticationToken.setDetails(Constants.USER_TYPE_ALI);
|
||||
// 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
|
||||
authentication = authenticationManager.authenticate(authenticationToken);
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ public class UserDetailsServiceImpl implements UserDetailsService
|
|||
this.checkUser(user, username);
|
||||
passwordService.validate(user);
|
||||
return createLoginUser(user);
|
||||
} else if(Constants.USER_TYPE_WX.equals(userType)) {
|
||||
} else if(Constants.USER_TYPE_WX.equals(userType) || Constants.USER_TYPE_ALI.equals(userType) ) {
|
||||
// app 用户微信登录
|
||||
SmUser user = smUserService.selectSmUserByUserId(Long.parseLong(username));
|
||||
this.checkUser(user, username);
|
||||
|
|
|
@ -37,4 +37,7 @@ public class SmUserQuery extends SmUser {
|
|||
|
||||
@ApiModelProperty("实名或用户名")
|
||||
private String realOrUserName;
|
||||
|
||||
@ApiModelProperty("精准支付宝OpenId")
|
||||
private String eqAliOpenId;
|
||||
}
|
||||
|
|
|
@ -60,6 +60,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
su.show_bill_mobile_price,
|
||||
su.agent_device_service,
|
||||
su.agent_allow_mch_switch,
|
||||
su.ali_open_id,
|
||||
if(su.is_real, su.real_name, su.user_name) as real_or_user_name,
|
||||
(select sum(stb.money) from sm_transaction_bill stb where stb.user_id = su.user_id and stb.type = '1' and stb.status = '2') as recharge_amount,
|
||||
(select sum(stb.arrival_amount) from sm_transaction_bill stb where stb.user_id = su.user_id and stb.type = '2' and stb.status = '14') as with_drawl_amount,
|
||||
|
@ -91,6 +92,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="readMchLicence != null "> and read_mch_licence = #{readMchLicence}</if>
|
||||
<if test="showBillMobile != null "> and show_bill_mobile = #{showBillMobile}</if>
|
||||
<if test="excludeUserId != null">and su.user_id != #{excludeUserId}</if>
|
||||
<if test="aliOpenId != null and aliOpenId != ''">and su.ali_open_id like concat('%', #{aliOpenId}, '%')</if>
|
||||
<if test="eqAliOpenId != null and eqAliOpenId != ''">and su.ali_open_id = #{eqAliOpenId}</if>
|
||||
<if test="agentAllowMchSwitch != null">and su.agent_allow_mch_switch != #{agentAllowMchSwitch}</if>
|
||||
<if test="realOrUserName != null and realOrUserName != ''">and if(su.is_real, su.real_name, su.user_name) like concat('%', #{realOrUserName}, '%')</if>
|
||||
<if test="tenantDeviceId != null">
|
||||
|
@ -201,6 +204,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="showBillMobilePrice != null">show_bill_mobile_price,</if>
|
||||
<if test="agentDeviceService != null">agent_device_service,</if>
|
||||
<if test="agentAllowMchSwitch != null">agent_allow_mch_switch,</if>
|
||||
<if test="aliOpenId != null">ali_open_id,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="userName != null and userName != ''">#{userName},</if>
|
||||
|
@ -249,6 +253,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="showBillMobilePrice != null">#{showBillMobilePrice},</if>
|
||||
<if test="agentDeviceService != null">#{agentDeviceService},</if>
|
||||
<if test="agentAllowMchSwitch != null">#{agentAllowMchSwitch},</if>
|
||||
<if test="aliOpenId != null">#{aliOpenId},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
|
@ -313,6 +318,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="showBillMobilePrice != null">show_bill_mobile_price = #{showBillMobilePrice},</if>
|
||||
<if test="agentDeviceService != null">agent_device_service = #{agentDeviceService},</if>
|
||||
<if test="agentAllowMchSwitch != null">agent_allow_mch_switch = #{agentAllowMchSwitch},</if>
|
||||
<if test="aliOpenId != null">ali_open_id = #{aliOpenId},</if>
|
||||
</trim>
|
||||
where user_id = #{userId}
|
||||
</update>
|
||||
|
|
|
@ -268,4 +268,18 @@ public interface ISmUserService
|
|||
* @return
|
||||
*/
|
||||
SmUserVO selectSmUserByAliOpenId(String openId);
|
||||
|
||||
/**
|
||||
* 注册支付宝账号
|
||||
*/
|
||||
SmUserVO registerAli(String openId, String mobile);
|
||||
|
||||
/**
|
||||
* 注册微信账号
|
||||
* @param openId
|
||||
* @param mobile
|
||||
* @return
|
||||
*/
|
||||
SmUserVO registerWx(String openId, String mobile);
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.ruoyi.ss.user.service.impl;
|
||||
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.ruoyi.common.auth.wx.WxAuthService;
|
||||
import com.ruoyi.common.constant.CacheConstants;
|
||||
import com.ruoyi.common.core.domain.entity.SmUser;
|
||||
|
@ -633,8 +634,58 @@ public class SmUserServiceImpl implements ISmUserService
|
|||
*/
|
||||
@Override
|
||||
public SmUserVO selectSmUserByAliOpenId(String openId) {
|
||||
// TODO
|
||||
return null;
|
||||
if (StringUtils.isBlank(openId)) {
|
||||
return null;
|
||||
}
|
||||
SmUserQuery query = new SmUserQuery();
|
||||
query.setEqAliOpenId(openId);
|
||||
return this.selectOne(query);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SmUserVO registerAli(String openId, String mobile) {
|
||||
if (StringUtils.isBlank(openId)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String name = "支付宝" + openId.substring(openId.length() - 4);
|
||||
|
||||
// 添加用户
|
||||
SmUserVO data = new SmUserVO();
|
||||
data.setUserName(name);
|
||||
data.setAliOpenId(openId);
|
||||
data.setPhonenumber(mobile);
|
||||
data.setType(UserType.USER.getType());
|
||||
int insert = this.insertSmUser(data);
|
||||
ServiceUtil.assertion(insert != 1, "注册支付宝用户失败");
|
||||
|
||||
return this.selectSmUserByUserId(data.getUserId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public SmUserVO registerWx(String openId, String mobile) {
|
||||
if (StringUtils.isBlank(openId)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String name = "微信" + openId.substring(openId.length() - 4);
|
||||
|
||||
// 添加用户
|
||||
SmUserVO data = new SmUserVO();
|
||||
data.setUserName(name);
|
||||
data.setWxOpenId(openId);
|
||||
data.setPhonenumber(mobile);
|
||||
data.setType(UserType.USER.getType());
|
||||
int insert = this.insertSmUser(data);
|
||||
ServiceUtil.assertion(insert != 1, "注册微信用户失败");
|
||||
|
||||
return this.selectSmUserByUserId(data.getUserId());
|
||||
}
|
||||
|
||||
private SmUserVO selectOne(SmUserQuery query) {
|
||||
PageHelper.startPage(1, 1);
|
||||
List<SmUserVO> list = this.selectSmUserList(query);
|
||||
return CollectionUtils.getFirst(list);
|
||||
}
|
||||
|
||||
private int selectCountByPhone(String phone) {
|
||||
|
|
|
@ -4,6 +4,7 @@ import com.ruoyi.common.annotation.Log;
|
|||
import com.ruoyi.common.constant.Constants;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.domain.model.AliLoginBody;
|
||||
import com.ruoyi.common.core.domain.model.LoginBody;
|
||||
import com.ruoyi.common.core.domain.model.WxLoginBody;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
|
@ -65,7 +66,7 @@ public class AppAuthController extends BaseController {
|
|||
@Log(title = "支付宝授权登录", businessType = BusinessType.OTHER)
|
||||
@ApiOperation("支付宝授权登录")
|
||||
@PostMapping("/aliLogin")
|
||||
public AjaxResult aliLogin(@RequestBody @Validated WxLoginBody body)
|
||||
public AjaxResult aliLogin(@RequestBody @Validated AliLoginBody body)
|
||||
{
|
||||
AjaxResult ajax = AjaxResult.success();
|
||||
// 生成令牌
|
||||
|
|
|
@ -138,5 +138,11 @@ liveness:
|
|||
|
||||
# 支付宝小程序
|
||||
ali:
|
||||
# 应用ID
|
||||
appId: 2021004193649611
|
||||
privateKey: D:\project\smart-switch\alipayPublicKey_RSA2.txt
|
||||
# 应用私钥
|
||||
privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCLmoyeJgMCIh5xeYOzg1mnRTTPplkBTJAeXozAV/dTCu6vaKNPPRXjDwYILFzpYGAVhe9NNw6mcVq9WU4WEh4k05unDQIFNg0gXFQ9RNmcrV7uokVYAbTpPzmJHHF0oNXddsj9J37fFymP9GJCVuVGEkTHGP2DA6Odgq0xuHPiqQeyDzSldzpSwiRiYW71U534aJGz1MZQx3aI8KlANr2Z0c4WPdmYKmd0x137zHFU5yclsginrZL2tE34nBS5OJHqZQ/WLZIKhv8nGSvcILHhxktU6ggNhhGyf2OdlO9dr0z1exIZPrTMtAUQTEh/X/KqV8DgwNMFtNtT2LC47F+pAgMBAAECggEAAoSRELEi0MEIx4cnhu9RiKDI6Q3ZARr+Zm3SIA32GftSfrtmZqF1aZj1xOP38QWZ9glqXXwmuX3F4zBfJirBfGyMnCCx7qIg7np70ncRba/6zFcE5Sdyudo4EW7/5NiZwtrHmTlDIobqavw/YW7rx63Aq86Zk+lW5BpdQU5QWMAot4aFEPq91eo10a7EVigZKs9vkxKuW7OX/mI/BixkK9YBuq1xS6lefKjQfPPMPCRis3QQtkJWOw2myKXn7qcmCsecQwc3XdrV+6iFpYLOR2V4V3ALVFrDuGFb/2PBThWTiijPAypxQdb/Onu86Z3ObWDXYnPNspBODVxCWBWM2QKBgQDqJ31c37ZXUIfavFMBKp86evF9J+6cjGUOoU4iOd7NWW5QkLvNGAjw138ZQo7OKZ26LtzM2+4bbRVgNjdkVmj4ebdF0kijs7ruF+UhFneodFbwGCBXkMc3yLDLlYjZdeI9B/npGrwFuZAnmM1z+La6z0TlZoQnWe+WED5EUiKbJwKBgQCYoNOOPjb2ysXS/CEM/wX4TUDZ9Ykn85wVLOOhW17LYiMLBJq+uZj8BdN/rzdQ4YO4XqBaDA/t7GhiphaYAfsyy7f1oGEp4jtsyHz21uOPOz4ITnbJ9SUPz5VVmFgsCBjyh6KxckiMXEovcoV1Xqd535BPSQg5q1Y/RbOcaIswrwKBgBtqHjJWeunEIvPIIsu7KsNVC5sEptorUdWhqx00u1I9iz3hhCtiCgHwqQ/TDBc1JiNbQzy07y7E2cDW+CtGNqoIzh1dnmWUMGmZ4Ji8IaxWWqtnl7nI2Jo+Y/yh+FDFjYRpv6e8GpFtBWStbjiKwRIkHEPjecuFqxhdtHyZRTX3AoGAYbogm6SUdwMxFb4gv3yPawS0MJs6Hh2q5BghDJE/qkSFIanqF5MpNL3aRZiAd8ZeG/BjBiVREcvcrsWgE+a43DZ67MirTjEwUaAx+69ud6i8OH9dKkVQXMZS3UK1ukPZDXnxn2MItu7lBWpzr8pSvAN9GHcv0BU4HT1ZGx4JebsCgYEAjIbfv7CwfTwyRbevwVscmjEnvH1r336rU3GfC1C8tvPHVdjzVOEezRHwliT/uPLcUWmTLVtwnEGCcwqoz8PUpgvWeriHXlEqBX3pPixYa2kMLm+5se4qDO32QG1EQXeLPs5UWgqfItgqNEsdeFdsE27LEIqjmRzHoPTEKaylUVs=
|
||||
# 应用公钥
|
||||
publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAi5qMniYDAiIecXmDs4NZp0U0z6ZZAUyQHl6MwFf3Uwrur2ijTz0V4w8GCCxc6WBgFYXvTTcOpnFavVlOFhIeJNObpw0CBTYNIFxUPUTZnK1e7qJFWAG06T85iRxxdKDV3XbI/Sd+3xcpj/RiQlblRhJExxj9gwOjnYKtMbhz4qkHsg80pXc6UsIkYmFu9VOd+GiRs9TGUMd2iPCpQDa9mdHOFj3ZmCpndMdd+8xxVOcnJbIIp62S9rRN+JwUuTiR6mUP1i2SCob/Jxkr3CCx4cZLVOoIDYYRsn9jnZTvXa9M9XsSGT60zLQFEExIf1/yqlfA4MDTBbTbU9iwuOxfqQIDAQAB
|
||||
# 支付宝公钥
|
||||
alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAi1vuaEyUkCgagVodfOJp/rk1gwVzs8f/QzEXAEUwZZne+VE8be0rUv9SLY0uOjixanw0yhG9LinHJlePCvuK0Y31Cxx0BXgOt27nGTSqm4oINFYd5WL1vNMPzPE2gat+7ohO3h6FRlmsxsq9W5ZRkko+04Be4lEGZ+Ter/b2v3m4I3CzX6kr42e39QlDRUpD9l9ixpkmfEatdDf01Xp++Tvr/3EZcYoG3oPGztI7B8Kw8KV/6he3ZBlGROWz8ywZSBtR294Y1PRDv+3QXC3nr7J6OrTbnvj+MAtKmwjdkFHiFVr3gfenzeI87LnXrDPahda7Mn6ToQ1NU9tsWCcJgQIDAQAB
|
||||
|
|
Loading…
Reference in New Issue
Block a user