|
@@ -17,6 +17,7 @@ import com.parksong.util.Http.OkHttpUtil;
|
|
import com.parksong.util.JwtUtils;
|
|
import com.parksong.util.JwtUtils;
|
|
import com.parksong.util.WxPayUtil;
|
|
import com.parksong.util.WxPayUtil;
|
|
import com.parksong.util.enums.ExpressStatusEnum;
|
|
import com.parksong.util.enums.ExpressStatusEnum;
|
|
|
|
+import lombok.SneakyThrows;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -29,6 +30,7 @@ import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import java.io.BufferedOutputStream;
|
|
import java.io.BufferedOutputStream;
|
|
import java.io.BufferedReader;
|
|
import java.io.BufferedReader;
|
|
|
|
+import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
import java.io.InputStreamReader;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
@@ -192,9 +194,22 @@ public class AppletsServiceImpl implements AppletsService {
|
|
.build();
|
|
.build();
|
|
//返回下单接口
|
|
//返回下单接口
|
|
Map<String, Object> objectMap = wxPayUtil.wxPay(orderPay);
|
|
Map<String, Object> objectMap = wxPayUtil.wxPay(orderPay);
|
|
|
|
+ if(objectMap.get("appid")!=null){
|
|
|
|
+ //添加充值记录
|
|
|
|
+ RechargeStatistics rechargeStatistics = new RechargeStatistics();
|
|
|
|
+ rechargeStatistics.setAmount(amount);
|
|
|
|
+ rechargeStatistics.setPayWay("2");
|
|
|
|
+ rechargeStatistics.setOutTradeNo(out_trade_no);
|
|
|
|
+ //已付款,待回调确认
|
|
|
|
+ rechargeStatistics.setPayStatus("0");
|
|
|
|
+ rechargeStatistics.setAccountId(user.getId().toString());
|
|
|
|
+ rechargeStatistics.setOperator("admin");
|
|
|
|
+ appletsMapper.insertSelective(rechargeStatistics);
|
|
|
|
+ }
|
|
return objectMap;
|
|
return objectMap;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public Map<String, Object> notifyUrl(HttpServletRequest request, HttpServletResponse response) throws Exception {
|
|
public Map<String, Object> notifyUrl(HttpServletRequest request, HttpServletResponse response) throws Exception {
|
|
|
|
|
|
log.info("--------------回调开始----------------");
|
|
log.info("--------------回调开始----------------");
|
|
@@ -217,51 +232,47 @@ public class AppletsServiceImpl implements AppletsService {
|
|
//sb为微信返回的xml
|
|
//sb为微信返回的xml
|
|
String notityXml = sb.toString();
|
|
String notityXml = sb.toString();
|
|
String resXml = "";
|
|
String resXml = "";
|
|
|
|
+ log.info("------notityXml---------:"+notityXml);
|
|
Map map = wxPayUtil.doXMLParse(notityXml);
|
|
Map map = wxPayUtil.doXMLParse(notityXml);
|
|
String returnCode = (String) map.get("return_code");
|
|
String returnCode = (String) map.get("return_code");
|
|
log.info("returnCode:"+returnCode);
|
|
log.info("returnCode:"+returnCode);
|
|
if ("SUCCESS".equals(returnCode)) {
|
|
if ("SUCCESS".equals(returnCode)) {
|
|
- //验证签名是否正确
|
|
|
|
- Map<String, String> validParams = wxPayUtil.paraFilter(map);
|
|
|
|
- //回调验签时需要去除sign和空值参数
|
|
|
|
- String prestr = wxPayUtil.createLinkString(validParams);
|
|
|
|
- //生成签名
|
|
|
|
- String mysign = wxPayUtil.sign(prestr, weChatKey, "utf-8").toUpperCase();
|
|
|
|
- //根据微信官网的介绍,此处不仅对回调的参数进行验签,还需要对返回的金额与系统订单的金额进行比对等
|
|
|
|
- log.info("----------mysign:"+mysign+"--------------map.get(\"sign\"):"+map.get("sign"));
|
|
|
|
- if (mysign.equals(map.get("sign").toString())) {
|
|
|
|
-
|
|
|
|
- String openid = (String) map.get("openid");
|
|
|
|
- String cash_fee = (String) map.get("cash_fee");
|
|
|
|
- String day = String.format("%02d", LocalDate.now().getDayOfMonth());
|
|
|
|
- CacheTool rechargeCacheTool = CacheTool.initrechargeCacheTool();
|
|
|
|
- String number = String.format("%06d", rechargeCacheTool.incrBy(day, 1).intValue());
|
|
|
|
- BigDecimal amount = new BigDecimal(cash_fee).divide(new BigDecimal(100));
|
|
|
|
-
|
|
|
|
- //根据openid获取用户信息
|
|
|
|
- ExpressDept user = appletsMapper.userDetailByOpenId(openid);
|
|
|
|
- //添加充值记录
|
|
|
|
- RechargeStatistics rechargeStatistics = new RechargeStatistics();
|
|
|
|
- rechargeStatistics.setAmount(amount);
|
|
|
|
- rechargeStatistics.setPayWay("2");
|
|
|
|
- rechargeStatistics.setOutTradeNo(day+number);
|
|
|
|
- rechargeStatistics.setPayStatus("1");
|
|
|
|
- rechargeStatistics.setAccountId(user.getId().toString());
|
|
|
|
- rechargeStatistics.setOperator("admin");
|
|
|
|
- int a = appletsMapper.insertSelective(rechargeStatistics);
|
|
|
|
-
|
|
|
|
- //更新余额
|
|
|
|
- ExpressDeptAccount userAccount = new ExpressDeptAccount();
|
|
|
|
- userAccount.setId(user.getId());
|
|
|
|
- userAccount.setBalance(amount);
|
|
|
|
- int b =appletsMapper.updateDeptAccount(userAccount);
|
|
|
|
-
|
|
|
|
- log.info("----------a:"+a+"--------------b:"+b);
|
|
|
|
-
|
|
|
|
|
|
+ try{
|
|
|
|
+ //验证签名是否正确
|
|
|
|
+ Map<String, String> validParams = wxPayUtil.paraFilter(map);
|
|
|
|
+ //回调验签时需要去除sign和空值参数
|
|
|
|
+ String prestr = wxPayUtil.createLinkString(validParams);
|
|
|
|
+ //生成签名
|
|
|
|
+ String mysign = wxPayUtil.sign(prestr, weChatKey, "utf-8").toUpperCase();
|
|
|
|
+ //根据微信官网的介绍,此处不仅对回调的参数进行验签,还需要对返回的金额与系统订单的金额进行比对等
|
|
|
|
+ if (mysign.equals(map.get("sign").toString())) {
|
|
|
|
+ String openid = (String) map.get("openid");
|
|
|
|
+ String cash_fee = (String) map.get("cash_fee");
|
|
|
|
+ String out_trade_no = (String) map.get("out_trade_no");
|
|
|
|
+ CacheTool rechargeCacheTool = CacheTool.initrechargeCacheTool();
|
|
|
|
+ BigDecimal amount = new BigDecimal(cash_fee).divide(new BigDecimal(100));
|
|
|
|
+ //根据openid获取用户信息
|
|
|
|
+ ExpressDept user = appletsMapper.userDetailByOpenId(openid);
|
|
|
|
+ //添加充值记录
|
|
|
|
+ RechargeStatistics rechargeStatistics = new RechargeStatistics();
|
|
|
|
+ rechargeStatistics.setOutTradeNo(out_trade_no);
|
|
|
|
+ rechargeStatistics.setPayStatus("1");
|
|
|
|
+ int a = appletsMapper.updateSelectiveByOutTradeNo(rechargeStatistics);
|
|
|
|
+ if(a!=0){
|
|
|
|
+ //更新余额
|
|
|
|
+ ExpressDeptAccount userAccount = new ExpressDeptAccount();
|
|
|
|
+ userAccount.setId(user.getId());
|
|
|
|
+ userAccount.setBalance(amount);
|
|
|
|
+ int b =appletsMapper.updateDeptAccount(userAccount);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }catch (Exception ex){
|
|
|
|
+ log.info("--------exception--------"+ex);
|
|
|
|
+ }finally {
|
|
//返回通知微信已经接收到消息
|
|
//返回通知微信已经接收到消息
|
|
resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"
|
|
resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"
|
|
+ "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";
|
|
+ "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";
|
|
-
|
|
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>"
|
|
resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>"
|