优化小程序获取证书

This commit is contained in:
yuyang 2022-02-08 14:24:27 +08:00
parent 6055228c6b
commit 913fc3ef62
12 changed files with 186 additions and 90 deletions

View File

@ -0,0 +1,21 @@
package com.xhpc.common.api;
import com.xhpc.common.api.factory.CardHistoryOrderFactory;
import com.xhpc.common.api.factory.SettingConfigFactory;
import com.xhpc.common.core.constant.ServiceNameConstants;
import com.xhpc.common.core.domain.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author yuyang
* @date 2022/2/8 13:55
*/
@FeignClient(contextId ="settingConfigFactory",value = ServiceNameConstants.XHPC_PAYMENT, fallbackFactory = SettingConfigFactory.class)
public interface SettingConfigService {
//获取支付配置
@GetMapping("/commonPayment/settingConfig")
R settingConfig(@RequestParam(value = "status") Integer status, @RequestParam(value = "tenantId") String tenantId);
}

View File

@ -0,0 +1,25 @@
package com.xhpc.common.api.factory;
import com.xhpc.common.api.SettingConfigService;
import com.xhpc.common.core.constant.ServiceNameConstants;
import com.xhpc.common.core.domain.R;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
/**
* @author yuyang
* @date 2022/2/8 13:56
*/
@Component
public class SettingConfigFactory implements FallbackFactory<SettingConfigService> {
@Override
public SettingConfigService create(Throwable cause) {
return new SettingConfigService() {
@Override
public R settingConfig(Integer status, String tenantId) {
return R.fail("获取支付配置信息失败:" + cause.getMessage());
}
};
}
}

View File

@ -1,4 +1,4 @@
package com.xhpc.payment.domain;
package com.xhpc.common.domain;
import com.xhpc.common.core.web.domain.BaseEntity;
import lombok.Data;

View File

@ -20,9 +20,14 @@ import com.xhpc.common.core.utils.StringUtils;
import com.xhpc.common.core.web.domain.AjaxResult;
import com.xhpc.common.data.down.StartChargingData;
import com.xhpc.common.domain.XhpcRechargeOrder;
import com.xhpc.common.log.annotation.Log;
import com.xhpc.common.log.enums.BusinessType;
import com.xhpc.common.security.service.TokenService;
import com.xhpc.common.util.UserTypeUtil;
import com.xhpc.payment.domain.*;
import com.xhpc.payment.domain.AlipayNotifyParam;
import com.xhpc.payment.domain.XhpcAppUser;
import com.xhpc.common.domain.XhpcSettingConfig;
import com.xhpc.payment.domain.XhpcUserAccountStatement;
import com.xhpc.payment.mapper.XhpcUserAccountStatementMapper;
import com.xhpc.payment.service.IXhpcCommonPayment;
import com.xhpc.payment.service.IXhpcRechargeOrderService;
@ -33,16 +38,19 @@ import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.*;
import com.xhpc.common.log.annotation.Log;
import com.xhpc.common.log.enums.BusinessType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@RestController
@ -50,8 +58,6 @@ import java.util.*;
@Api(value = "支付宝支付接口", tags = "支付宝支付接口")
public class AlipayPaymentController {
@Autowired
private Environment environment;
@Autowired
private IXhpcRechargeOrderService iXhpcRechargeOrderService;
@Autowired

View File

@ -16,7 +16,7 @@ import com.xhpc.common.security.service.TokenService;
import com.xhpc.common.util.UserTypeUtil;
import com.xhpc.payment.domain.XhpcAppUser;
import com.xhpc.common.domain.XhpcRechargeOrder;
import com.xhpc.payment.domain.XhpcSettingConfig;
import com.xhpc.common.domain.XhpcSettingConfig;
import com.xhpc.payment.domain.XhpcUserAccountStatement;
import com.xhpc.payment.mapper.XhpcUserAccountStatementMapper;
import com.xhpc.payment.service.IXhpcCommonPayment;
@ -34,7 +34,6 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

View File

@ -0,0 +1,37 @@
package com.xhpc.payment.controller;
import com.xhpc.common.core.domain.R;
import com.xhpc.common.core.web.controller.BaseController;
import com.xhpc.payment.service.IXhpcCommonPayment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author yuyang
* @date 2022/2/8 14:00
*/
@EnableScheduling
@RestController
@RequestMapping("/commonPayment")
public class XhpcCommonPaymentController extends BaseController {
@Autowired
private IXhpcCommonPayment xhpcCommonPayment;
/**
* 获取支付配置
* @param status 1微信 2支付宝
* @param tenantId
* @return
*/
@GetMapping("/settingConfig")
public R settingConfig(Integer status, String tenantId) {
return R.ok(xhpcCommonPayment.getXhpcSettingConfigTenantId(status, tenantId));
}
}

View File

@ -11,7 +11,6 @@ import com.xhpc.common.api.SmsService;
import com.xhpc.common.api.UserTypeService;
import com.xhpc.common.core.constant.HttpStatus;
import com.xhpc.common.core.constant.StatusConstants;
import com.xhpc.common.core.domain.R;
import com.xhpc.common.core.utils.DateUtils;
import com.xhpc.common.core.utils.StringUtils;
import com.xhpc.common.core.utils.WXPayUtil;
@ -25,7 +24,7 @@ import com.xhpc.common.util.UserTypeUtil;
import com.xhpc.payment.domain.XhpcAppUser;
import com.xhpc.payment.domain.XhpcRefundAudit;
import com.xhpc.common.domain.XhpcRefundOrder;
import com.xhpc.payment.domain.XhpcSettingConfig;
import com.xhpc.common.domain.XhpcSettingConfig;
import com.xhpc.payment.mapper.XhpcUserAccountStatementMapper;
import com.xhpc.payment.service.IXhpcCommonPayment;
import com.xhpc.payment.service.IXhpcRefundAuditService;

View File

@ -1,6 +1,6 @@
package com.xhpc.payment.mapper;
import com.xhpc.payment.domain.XhpcSettingConfig;
import com.xhpc.common.domain.XhpcSettingConfig;
import org.apache.ibatis.annotations.Param;
/**

View File

@ -1,6 +1,6 @@
package com.xhpc.payment.service;
import com.xhpc.payment.domain.XhpcSettingConfig;
import com.xhpc.common.domain.XhpcSettingConfig;
/**
* @author yuyang

View File

@ -1,6 +1,6 @@
package com.xhpc.payment.service.impl;
import com.xhpc.payment.domain.XhpcSettingConfig;
import com.xhpc.common.domain.XhpcSettingConfig;
import com.xhpc.payment.mapper.XhpcCommonPaymentMapper;
import com.xhpc.payment.service.IXhpcCommonPayment;
import org.springframework.beans.factory.annotation.Autowired;

View File

@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xhpc.payment.mapper.XhpcCommonPaymentMapper">
<resultMap type="com.xhpc.payment.domain.XhpcSettingConfig" id="XhpcSettingConfigResult">
<resultMap type="com.xhpc.common.domain.XhpcSettingConfig" id="XhpcSettingConfigResult">
<result column="setting_config_id" property="settingConfigId"/>
<result column="wx_app_id" property="wxAppId"/>

View File

@ -2,12 +2,12 @@ package com.xhpc.user.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
import com.xhpc.common.api.SettingConfigService;
import com.xhpc.common.core.constant.HttpStatus;
import com.xhpc.common.core.domain.R;
import com.xhpc.common.core.utils.HttpUtils;
@ -16,20 +16,14 @@ import com.xhpc.common.core.utils.sign.Base64;
import com.xhpc.common.core.web.controller.BaseController;
import com.xhpc.common.core.web.domain.AjaxResult;
import com.xhpc.common.core.web.page.TableDataInfo;
import com.xhpc.common.domain.XhpcSettingConfig;
import com.xhpc.common.log.annotation.Log;
import com.xhpc.common.log.enums.BusinessType;
import com.xhpc.user.service.IXhpcAppUserUserService;
import io.swagger.annotations.ApiOperation;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.*;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.security.PublicKey;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
@ -55,8 +49,7 @@ public class XhpcAppUserController extends BaseController {
private IXhpcAppUserUserService iXhpcAppUserUserService;
@Autowired
private Environment environment;
private SettingConfigService settingConfigService;
/**
* C端用户详情
*/
@ -162,12 +155,18 @@ public class XhpcAppUserController extends BaseController {
*/
@PostMapping("/jscode2session")
@ApiOperation(value = "获取微信权限标识", notes = "jsCode")
public R<?> jsCode(String jsCode, String encryptedData, String iv) {
public R<?> jsCode(String jsCode, String encryptedData, String iv,String tenantId) {
if (StringUtils.isEmpty(jsCode)) {
return R.fail(HttpStatus.NOT_NULL, "信息不完整");
}
encryptedData =encryptedData.replace(' ','+');
String url = environment.getProperty("WXGETJSCODE") + jsCode + "&grant_type=authorization_code";
if("".equals(tenantId) || null==tenantId){
tenantId="000000";
}
R r = settingConfigService.settingConfig(1, tenantId);
if(r !=null && r.getCode()==200){
XhpcSettingConfig xhpcSettingConfig = (XhpcSettingConfig)r.getData();
String url = "https://api.weixin.qq.com/sns/jscode2session?appid="+xhpcSettingConfig.getWxAppId()+"&secret="+xhpcSettingConfig.getWxAppSecret()+"&js_code="+ jsCode + "&grant_type=authorization_code";
String result = HttpUtils.get(url);
JSONObject json = JSON.parseObject(result);
if (null != json) {
@ -194,6 +193,9 @@ public class XhpcAppUserController extends BaseController {
}
return R.ok(map);
}
}
return R.fail(HttpStatus.ERROR_STATUS, "openid获取失败");
}
@ -241,22 +243,27 @@ public class XhpcAppUserController extends BaseController {
*/
@ApiOperation("支付宝授权")
@PostMapping("/alipayEmpower")
public AjaxResult alipayEmpower(@RequestParam String code) throws Exception {
public AjaxResult alipayEmpower(@RequestParam String code,String tenantId) throws Exception {
if("".equals(tenantId) || null==tenantId){
tenantId="000000";
}
R r = settingConfigService.settingConfig(1, tenantId);
if(r !=null && r.getCode()==200){
XhpcSettingConfig xhpcSettingConfig = (XhpcSettingConfig)r.getData();
/** 初始化 **/
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
/** 支付宝网关 **/
certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
/** 应用id如何获取请参考https://opensupport.alipay.com/support/helpcenter/190/201602493024 **/
certAlipayRequest.setAppId(environment.getProperty("ALIPAYAPPID"));
certAlipayRequest.setAppId(xhpcSettingConfig.getZfbAppId());
/** 应用私钥, 如何获取请参考https://opensupport.alipay.com/support/helpcenter/207/201602471154?ant_source=antsupport **/
certAlipayRequest.setPrivateKey(environment.getProperty("ALIPAYPRIVATEKEY"));
certAlipayRequest.setPrivateKey(xhpcSettingConfig.getZfbPrivateKey());
/** 应用公钥证书路径,下载后保存位置的绝对路径 **/
certAlipayRequest.setCertPath(environment.getProperty("CERTPATH"));
certAlipayRequest.setCertPath(xhpcSettingConfig.getZfbAppCertPublicKey());
/** 支付宝公钥证书路径,下载后保存位置的绝对路径 **/
certAlipayRequest.setAlipayPublicCertPath(environment.getProperty("PUBLICCERTPATH"));
certAlipayRequest.setAlipayPublicCertPath(xhpcSettingConfig.getZfbAppCertPublicKey());
/** 支付宝根证书路径,下载后保存位置的绝对路径 **/
certAlipayRequest.setRootCertPath(environment.getProperty("ROOTCRETPATH"));
certAlipayRequest.setRootCertPath(xhpcSettingConfig.getZfbAlipayRootCert());
/** 设置签名类型 **/
certAlipayRequest.setSignType("RSA2");
/** 设置请求格式固定值json **/
@ -275,10 +282,12 @@ public class XhpcAppUserController extends BaseController {
if (response.isSuccess()) {
System.out.println("调用成功");
} else {
System.out.println("调用失败");
return AjaxResult.error("获取失败");
}
return AjaxResult.success(response);
}
return AjaxResult.error("获取失败");
}
/**
* 注销账号