|
@@ -1,5 +1,6 @@
|
|
|
package com.pj.api.jh.service;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.util.NumberUtil;
|
|
|
import cn.hutool.core.util.RandomUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
@@ -7,6 +8,7 @@ import cn.hutool.http.HttpUtil;
|
|
|
import cn.hutool.json.JSONObject;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import cn.hutool.log.StaticLog;
|
|
|
+import com.pj.api.jh.task.CheckPayStatusTask;
|
|
|
import com.pj.api.jh.utils.JhHttpUtils;
|
|
|
import com.pj.api.jh.utils.MerchantApiUtil;
|
|
|
import com.pj.api.jh.bo.JhNotifyBO;
|
|
@@ -16,6 +18,9 @@ import com.pj.api.wx.service.WxService;
|
|
|
import com.pj.current.config.JhConfig;
|
|
|
import com.pj.current.config.MyConfig;
|
|
|
import com.pj.current.config.PartConfig;
|
|
|
+import com.pj.current.task.TaskService;
|
|
|
+import com.pj.project.tb_order.TbOrder;
|
|
|
+import com.pj.project.tb_order.TbOrderService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -25,6 +30,7 @@ import javax.annotation.Resource;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
|
|
@@ -49,25 +55,34 @@ public class JhService {
|
|
|
|
|
|
@Resource
|
|
|
JhHttpUtils jhHttpUtils;
|
|
|
+ @Resource
|
|
|
+ private TbOrderService tbOrderService;
|
|
|
+ @Resource
|
|
|
+ private TaskService taskService;
|
|
|
|
|
|
- public JSONObject initPay(HttpServletRequest request) throws Exception {
|
|
|
+ public Map<String, ?> initPay(HttpServletRequest request) throws Exception {
|
|
|
+ if (!jhConfig.isEnable()) {
|
|
|
+ return wxService.prePay(request);
|
|
|
+ }
|
|
|
String money = request.getParameter("money");
|
|
|
String openid = request.getParameter("openid");
|
|
|
String desc = request.getParameter("desc");
|
|
|
String businessId = request.getParameter("b");
|
|
|
String c = request.getParameter("c");
|
|
|
String a = request.getParameter("a");
|
|
|
+ String tradeType = request.getParameter("tradeType");
|
|
|
+ String businessType = request.getParameter("businessType");
|
|
|
Attach atchMap = new Attach();
|
|
|
atchMap.setC(c).setB(businessId).setA(a);
|
|
|
- String out_trade_no = RandomUtil.randomString(30);
|
|
|
- StaticLog.info("outTradeNo:{}",out_trade_no);
|
|
|
+ String out_trade_no = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + RandomUtil.randomNumbers(6);
|
|
|
+ StaticLog.info("outTradeNo:{}", out_trade_no);
|
|
|
Map<String, Object> params = new HashMap<>();
|
|
|
params.put("attach", JSONUtil.toJsonStr(atchMap));
|
|
|
params.put("productType", jhConfig.getProductType());
|
|
|
params.put("businessMerchantNo", jhConfig.getBusinessMerchantNo());
|
|
|
params.put("openId", openid);
|
|
|
params.put("merchantNo", jhConfig.getBusinessMerchantNo());
|
|
|
- params.put("tradeType", jhConfig.getTradeType());
|
|
|
+ params.put("tradeType", businessType);
|
|
|
params.put("subTradeType", "");
|
|
|
String total_free = partConfig.isTestEnv() ? "0.01" : money + "";
|
|
|
log.info("order price:{}", total_free);
|
|
@@ -85,45 +100,62 @@ public class JhService {
|
|
|
params.put("sign", sign);
|
|
|
String jsonParam = JSONUtil.toJsonStr(params);
|
|
|
String initPayUrl = jhConfig.getServerUrl() + "/uaps-web-gateway/cnpPay/initPay";
|
|
|
- String result = jhHttpUtils.postJson(initPayUrl,jsonParam);
|
|
|
+ String result = jhHttpUtils.postJson(initPayUrl, jsonParam);
|
|
|
StaticLog.info("调用聚合支付返回:{}", result);
|
|
|
JSONObject jsonResult = JSONUtil.parseObj(result);
|
|
|
- if (StrUtil.equals("0000", jsonResult.get("resultCode").toString())) {
|
|
|
- JSONObject payMessage = JSONUtil.parseObj(jsonResult.get("payMessage").toString());
|
|
|
+ if (StrUtil.equals("0000", jsonResult.getStr("resultCode"))) {
|
|
|
+ JSONObject payMessage = JSONUtil.parseObj(jsonResult.getStr("payMessage"));
|
|
|
String p = payMessage.getStr("package");
|
|
|
Map<String, String> r = wxService.getPayP(payMessage.getStr("timeStamp"), payMessage.getStr("nonceStr"), openid, p);
|
|
|
StaticLog.info("re:{}", JSONUtil.toJsonStr(r));
|
|
|
JSONObject object = JSONUtil.parseObj(payMessage);
|
|
|
+
|
|
|
object.set("outTradeNo", out_trade_no);
|
|
|
- return object;
|
|
|
+ TbOrder tbOrder = new TbOrder();
|
|
|
+ tbOrder.setAttach(JSONUtil.toJsonStr(atchMap))
|
|
|
+ .setOpenid(openid)
|
|
|
+ .setOrderTime(new Date())
|
|
|
+ .setOutTradeNo(out_trade_no).setPrice(money);
|
|
|
+ tbOrderService.save(tbOrder);
|
|
|
+ taskService.addTask(new CheckPayStatusTask(RandomUtil.randomNumbers(12), 2000, out_trade_no));
|
|
|
+ return BeanUtil.beanToMap(object);
|
|
|
}
|
|
|
throw new Exception("支付信息有误");
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- public JSONObject checkPayResult(String outTradeNo) {
|
|
|
- String url = jhConfig.getServerUrl() + "/uaps-web-gateway/query/singleOrder";
|
|
|
+ public Map<String, Object> buildCheckParams(String outTradeNo) {
|
|
|
Map<String, Object> params = new HashMap<>();
|
|
|
params.put("businessMerchantNo", jhConfig.getBusinessMerchantNo());
|
|
|
params.put("outTradeNo", outTradeNo);
|
|
|
String paySecrit = jhConfig.getPaySecret();
|
|
|
String sign = MerchantApiUtil.getSign(params, paySecrit);
|
|
|
params.put("sign", sign);
|
|
|
- String result = jhHttpUtils.postForm(url,params);
|
|
|
- StaticLog.info("调用聚合支付查询支付接口返回:{}", result);
|
|
|
+ return params;
|
|
|
+ }
|
|
|
+
|
|
|
+ public JSONObject checkPayResult(String outTradeNo) {
|
|
|
+ String url = jhConfig.getServerUrl() + "/uaps-web-gateway/query/singleOrder";
|
|
|
+ Map<String, Object> params = buildCheckParams(outTradeNo);
|
|
|
+ String result = jhHttpUtils.postForm(url, params);
|
|
|
return JSONUtil.parseObj(result);
|
|
|
}
|
|
|
+
|
|
|
@Async
|
|
|
public void notifyResult(JhNotifyBO bo) {
|
|
|
- StaticLog.info("聚合支付回调:{}", JSONUtil.toJsonStr(bo));
|
|
|
- if (!"SUCCESS".equals(bo.getTradeStatus().toUpperCase())){
|
|
|
+ String orderStatus=bo.getTradeStatus();
|
|
|
+ if (!"SUCCESS".equals(orderStatus) && !"FINISH".equals(orderStatus)) {
|
|
|
return;
|
|
|
}
|
|
|
- NotifyBO notifyBO=new NotifyBO();
|
|
|
+ NotifyBO notifyBO = new NotifyBO();
|
|
|
+ String outTradeNo = bo.getOutTradeNo();
|
|
|
notifyBO.setOutTradeNo(bo.getOutTradeNo())
|
|
|
.setAttach(bo.getAttach())
|
|
|
.setTransactionId(bo.getBankTrxNo())
|
|
|
- .setTotalFee(NumberUtil.mul(bo.getOrderPrice(),100+"").toString());
|
|
|
+ .setTotalFee(NumberUtil.mul(bo.getOrderPrice(), 100 + "").toString());
|
|
|
wxService.WxNotify(notifyBO);
|
|
|
+ TbOrder tbOrder = tbOrderService.findByOutTradeNo(outTradeNo);
|
|
|
+ tbOrder.setOrderStatus(orderStatus)
|
|
|
+ .setTransactionId(bo.getBankTrxNo())
|
|
|
+ .setCompleteDate(bo.getSuccessTime());
|
|
|
}
|
|
|
}
|