package com.stylefeng.guns.modular.api; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.huifu.bspay.sdk.opps.core.utils.RsaUtils; import com.stylefeng.guns.core.exception.GunsException; import com.stylefeng.guns.core.exception.ServiceExceptionEnum; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.account.model.TEnterpriseWithdrawal; import com.stylefeng.guns.modular.account.service.ITEnterpriseWithdrawalService; import com.stylefeng.guns.modular.account.service.UserWithdrawalService; import com.stylefeng.guns.modular.account.util.Base64Util; import com.stylefeng.guns.modular.cloudPayment.example.AllocationExample; import com.stylefeng.guns.modular.cloudPayment.example.DepositExample; import com.stylefeng.guns.modular.cloudPayment.req.AllocationReq; import com.stylefeng.guns.modular.cloudPayment.req.DepositReq; import com.stylefeng.guns.modular.enums.PaymentTypeEnum; import com.stylefeng.guns.modular.system.model.Company; import com.stylefeng.guns.modular.system.model.Driver; import com.stylefeng.guns.modular.system.model.Reassign; import com.stylefeng.guns.modular.system.model.UserWithdrawal; import com.stylefeng.guns.modular.system.service.ICompanyService; import com.stylefeng.guns.modular.system.service.IDriverService; import com.stylefeng.guns.modular.system.service.IReassignService; import com.stylefeng.guns.modular.system.util.PayMoneyUtil; import com.unionpay.upyzt.resp.AllocationResp; import com.unionpay.upyzt.resp.DepositResp; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; /** * 第三方支付回调控制器 */ @RestController @RequestMapping("/base") public class CallbackController { @Autowired private IReassignService reassignService; @Autowired private PayMoneyUtil payMoneyUtil; @Autowired private IDriverService driverService; @Autowired private ICompanyService companyService; @Autowired private ITEnterpriseWithdrawalService enterpriseWithdrawalService; @Autowired private UserWithdrawalService userWithdrawalService; @ResponseBody @PostMapping("/DGReassign") public void DGReassign(HttpServletRequest request, HttpServletResponse response){ try { String sign =request.getParameter("sign"); String resp_data = request.getParameter("resp_data"); System.out.println(sign); System.out.println(resp_data); resp_data = resp_data.replaceAll("& #40;", "(").replaceAll("& #41;",")"); boolean verify = RsaUtils.verify(resp_data, "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsWrruP9JBxrUd8uEX5Z8y7pg/UIr5RNHSgDnHqNI1hbi2MfTzB5vZ275wSFFaLDD9BesgDWqsUepPS/opROlDCg9y6WYH8mkN23NmHL9F8kT48OMmH722am+Hp0XVMMwXqA0oNt4f7oW6kDemjZW8/RT4vIE7cyxoxSsVRvjqSpx9wDgFLPWh3o0pHQaoxLyeUsGBATHFrxEDlosBvsuXjMcgjPKXALrcemzKOhBmBkLgyxNVmh61ZK+FNXd+/X4PeZlnWf54NRQAUKe1308E6IIaszo+CjneKuhj1m/X4f7AIvxAqlhuCV5E/DfKRmGopxaWqdtE960Y/H4SmBh2wIDAQAB", sign); // Map map = payMoneyUtil.weixinpayCallback(request); if(verify){ JSONObject jsonObject = JSONObject.parseObject(resp_data); String order_id = jsonObject.get("out_trans_id").toString(); String out_trade_no = jsonObject.get("req_seq_id").toString(); String trans_stat = jsonObject.get("trans_stat").toString(); if("S".equals(trans_stat)){ // TODO 司机云闪付 改派微信回调支付充值 // String[] s = id.split("_"); // if(Integer.valueOf(s[1]) == 3) {//跨城订单 // System.out.println("跨城订单"); // String[] split1 = s[0].split(","); // List reassigns = reassignService.selectBatchIds(Arrays.asList(split1)); // cloudPay(reassigns.get(0).getOriginalDriverId(),map.get("total_fee"),map.get("transaction_id"),1); // }else { // Reassign reassign = reassignService.selectById(s[0]); // cloudPay(reassign.getOriginalDriverId(),map.get("total_fee"),map.get("transaction_id"),1); // } PrintWriter out = response.getWriter(); out.write(200); out.flush(); out.close(); String[] split = out_trade_no.split("_"); reassignService.payReassign(split[0], order_id, 1); } } }catch (Exception e){ e.printStackTrace(); } } @ResponseBody @PostMapping("/DGReassignZfb") public void DGReassignZfb(HttpServletRequest request, HttpServletResponse response){ try { String sign =request.getParameter("sign"); String resp_data = request.getParameter("resp_data"); System.out.println(sign); System.out.println(resp_data); resp_data = resp_data.replaceAll("& #40;", "(").replaceAll("& #41;",")"); boolean verify = RsaUtils.verify(resp_data, "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsWrruP9JBxrUd8uEX5Z8y7pg/UIr5RNHSgDnHqNI1hbi2MfTzB5vZ275wSFFaLDD9BesgDWqsUepPS/opROlDCg9y6WYH8mkN23NmHL9F8kT48OMmH722am+Hp0XVMMwXqA0oNt4f7oW6kDemjZW8/RT4vIE7cyxoxSsVRvjqSpx9wDgFLPWh3o0pHQaoxLyeUsGBATHFrxEDlosBvsuXjMcgjPKXALrcemzKOhBmBkLgyxNVmh61ZK+FNXd+/X4PeZlnWf54NRQAUKe1308E6IIaszo+CjneKuhj1m/X4f7AIvxAqlhuCV5E/DfKRmGopxaWqdtE960Y/H4SmBh2wIDAQAB", sign); // Map map = payMoneyUtil.weixinpayCallback(request); if(verify){ JSONObject jsonObject = JSONObject.parseObject(resp_data); String order_id = jsonObject.get("out_trans_id").toString(); String out_trade_no = jsonObject.get("req_seq_id").toString(); String trans_stat = jsonObject.get("trans_stat").toString(); if("S".equals(trans_stat)){ // TODO 司机云闪付 改派微信回调支付充值 // String[] s = id.split("_"); // if(Integer.valueOf(s[1]) == 3) {//跨城订单 // System.out.println("跨城订单"); // String[] split1 = s[0].split(","); // List reassigns = reassignService.selectBatchIds(Arrays.asList(split1)); // cloudPay(reassigns.get(0).getOriginalDriverId(),map.get("total_fee"),map.get("transaction_id"),1); // }else { // Reassign reassign = reassignService.selectById(s[0]); // cloudPay(reassign.getOriginalDriverId(),map.get("total_fee"),map.get("transaction_id"),1); // } PrintWriter out = response.getWriter(); out.write(200); out.flush(); out.close(); String[] split = out_trade_no.split("_"); reassignService.payReassign(split[0], order_id, 2); } } }catch (Exception e){ e.printStackTrace(); } } /** * 订单改派微信回调 * @param request */ @ResponseBody @PostMapping("/wxReassign") public void wxReassign(HttpServletRequest request, HttpServletResponse response){ try { Map map = payMoneyUtil.weixinpayCallback(request); if(null != map){ String id = map.get("out_trade_no"); String order_id = map.get("transaction_id"); String result = map.get("result"); if(ToolUtil.isNotEmpty(id) && ToolUtil.isNotEmpty(order_id)){ // TODO 司机云闪付 改派微信回调支付充值 System.out.println("订单改派支付宝回调"+map); // String[] s = id.split("_"); // if(Integer.valueOf(s[1]) == 3) {//跨城订单 // System.out.println("跨城订单"); // String[] split1 = s[0].split(","); // List reassigns = reassignService.selectBatchIds(Arrays.asList(split1)); // cloudPay(reassigns.get(0).getOriginalDriverId(),map.get("total_fee"),map.get("transaction_id"),1); // }else { // Reassign reassign = reassignService.selectById(s[0]); // cloudPay(reassign.getOriginalDriverId(),map.get("total_fee"),map.get("transaction_id"),1); // } PrintWriter out = response.getWriter(); out.write(result); out.flush(); out.close(); reassignService.payReassign(id, order_id, 1); } } }catch (Exception e){ e.printStackTrace(); } } /** * 订单改派支付宝回调 * @param request */ @ResponseBody @PostMapping("/aliReassign") public void aliReassign(HttpServletRequest request, HttpServletResponse response){ try { Map map = payMoneyUtil.alipayCallback(request); if(null != map){ String id = map.get("out_trade_no"); String order_id = map.get("trade_no"); if(ToolUtil.isNotEmpty(id) && ToolUtil.isNotEmpty(order_id)){ reassignService.payReassign(id, order_id, 2); } System.out.println("订单改派支付宝回调"+map); // TODO 司机云闪付 改派支付宝回调支付充值 // String[] s = id.split("_"); // if(Integer.valueOf(s[1]) == 3) {//跨城订单 // System.out.println("跨城订单"); // String[] split1 = s[0].split(","); // List reassigns = reassignService.selectBatchIds(Arrays.asList(split1)); // cloudPay(reassigns.get(0).getOriginalDriverId(),map.get("total_amount"),map.get("trade_no"),0); // }else { // Reassign reassign = reassignService.selectById(s[0]); // cloudPay(reassign.getOriginalDriverId(),map.get("total_amount"),map.get("trade_no"),0); // } PrintWriter out = response.getWriter(); out.print("success"); out.flush(); out.close(); } }catch (Exception e){ e.printStackTrace(); } } private void cloudPay(Integer uid,String total_fee,String transaction_id,int type) { if(type==1){ BigDecimal divide = new BigDecimal(total_fee).divide(new BigDecimal(100)); total_fee=divide.toString(); } System.out.println("回调参数:"+total_fee+"---"+transaction_id); Driver driver = driverService.selectById(uid); if(Objects.isNull(driver)){ throw new RuntimeException("该司机不存在!"+uid); } // 查询平台账户 Company company = companyService.selectOne(new EntityWrapper() .eq("type", 1) .last("LIMIT 1")); System.out.println("查询平台账户==============="+company); // 查询平台开户信息 TEnterpriseWithdrawal enterpriseWithdrawal = enterpriseWithdrawalService.selectOne(new EntityWrapper() .eq("companyId", company.getId())); // 替换为公司id System.out.println("查询平台开户信息==============="+enterpriseWithdrawal); // TODO 司机进件信息 UserWithdrawal driverWith = userWithdrawalService.selectOne(new EntityWrapper() .eq("phone", driver.getPhone()) .last("LIMIT 1")); // DepositReq depositReq = new DepositReq(); // depositReq.setOutOrderNo(ToolUtil.getRandomString(32)); // depositReq.setTotalAmount(new BigDecimal(total_fee).multiply(new BigDecimal(100)).intValue()); // 总金额 // depositReq.setAmount(new BigDecimal(total_fee).multiply(new BigDecimal(100)).intValue()); // 支付金额 // depositReq.setDiscountAmount(0); // 优惠金额 // depositReq.setBalanceAcctId(driverWith.getBalanceAcctId()); // depositReq.setDepositType("1"); // depositReq.setPaymentType(PaymentTypeEnum.CUP_APP.getCode()); // depositReq.setPaymentTradeNo(transaction_id); // 系统交易流水号 // depositReq.setPaymentSucceededAt(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").format(new Date())); // depositReq.setOrderNo(transaction_id); // depositReq.setOrderAmount(new BigDecimal(total_fee).multiply(new BigDecimal(100)).longValue()); // depositReq.setProductName("司机支付充值"); // depositReq.setProductCount(1); try { // DepositResp depositResp = DepositExample.create(depositReq); // System.err.println(depositResp); AllocationReq allocationReq = new AllocationReq(); allocationReq.setPayBalanceAcctId(driverWith.getBalanceAcctId()); // 发送方 allocationReq.setRecvBalanceAcctId(enterpriseWithdrawal.getBalanceAcctId()); // 接收方 BigDecimal multiply = new BigDecimal(100).multiply(new BigDecimal(total_fee)); allocationReq.setAmount(multiply.intValue()); // 金额 allocationReq.setPassword(Base64Util.decode(enterpriseWithdrawal.getTransactionAuthorizationCode())); // 密码 allocationReq.setOrderNo(transaction_id); allocationReq.setOrderAmount(Long.valueOf(total_fee)); allocationReq.setProductName("订单改派"); allocationReq.setProductCount(1); AllocationResp allocationResp = AllocationExample.create(allocationReq); System.err.println("司机分账信息:"+allocationResp); } catch (Exception e) { e.printStackTrace(); } } }