支付调整
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
||||
/target/
|
||||
/logs/
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.sqx.modules.pay.controller;
|
||||
|
||||
import com.sqx.common.utils.Result;
|
||||
import com.sqx.modules.app.annotation.Login;
|
||||
import com.sqx.modules.common.service.CommonInfoService;
|
||||
import com.sqx.modules.yskPay.resp.PublicResp;
|
||||
import com.sqx.modules.yskPay.resp.WxScanPayResp;
|
||||
import com.sqx.modules.yskPay.service.ThirdPayService;
|
||||
@@ -25,22 +26,30 @@ import java.math.BigDecimal;
|
||||
public class ThirdPayController {
|
||||
final private ThirdPayService thirdPayService;
|
||||
|
||||
public ThirdPayController(ThirdPayService thirdPayService) {
|
||||
private final CommonInfoService commonRepository;
|
||||
|
||||
public ThirdPayController(ThirdPayService thirdPayService, CommonInfoService commonRepository) {
|
||||
this.thirdPayService = thirdPayService;
|
||||
this.commonRepository = commonRepository;
|
||||
}
|
||||
|
||||
// @Login
|
||||
@ApiOperation("微信支付宝支付订单")
|
||||
@PostMapping("/wxPayJsApiOrder")
|
||||
// public Result wxPayJsApiOrder(@RequestAttribute("userId") Long userId, Long parentId, Integer type, Long addressId, Integer orderType) throws Exception {
|
||||
public Result wxPayJsApiOrder() {
|
||||
public Result wxPayJsApiOrder(@RequestAttribute("userId") Long userId, Long parentId, Integer type, Long addressId, Integer orderType) throws Exception {
|
||||
// public Result wxPayJsApiOrder() {
|
||||
|
||||
PublicResp<WxScanPayResp> scanpay = thirdPayService.scanpay("https://paymentapi.sxczgkj.cn", "66691a6afdf641f0bf1dc701",
|
||||
String thirdPayUrl = commonRepository.findOne(421).getValue();
|
||||
String thirdUserAppId = commonRepository.findOne(422).getValue();
|
||||
String thirdUserStoreId = commonRepository.findOne(424).getValue();
|
||||
String thirdUserKey = commonRepository.findOne(423).getValue();
|
||||
String userWxAppId = commonRepository.findOne(45).getValue();
|
||||
|
||||
PublicResp<WxScanPayResp> scanpay = thirdPayService.scanpay(thirdPayUrl, thirdUserAppId,
|
||||
"外卖订单", "外卖订单", 1L,
|
||||
"WECHAT", "wxd88fffa983758a30", "or1l869Gqm3jUeqbmuL1TFKK4XrM", "1.80.169.5",
|
||||
"202407310944110001", "S2406120331",
|
||||
"https://paymentapi.sxczgkj.cn", null,
|
||||
"jikd52TefZcSPI5hRWrfPSpQcXZrbqshbnLmqH6UattqspIDEzjbGvZmfwTW58RMf1XuPhN4zE1GbIjKy3b1oabgOx5n79faT93Si6i7g2IPSQJAln2NNsCSNynHIJ8p");
|
||||
"WECHAT", userWxAppId, "o5Fun5ff9AWRjL2K0_sRTjMJHCPQ", "1.80.169.5",
|
||||
"202407310944110003", thirdUserStoreId,
|
||||
"https://paymentapi.sxczgkj.cn", null, thirdUserKey);
|
||||
|
||||
System.out.println(scanpay);
|
||||
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
package com.sqx.modules.pay.controller.app;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.sqx.common.utils.Result;
|
||||
import com.sqx.modules.app.annotation.Login;
|
||||
import com.sqx.modules.pay.dao.PayDetailsDao;
|
||||
import com.sqx.modules.pay.service.WxService;
|
||||
import com.sqx.modules.yskPay.utils.RequestWrapper;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -19,6 +24,7 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author fang
|
||||
@@ -93,6 +99,22 @@ public class ApiWeiXinPayController {
|
||||
return notify(2,request);
|
||||
}
|
||||
|
||||
@PostMapping("/thirdPayNotify")
|
||||
@ApiOperation("用户端支付回调")
|
||||
public String thirdPayNotify(HttpServletRequest request) {
|
||||
Map<String, Object> map = getParameterMap(request);
|
||||
log.info("支付回调返回信息:{}", JSONUtil.toJsonStr(map));
|
||||
if (map != null && !map.isEmpty() && map.containsKey("code") && "000000".equals(map.get("code") + "")) {
|
||||
JSONObject object = JSONUtil.parseObj(map.get("bizData"));
|
||||
if (object.containsKey("state") && "TRADE_SUCCESS".equals(object.getStr("state"))) {
|
||||
// String tradeNo=object.get("payOrderId").toString();
|
||||
String orderNo = object.getStr("mchOrderNo");
|
||||
return wxService.thirdPayBack(orderNo);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@PostMapping("/notifyShop")
|
||||
@ApiOperation("商户端app微信回调")
|
||||
public String notifyShop(HttpServletRequest request) {
|
||||
@@ -184,4 +206,16 @@ public class ApiWeiXinPayController {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private Map getParameterMap(HttpServletRequest request) {
|
||||
RequestWrapper requestWrapper = new RequestWrapper(request);
|
||||
String body = requestWrapper.getBody();
|
||||
if (StrUtil.isNotEmpty(body)) {
|
||||
return JSONUtil.toBean(body, Map.class);
|
||||
}else {
|
||||
Map<String, String[]> parameterMap = request.getParameterMap();
|
||||
return parameterMap;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -20,6 +20,8 @@ public interface WxService {
|
||||
|
||||
String payBackShop(String resXml, Integer type);
|
||||
|
||||
String thirdPayBack(String orderNo);
|
||||
|
||||
boolean wxRefund(PayDetails payDetails);
|
||||
|
||||
Result balanceOrder(Long userId,Long parentId, Integer orderType, Long addressId);
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package com.sqx.modules.pay.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.github.wxpay.sdk.WXPay;
|
||||
import com.github.wxpay.sdk.WXPayConstants;
|
||||
import com.github.wxpay.sdk.WXPayUtil;
|
||||
@@ -50,6 +52,9 @@ import com.sqx.modules.utils.AmountCalUtils;
|
||||
import com.sqx.modules.utils.MD5Util;
|
||||
import com.sqx.modules.utils.SenInfoCheckUtil;
|
||||
import com.sqx.modules.utils.WXConfigUtil;
|
||||
import com.sqx.modules.yskPay.resp.PublicResp;
|
||||
import com.sqx.modules.yskPay.resp.WxScanPayResp;
|
||||
import com.sqx.modules.yskPay.service.ThirdPayService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.gavaghan.geodesy.Ellipsoid;
|
||||
@@ -126,6 +131,9 @@ public class WxServiceImpl implements WxService {
|
||||
@Autowired
|
||||
private ShopMessageService shopMessageService;
|
||||
|
||||
@Autowired
|
||||
private ThirdPayService thirdPayService;
|
||||
|
||||
private ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true);
|
||||
|
||||
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
@@ -426,7 +434,7 @@ public class WxServiceImpl implements WxService {
|
||||
if (type == 4 || type == 5) {
|
||||
return aliPayController.payVip(Double.valueOf(one.getValue()), type, userId, generalOrder, 4);
|
||||
}
|
||||
return pay(Double.valueOf(one.getValue()), type, userId, generalOrder, 4);
|
||||
return pay2(Double.valueOf(one.getValue()), type, userId, generalOrder, 4);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@@ -474,7 +482,7 @@ public class WxServiceImpl implements WxService {
|
||||
if (type == 4 || type == 5) {
|
||||
return aliPayController.aliPayMoney(money.doubleValue(), type, userId, generalOrder, 2);
|
||||
}
|
||||
return pay(money.doubleValue(), type, userId, generalOrder, 2);
|
||||
return pay2(money.doubleValue(), type, userId, generalOrder, 2);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -597,7 +605,84 @@ public class WxServiceImpl implements WxService {
|
||||
return aliPayController.payAppOrders(payMoney.doubleValue(), type, tbOrder2.getUserId(), generalOrder, 1);
|
||||
}
|
||||
appOrderDao.updateById(tbOrder1);
|
||||
return pay(payMoney.doubleValue(), type, tbOrder2.getUserId(), generalOrder, 1);
|
||||
return pay2(payMoney.doubleValue(), type, tbOrder2.getUserId(), generalOrder, 1);
|
||||
}
|
||||
|
||||
private Result pay2(Double moneys, Integer type, Long userId, String outTradeNo, Integer classify) throws Exception {
|
||||
//h5服务域名配置
|
||||
CommonInfo oneu = commonInfoService.findOne(19);
|
||||
|
||||
String notifyUrl = oneu.getValue() + "/sqx_fast/app/wxPay/thirdPayNotify";
|
||||
|
||||
String body = "";
|
||||
if (classify == 1) {
|
||||
//订单类型
|
||||
body = "下单支付";
|
||||
} else if (classify == 2) {
|
||||
body = "充值余额";
|
||||
} else if (classify == 4) {
|
||||
body = "购买会员";
|
||||
}
|
||||
Double mul = AmountCalUtils.mul(moneys, 100);
|
||||
|
||||
String openId;
|
||||
UserEntity userEntity = userService.queryByUserId(userId);
|
||||
if (type == 2) {
|
||||
openId = userEntity.getWxOpenId();
|
||||
} else {
|
||||
openId = userEntity.getOpenId();
|
||||
}
|
||||
|
||||
String thirdPayUrl = commonInfoService.findOne(421).getValue();
|
||||
String thirdUserAppId = commonInfoService.findOne(422).getValue();
|
||||
String thirdUserStoreId = commonInfoService.findOne(424).getValue();
|
||||
String thirdUserKey = commonInfoService.findOne(423).getValue();
|
||||
String userWxAppId = commonInfoService.findOne(45).getValue();
|
||||
|
||||
PublicResp<WxScanPayResp> scanpay = thirdPayService.scanpay(thirdPayUrl, thirdUserAppId,
|
||||
body, body, mul.longValue(),
|
||||
"WECHAT", userWxAppId, openId, "127.0.0.1",
|
||||
outTradeNo, thirdUserStoreId,
|
||||
notifyUrl, null, thirdUserKey);
|
||||
|
||||
if (scanpay != null) {
|
||||
if ("000000".equals(scanpay.getCode())) {
|
||||
WxScanPayResp wxScanPayResp = scanpay.getObjData();
|
||||
if ("TRADE_AWAIT".equals(wxScanPayResp.getState())) {
|
||||
PayDetails payDetails = payDetailsDao.selectByOrderId(outTradeNo);
|
||||
if (payDetails == null) {
|
||||
String money = String.valueOf(mul.intValue());
|
||||
payDetails = new PayDetails();
|
||||
payDetails.setState(0);
|
||||
payDetails.setCreateTime(sdf.format(new Date()));
|
||||
payDetails.setOrderId(outTradeNo);
|
||||
payDetails.setUserId(userId);
|
||||
payDetails.setMoney(AmountCalUtils.divide(Double.parseDouble(money), 100));
|
||||
payDetails.setClassify(classify);
|
||||
payDetails.setType(type);
|
||||
payDetailsDao.insert(payDetails);
|
||||
}
|
||||
|
||||
String payInfo = wxScanPayResp.getPayInfo();
|
||||
JSONObject jsonObj = JSONObject.parseObject(payInfo);
|
||||
Map<String, String> param = new HashMap<>();
|
||||
param.put("appid", jsonObj.getString("appid"));
|
||||
param.put("partnerid", "");
|
||||
param.put("prepayid", "");
|
||||
param.put("package", jsonObj.getString("package"));
|
||||
param.put("noncestr", jsonObj.getString("nonceStr"));
|
||||
param.put("timestamp", jsonObj.getString("timeStamp"));
|
||||
param.put("sign", jsonObj.getString("paySign"));
|
||||
param.put("outtradeno", jsonObj.getString("tradeNo"));
|
||||
param.put("signType", jsonObj.getString("signType"));
|
||||
return Result.success().put("data", param);
|
||||
} else {
|
||||
return Result.error(scanpay.getMsg());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Result.error("支付失败");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -996,6 +1081,20 @@ public class WxServiceImpl implements WxService {
|
||||
return xmlBack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String thirdPayBack(String orderNo) {
|
||||
PayDetails payDetails = payDetailsDao.selectByOrderId(orderNo);
|
||||
//设置查询条件
|
||||
if (payDetails.getState() == 0) {
|
||||
payDetailsDao.updateState(payDetails.getId(), 1, sdf.format(new Date()), "");
|
||||
//调用处理接口
|
||||
//业务操作
|
||||
notfiy(payDetails);
|
||||
|
||||
}
|
||||
return "SUCCESS";
|
||||
}
|
||||
|
||||
|
||||
public String getGeneralOrder() {
|
||||
Date date = new Date();
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
package com.sqx.modules.yskPay.utils;
|
||||
|
||||
import javax.servlet.ReadListener;
|
||||
import javax.servlet.ServletInputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletRequestWrapper;
|
||||
import java.io.*;
|
||||
|
||||
public class RequestWrapper extends HttpServletRequestWrapper {
|
||||
private final String body;
|
||||
|
||||
public RequestWrapper(HttpServletRequest request) {
|
||||
super(request);
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
BufferedReader bufferedReader = null;
|
||||
InputStream inputStream = null;
|
||||
try {
|
||||
inputStream = request.getInputStream();
|
||||
if (inputStream != null) {
|
||||
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
|
||||
char[] charBuffer = new char[128];
|
||||
int bytesRead = -1;
|
||||
while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
|
||||
stringBuilder.append(charBuffer, 0, bytesRead);
|
||||
}
|
||||
} else {
|
||||
stringBuilder.append("");
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
} finally {
|
||||
if (inputStream != null) {
|
||||
try {
|
||||
inputStream.close();
|
||||
}
|
||||
catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
if (bufferedReader != null) {
|
||||
try {
|
||||
bufferedReader.close();
|
||||
}
|
||||
catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
body = stringBuilder.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ServletInputStream getInputStream() throws IOException {
|
||||
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
|
||||
ServletInputStream servletInputStream = new ServletInputStream() {
|
||||
@Override
|
||||
public boolean isFinished() {
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public boolean isReady() {
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public void setReadListener(ReadListener readListener) {
|
||||
}
|
||||
@Override
|
||||
public int read() throws IOException {
|
||||
return byteArrayInputStream.read();
|
||||
}
|
||||
};
|
||||
return servletInputStream;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public BufferedReader getReader() throws IOException {
|
||||
return new BufferedReader(new InputStreamReader(this.getInputStream()));
|
||||
}
|
||||
|
||||
public String getBody() {
|
||||
return this.body;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user