nnnn
This commit is contained in:
@@ -14,7 +14,6 @@ import com.ijpay.core.kit.HttpKit;
|
||||
import com.ijpay.core.kit.WxPayKit;
|
||||
import com.ijpay.wxpay.WxPayApi;
|
||||
import com.ijpay.wxpay.model.UnifiedOrderModel;
|
||||
import com.ruoyi.cai.domain.OrderLogs;
|
||||
import com.ruoyi.cai.domain.PayConfig;
|
||||
import com.ruoyi.cai.domain.PayTrdConfig;
|
||||
import com.ruoyi.cai.dto.app.vo.pay.OrderPayStatusResp;
|
||||
@@ -24,24 +23,36 @@ import com.ruoyi.cai.pay.*;
|
||||
import com.ruoyi.cai.service.OrderLogsService;
|
||||
import com.ruoyi.cai.service.PayTrdConfigService;
|
||||
import com.ruoyi.cai.trdpay.TrdPayManager;
|
||||
import com.ruoyi.cai.trdpay.TrdPayProperties;
|
||||
import com.ruoyi.cai.trdpay.TrdPayTypeEnum;
|
||||
import com.ruoyi.cai.trdpay.V14Manager;
|
||||
import com.ruoyi.cai.trdpay.dto.NotifyResp;
|
||||
import com.ruoyi.cai.trdpay.dto.extend.V14ExtendMapDTO;
|
||||
import com.ruoyi.cai.trdpay.dto.v14.V14Token;
|
||||
import com.ruoyi.cai.trdpay.dto.v14.wechatJSAPI.WechatJSAPIResponse;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.common.helper.LoginHelper;
|
||||
import com.ruoyi.common.utils.ServletUtils;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.sun.org.apache.bcel.internal.generic.RETURN;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.client.config.RequestConfig;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -126,6 +137,82 @@ public class PayController {
|
||||
}
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private V14Manager v14Manager;
|
||||
|
||||
@PostMapping(value = "/efps/wx")
|
||||
@Operation(summary = "微信支付efps")
|
||||
@Log(title = "微信支付efps", businessType = BusinessType.OTHER, isSaveDb = true)
|
||||
@SaIgnore
|
||||
public R<WechatJSAPIResponse> efpsWx(HttpServletRequest request, @RequestBody V14PayDTO payDTO){
|
||||
String efpsToken = request.getHeader("Efps-Token");
|
||||
if(StringUtils.isBlank(efpsToken)){
|
||||
return R.fail(600,"支付失败,鉴权失败或者未找到订单");
|
||||
}
|
||||
V14Token v14Token = v14Manager.checkToken(efpsToken);
|
||||
if(v14Token == null){
|
||||
return R.fail(600,"支付失败,鉴权失败或者未找到订单");
|
||||
}
|
||||
PayTrdConfig payTrdConfig = payTrdConfigService.getById(v14Token.getPayTrdConfigId());
|
||||
if(payTrdConfig == null){
|
||||
return R.fail(600,"支付失败,未找到支付通道信息");
|
||||
}
|
||||
PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(v14Token.getOrderNo());
|
||||
if(payOrderInfo == null){
|
||||
return R.fail(600,"支付失败,未找到订单");
|
||||
}
|
||||
try {
|
||||
V14ExtendMapDTO extendMap = JSON.parseObject(payTrdConfig.getExtendData(), V14ExtendMapDTO.class);
|
||||
String openId = getOpenIdByCode(payDTO.getWx_code(), extendMap.getMinAppId(), extendMap.getMinSecret());
|
||||
payOrderInfo.setOpenId(openId);
|
||||
} catch (IOException e) {
|
||||
log.error("获取openid失败",e);
|
||||
return R.fail(600,"微信登录失败");
|
||||
}
|
||||
WechatJSAPIResponse pay = v14Manager.pay(payOrderInfo, payTrdConfig);
|
||||
return R.ok(pay);
|
||||
}
|
||||
|
||||
|
||||
public String getOpenIdByCode(String code,String appId,String secret) throws IOException {
|
||||
String url = "https://api.weixin.qq.com/sns/jscode2session";
|
||||
url += "?appid="+appId;//自己的appid
|
||||
url += "&secret="+secret;//自己的appSecret
|
||||
url += "&js_code=" + code;
|
||||
url += "&grant_type=authorization_code";
|
||||
url += "&connect_redirect=1";
|
||||
String res = null;
|
||||
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
|
||||
// DefaultHttpClient();
|
||||
HttpGet httpget = new HttpGet(url); //GET方式
|
||||
CloseableHttpResponse response = null;
|
||||
// 配置信息
|
||||
RequestConfig requestConfig = RequestConfig.custom() // 设置连接超时时间(单位毫秒)
|
||||
.setConnectTimeout(5000) // 设置请求超时时间(单位毫秒)
|
||||
.setConnectionRequestTimeout(5000) // socket读写超时时间(单位毫秒)
|
||||
.setSocketTimeout(5000) // 设置是否允许重定向(默认为true)
|
||||
.setRedirectsEnabled(false).build(); // 将上面的配置信息 运用到这个Get请求里
|
||||
httpget.setConfig(requestConfig); // 由客户端执行(发送)Get请求
|
||||
response = httpClient.execute(httpget); // 从响应模型中获取响应实体
|
||||
HttpEntity responseEntity = response.getEntity();
|
||||
log.info("获取openId 响应状态为: {}", response.getStatusLine());
|
||||
if (responseEntity != null) {
|
||||
res = EntityUtils.toString(responseEntity);
|
||||
log.info("获取openId url:{}, res:{}", url,res);
|
||||
}
|
||||
// 释放资源
|
||||
if (httpClient != null) {
|
||||
httpClient.close();
|
||||
}
|
||||
if (response != null) {
|
||||
response.close();
|
||||
}
|
||||
JSONObject jo = JSON.parseObject(res);
|
||||
return jo.getString("openid");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@PostMapping(value = "/merge/ali")
|
||||
@Operation(summary = "支付宝聚合支付")
|
||||
@Log(title = "支付宝聚合支付", businessType = BusinessType.OTHER, isSaveDb = true)
|
||||
@@ -348,7 +435,7 @@ public class PayController {
|
||||
@Operation(hidden = true)
|
||||
@Log(title = "第三方微信支付回调", businessType = BusinessType.OTHER, isSaveDb = false)
|
||||
@SaIgnore
|
||||
public String trdWxNotifyUrl(HttpServletRequest request,@PathVariable("type") String type) {
|
||||
public String trdWxNotifyUrl(HttpServletRequest request, HttpServletResponse response, @PathVariable("type") String type) {
|
||||
try {
|
||||
if(type == null){
|
||||
log.error("收到第三方微信支付回调,支付类型为空");
|
||||
@@ -359,6 +446,22 @@ public class PayController {
|
||||
log.error("收到第三方微信支付回调,未找到支付类型 type={}",type);
|
||||
return "failure";
|
||||
}
|
||||
if(trdPayTypeEnum == TrdPayTypeEnum.V14){
|
||||
try {
|
||||
JSONObject jsonObject = v14Manager.notifyDeal(request);
|
||||
PrintWriter writer = response.getWriter();
|
||||
writer.print(jsonObject.toJSONString());
|
||||
writer.close();
|
||||
}catch (Exception e){
|
||||
log.error("v14微信支付回调异常!",e);
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("returnCode", "0001");
|
||||
PrintWriter writer = response.getWriter();
|
||||
writer.print(jsonObject.toJSONString());
|
||||
writer.close();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
Map<String, String> params = AliPayApi.toMap(request);
|
||||
log.info("收到第三方微信支付回调 {}:{}",trdPayTypeEnum.name(), JSON.toJSONString(params));
|
||||
NotifyResp notifyResp = trdPayManager.getNotifyResp(params, trdPayTypeEnum);
|
||||
|
||||
@@ -20,7 +20,7 @@ spring:
|
||||
driverClassName: com.mysql.cj.jdbc.Driver
|
||||
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
|
||||
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
|
||||
url: jdbc:mysql://124.222.254.188:4306/cai_wanyan?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
|
||||
url: jdbc:mysql://124.222.254.188:4306/cai_v6?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
|
||||
username: root
|
||||
password: tyYrk487R4y7FENM
|
||||
# 从库数据源
|
||||
|
||||
25
ruoyi-admin/src/main/resources/v14/EFPS-PublicKey.cer
Normal file
25
ruoyi-admin/src/main/resources/v14/EFPS-PublicKey.cer
Normal file
@@ -0,0 +1,25 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEIjCCAwqgAwIBAgIUJciVbai01yHdyTuMJ3UAOf6uWPQwDQYJKoZIhvcNAQEL
|
||||
BQAwgZYxCzAJBgNVBAYTAkNOMTkwNwYDVQQKDDDljJfkuqzlpKnlqIHor5rkv6Hn
|
||||
lLXlrZDllYbliqHmnI3liqHmnInpmZDlhazlj7gxFTATBgNVBAsMDOS8geS4muiv
|
||||
geS5pjE1MDMGA1UEAwws5aSp5aiB6K+a5L+h5pWw5a2X6K6k6K+B5Lit5b+D5LyB
|
||||
5Lia6K+B5LmmQ0EwHhcNMTgwMTExMDgwNjE4WhcNMTkwMTExMDgwNjE4WjCBjDE5
|
||||
MDcGA1UECgww5YyX5Lqs5aSp5aiB6K+a5L+h55S15a2Q5ZWG5Yqh5pyN5Yqh5pyJ
|
||||
6ZmQ5YWs5Y+4MRgwFgYDVQQLDA/ov5Dnu7TmlK/mjIHpg6gxNTAzBgNVBAMMLOaY
|
||||
k+elqOiBlOaUr+S7mOaciemZkOWFrOWPuC1FRlBT5ZWG5oi36Zeo5oi3MIIBIjAN
|
||||
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAptTghT1nY9twX4VKrvJigGB/klcs
|
||||
P8tH+9aV5TofKskh8PQg8neTSprPMmEsidFGMJ26a4x/E88nJ6wMHAZqeWP0x64/
|
||||
GLtIff8r+WZjqBYP9WNiW71NcAsoJEBrlLlLrc5W/9mC+3z0oWYiz+LB9E+uMeCV
|
||||
3ocHP42Z6oGeCV6jSe1Sx2UBsCEROYh1nTnZQ13pHIghqO1Fc5MZTcTW5k3zviuF
|
||||
L7IJYUW79AIzh9SttcMbUZqGWkf808Ux3BhZzgUTL0g76fpCRjPilmlCJ/NdyGJ4
|
||||
8E0IfMXHeTq3uiEjnO2nzsEV4zvhNoii0F2iH+fgMXBDwGd9O3mLv23gIQIDAQAB
|
||||
o3AwbjAJBgNVHRMEAjAAMAsGA1UdDwQEAwIFoDBUBgNVHR8ETTBLMEmgR6BFhkNo
|
||||
dHRwOi8vdG9wY2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0kIAoK
|
||||
JENBX1NFUklBTE5VTUJFUiQkMA0GCSqGSIb3DQEBCwUAA4IBAQCUEFIx+vOeOQi2
|
||||
ZWR8TnADKYYTNsqv52e9WBz8VKfjbzIDA/hXqJUvtylyyEL4pBn82xG0WMk9UaAE
|
||||
EGrkpdA0figlbUInyXZE8WZYcE/7Nlr4aupH+JETp1OqvAsS0l5M2mH4OdVMDA/K
|
||||
pdwTMBa0it7f3QA8k2lXalHlifi35jrKj2q3DFKvy2n9pcwblPX2jpC7pZ1Y66tq
|
||||
7SapaGyCo12Q6o0vSCgGodFkZsczYmGdp4ZbphUbACVQ3Lhw/moqB3PadT6V0jB6
|
||||
4BDDHnkDkaoUI5XUr1BMmTAyy+chBLHzk83Dx9ioNHdF0rHpEyUD73GfV11R7BIy
|
||||
zl5g8FpF
|
||||
-----END CERTIFICATE-----
|
||||
BIN
ruoyi-admin/src/main/resources/v14/user-rsa.pfx
Normal file
BIN
ruoyi-admin/src/main/resources/v14/user-rsa.pfx
Normal file
Binary file not shown.
Reference in New Issue
Block a user