Browse Source

处理支付回调

master
xyiege 3 years ago
parent
commit
c09a3a5e13
  1. 6
      src/main/java/cn/chjyj/szwh/constant/ChConstant.java
  2. 4
      src/main/java/cn/chjyj/szwh/controller/api/GoodsController.java
  3. 24
      src/main/java/cn/chjyj/szwh/controller/api/PayController.java
  4. 9
      src/main/java/cn/chjyj/szwh/service/PayService.java
  5. 74
      src/main/java/cn/chjyj/szwh/service/impl/PayServiceImpl.java
  6. 10
      src/main/resources/mapper/szwh/OrderMapper.xml
  7. 12
      src/test/java/cn/chjyj/szwh/PayTest.java
  8. 8
      src/test/java/cn/chjyj/szwh/mapper/GoodsMapperTest.java

6
src/main/java/cn/chjyj/szwh/constant/ChConstant.java

@ -33,8 +33,6 @@ public class ChConstant {
* 43位字符长度 * 43位字符长度
*/ */
public static final String SYS_SECRECT="mQ4jvhc5UAY1HDu87jfR5rkDkVRvKF1ZeaUpuVpBnNG"; public static final String SYS_SECRECT="mQ4jvhc5UAY1HDu87jfR5rkDkVRvKF1ZeaUpuVpBnNG";
/** //发票存放目录
* 系统加密密码 public static final String INVOICE="./uploads/pdf/";
*/
public static final String SYS_SECRECT_SHORT_WORD="ChhongLtd";
} }

4
src/main/java/cn/chjyj/szwh/controller/api/GoodsController.java

@ -121,7 +121,7 @@ public class GoodsController extends BaseController {
* *
* @return * @return
*/ */
@PostMapping("/manuimport") @RequestMapping("/manuimport")
public JSONObject manuImport(@RequestBody String jsonStr) { public JSONObject manuImport(@RequestBody String jsonStr) {
JSONObject request = JSONObject.parseObject(jsonStr); JSONObject request = JSONObject.parseObject(jsonStr);
int icount = goodsService.manuImportGoods(request); int icount = goodsService.manuImportGoods(request);
@ -152,7 +152,7 @@ public class GoodsController extends BaseController {
return outjson; return outjson;
} }
@PostMapping("/getTypeGoods/{type}") @RequestMapping("/getTypeGoods/{type}")
public JSONObject getTypeGoodsRest(@PathVariable String type) { public JSONObject getTypeGoodsRest(@PathVariable String type) {
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
List<Goods> goodsList = goodsService.getTypeGoods(type, "", ""); List<Goods> goodsList = goodsService.getTypeGoods(type, "", "");

24
src/main/java/cn/chjyj/szwh/controller/api/PayController.java

@ -1,11 +1,19 @@
package cn.chjyj.szwh.controller.api; package cn.chjyj.szwh.controller.api;
import cn.chjyj.szwh.controller.BaseController; import cn.chjyj.szwh.controller.BaseController;
import cn.chjyj.szwh.service.PayService;
import cn.chjyj.szwh.utils.pay.HttpUtil;
import cn.chjyj.szwh.utils.pay.security.HttpsUtil;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -16,6 +24,10 @@ import java.util.Map;
@RestController @RestController
@RequestMapping(value = "/api/Pay",method = RequestMethod.POST) @RequestMapping(value = "/api/Pay",method = RequestMethod.POST)
public class PayController extends BaseController { public class PayController extends BaseController {
private static Log log = LogFactory.getLog(PayController.class);
@Autowired
private PayService payService;
/** /**
* 拼装付款方式 * 拼装付款方式
* @param batchcode * @param batchcode
@ -30,13 +42,17 @@ public class PayController extends BaseController {
} }
/** /**
* 支付回调 * 支付结果回调
* 支付网关过来的数据非json格式
* @return * @return
*/ */
@RequestMapping("/payCallback") @RequestMapping("/payCallback")
public JSONObject payCallback(){ public JSONObject payCallback(HttpServletRequest request){
Map paydata=new HashMap<>(); log.info("支付网关返回:"+request.toString());
paydata.put("method",""); JSONObject json = HttpUtil.getParamTreeMap_Utf8(request);
payService.payCallback(json);
jsonObject.put("response","00");
jsonObject.put("message","成功");
return jsonObject; return jsonObject;
} }
} }

9
src/main/java/cn/chjyj/szwh/service/PayService.java

@ -1,5 +1,7 @@
package cn.chjyj.szwh.service; package cn.chjyj.szwh.service;
import com.alibaba.fastjson2.JSONObject;
/** /**
* 支付服务接口 * 支付服务接口
*/ */
@ -16,4 +18,11 @@ public interface PayService {
* @return * @return
*/ */
public int payFinishOperate(String batchcode); public int payFinishOperate(String batchcode);
/**
* 处理支付回调
* @return
*/
public int payCallback(JSONObject jsonObject);
} }

74
src/main/java/cn/chjyj/szwh/service/impl/PayServiceImpl.java

@ -1,14 +1,20 @@
package cn.chjyj.szwh.service.impl; package cn.chjyj.szwh.service.impl;
import cn.chjyj.szwh.bean.Goods;
import cn.chjyj.szwh.bean.Order; import cn.chjyj.szwh.bean.Order;
import cn.chjyj.szwh.bean.OrderGoodsDetail; import cn.chjyj.szwh.bean.OrderGoodsDetail;
import cn.chjyj.szwh.bean.OrderUser; import cn.chjyj.szwh.bean.OrderUser;
import cn.chjyj.szwh.mapper.GoodsMapper;
import cn.chjyj.szwh.mapper.OrderGoodsDetailMapper; import cn.chjyj.szwh.mapper.OrderGoodsDetailMapper;
import cn.chjyj.szwh.mapper.OrderMapper; import cn.chjyj.szwh.mapper.OrderMapper;
import cn.chjyj.szwh.mapper.OrderUserMapper; import cn.chjyj.szwh.mapper.OrderUserMapper;
import cn.chjyj.szwh.service.PayService; import cn.chjyj.szwh.service.PayService;
import cn.chjyj.szwh.utils.SzwhApiUtils; import cn.chjyj.szwh.utils.SzwhApiUtils;
import cn.chjyj.szwh.utils.pay.security.AesEncryption;
import com.alibaba.fastjson2.JSONObject;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -20,12 +26,16 @@ import java.util.*;
@Service @Service
@Transactional @Transactional
public class PayServiceImpl implements PayService { public class PayServiceImpl implements PayService {
private static Log log = LogFactory.getLog(PayServiceImpl.class);
@Autowired @Autowired
private OrderMapper orderMapper; private OrderMapper orderMapper;
@Autowired @Autowired
private OrderUserMapper orderUserMapper; private OrderUserMapper orderUserMapper;
@Autowired @Autowired
private OrderGoodsDetailMapper orderGoodsDetailMapper; private OrderGoodsDetailMapper orderGoodsDetailMapper;
//商品信息
@Autowired
private GoodsMapper goodsMapper;
/** /**
* 关闭七日以前的已经支付了的订单 * 关闭七日以前的已经支付了的订单
@ -42,6 +52,11 @@ public class PayServiceImpl implements PayService {
} }
} }
/**
* 订单支付完成后的操作
* @param batchcode
* @return
*/
@Override @Override
public int payFinishOperate(String batchcode) { public int payFinishOperate(String batchcode) {
//获取订单信息 //获取订单信息
@ -110,4 +125,63 @@ public class PayServiceImpl implements PayService {
} }
return 0; return 0;
} }
@Override
public int payCallback(JSONObject json) {
// 待解密的
String data = json.getString("Data");
log.info("支付回调 payCallback:"+data);
//todo 后续改造为可以配置型
String url="https://t.masget.com/openapi/rest";
String sckey ="gRAZZKiNw0UbTuF9";;// 密钥
String appid="910000198"; //应用id
String session="iba3t9dqln8etmcaceq1xtqr7urevia1"; //token
try {
//解密
String desencrypt = AesEncryption.Desencrypt(data, sckey, sckey);
//解密
log.info("支付网关返回解密结果:"+desencrypt);
// 转为json
JSONObject dataObject = JSONObject.parseObject(desencrypt);
//支付完成
if (dataObject.getIntValue("respcode") == 2) {
//订单编号
String ordersn = dataObject.getString("ordernumber");
//查找订单并更新订单状态
Order order =orderMapper.getOrderByBatchcode(ordersn);
if(order!=null){ //订单存在,理论上应该是存在的
//查找订单中的商品
List<OrderGoodsDetail> ordgdlist = orderGoodsDetailMapper.getOrderGoodsDetailByBatchCode(ordersn);
//增加销售记录
for(OrderGoodsDetail ordg:ordgdlist){
// 根据goodsislicode 查询
Goods goods = goodsMapper.getGoodsByIsli(ordg.getGoodsIslicode());
// 更新订单状态
Map upgmap = new HashMap();
upgmap.put("sale_count",goods.getSaleCount()+1);
goodsMapper.updateGoods(upgmap,goods.getId());
}
//更新订单字段
Map upmap = new HashMap();
upmap.put("status",2);
upmap.put("pay_status",2);
upmap.put("paymenttime",new Date());
upmap.put("payid",dataObject.getString("payorderid")); //支付流水单号
//更新订单指定字段
orderMapper.updateOrderStatus(upmap,order.getId());
}
//订单信息发送至分发系统
//买家发票信息等
//卖家发票
// $this->payFinishOperate($batchcode);
// $this->invoiceBuyOperate($batchcode);
// $this->invoiceSellerOperate($batchcode);
}
}catch (Exception ex){
log.error(ex.getLocalizedMessage());
}
return 0;
}
} }

10
src/main/resources/mapper/szwh/OrderMapper.xml

@ -23,7 +23,7 @@
from from
<include refid="tbName"/> <include refid="tbName"/>
where id>#{startRs} limit #{pageSize} where id>#{startRs} limit #{pageSize}
) as mm ORDER BY mm.id DESC; ) as mm ORDER BY mm.id DESC
</select> </select>
<!--id查询--> <!--id查询-->
@ -39,7 +39,7 @@
SELECT <include refid="column"/> SELECT <include refid="column"/>
FROM <include refid="tbName"/> FROM <include refid="tbName"/>
WHERE status=#{status} WHERE status=#{status}
AND createtime <![CDATA[ <= ]]> #{sdate}; AND createtime <![CDATA[ <= ]]> #{sdate}
ORDER BY id DESC ORDER BY id DESC
</select> </select>
@ -49,14 +49,12 @@
<include refid="column"/> <include refid="column"/>
from from
<include refid="tbName"/> <include refid="tbName"/>
where batchcode=#{batchcode} limit 1; where batchcode=#{batchcode} limit 1
</select> </select>
<!-- 统计订单总数 --> <!-- 统计订单总数 -->
<select id="countAllOrder" resultType="java.lang.Integer"> <select id="countAllOrder" resultType="java.lang.Integer">
select count(*) from select count(*) from <include refid="tbName"/>
<include refid="tbName"/>
;
</select> </select>
<!--订单条件查询--> <!--订单条件查询-->

12
src/test/java/cn/chjyj/szwh/PayTest.java

@ -29,4 +29,16 @@ public class PayTest {
ex.printStackTrace(); ex.printStackTrace();
} }
} }
@Test
public void dedtest(){
String sckey="gRAZZKiNw0UbTuF9";
String data ="kfz3sNCvoH6jMGoM7NFwfQuLpuG50zIu-c5DKJcJovqVOUSoy4V9k0M5VOSQd7hiUeiueTnFNBsnASusHRY9IqoH08vXsUoy4GfX69ykRBsWz0lB1DSNyX3QPkP5QOK_o_admPpLAeY9p2MIoSE_00CDzqtaDfHRaAxxQn-3Mf0yJeyHEOTlAY0WX4VlLpsFyQXUJIUvRvzWndaT0PgPYIpUI5NtECpVvlsaHMjeLBWc8AOWcnP_jnY3H6gYFDdg5qP4dehP-eSuRjWnN7tIv98goBMBYvzlSrwL-gx0CYur60CtwxYGVuAmTjspSyPXvpZDYTHbzD_9ifgv2BuyUkHbbny3mkAgm27UOvxqCTwuf7IrZR8olilQXhHvXeIMEg9lhaCYOhczkP-DAqqEF9LgirGVwJZanyzoOtw03VPyUEBgB_dvZthpi_Gbv-CBRTyf8dNX23PkXumuxou0EnVGMpU0N0JxWu87ZTs43XkJ7uE5n_FpsFbgLJA2i9tO3PsBBl80XJ9QeKmeCkMIsqHqLw0vFUVSoTUd8iD8oQ8HUEDvGfQ1JvCsHqWXPw-NCtSxR6G3pxaR17Yj90Vbs92e4jG55Bf-vTLv8eTB6rig3hYaDiFkvexnkT5vXKdFZqhgQfCS4IwXJf5jvlfFfo21fIZQJiSb2UWQVM5Sq0bFObbGmabGG-6Y7y8R9sLdtVrk1YZqD7m1q65ylZriPKGelz9-leBHSn_Ql62GGgbxJzspidrMA2Mc4oO6_uzX0ybbxNte3GJUtwzPXULVnnHeCvy0WGf98x0DUkKpoVJcSl8VzaJGAV5TRM4hD3gNXygrXrEcN9-0aS0D246gBQFbH_EQOOTq4ddAkhEJInWQS1pRDUuldBbFZl9iAJCNVs41irv7dDyQhpTn1Taqg20G-WmTitHXnmofdQenMtEcYX481Wart6c9W5Lqde2AeOyMXTr5wTXhYNkizEIvtCjmhwaw6TCes18neqQGJTESQ0ed0qWZ_BZ6ndJcmW6skMDc4wyUnDc1OfZXRCZSn_G-UGCFS26JOaRak2ei6AMWihZ2dq63fu1nfJ9rRmxsqfWI2FmWO5Wn75U-cL7XBxLgPPguIKihcNVl_v3r13IZa6CyffUihLeWL5ALBwuojW_RMQPqVDN3ni1tdZELFBb3nXNUA2ibFf1nPsZrFT5vR0Iw4pvcgfY5jhfxYwZK85LeM3CkI6KR1v-b_D_sOJKxavEE0-yhepv1bcvl9i0=";
try{
String destr = AesEncryption.Desencrypt(data,sckey,sckey);
System.out.println(destr);
}catch (Exception ex){
ex.printStackTrace();
}
}
} }

8
src/test/java/cn/chjyj/szwh/mapper/GoodsMapperTest.java

@ -129,4 +129,12 @@ public class GoodsMapperTest {
int ret =goodsMapper.updateGoodsFieldInId("goods_status","2","544"); int ret =goodsMapper.updateGoodsFieldInId("goods_status","2","544");
System.out.println(ret); System.out.println(ret);
} }
//增加销售记录
@Test
public void addgoodsSaleCount(){
Map map = new HashMap();
map.put("sale_count","sale_count=sale_count+1");
int x= goodsMapper.updateGoods(map,1);
System.out.println(x);
}
} }
Loading…
Cancel
Save