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.util.ToolUtil; import com.stylefeng.guns.modular.account.controller.AppOrderController; import com.stylefeng.guns.modular.account.model.TEnterpriseWithdrawal; import com.stylefeng.guns.modular.account.server.ITEnterpriseWithdrawalService; import com.stylefeng.guns.modular.account.server.UserWithdrawalService; import com.stylefeng.guns.modular.cloudPayment.example.DepositExample; import com.stylefeng.guns.modular.cloudPayment.req.DepositReq; import com.stylefeng.guns.modular.enums.PaymentTypeEnum; import com.stylefeng.guns.modular.huifu.biz.DouGongPayUtil; import com.stylefeng.guns.modular.system.model.Company; import com.stylefeng.guns.modular.system.model.UserInfo; import com.stylefeng.guns.modular.system.model.UserWithdrawal; import com.stylefeng.guns.modular.system.service.ICompanyService; import com.stylefeng.guns.modular.system.service.IUserInfoService; import com.stylefeng.guns.modular.system.util.PayMoneyUtil; 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.Date; import java.util.Map; import static org.bouncycastle.asn1.x500.style.RFC4519Style.uid; /** * 支付回调 */ @RestController @RequestMapping("/base") public class UserCallbackController { @Autowired private IUserInfoService userInfoService; @Autowired private PayMoneyUtil payMoneyUtil; @Autowired private UserWithdrawalService userWithdrawalService; @Autowired private AppOrderController appOrderController; /** * 斗拱充值回调函数 } * @param request */ @ResponseBody @PostMapping("/DGCancelUserBalance") public void DGCancelUserBalance(HttpServletRequest request, HttpServletResponse response) { try { System.out.println("DG额充值回调函数"); 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); 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)) { String[] split = out_trade_no.split("_"); Integer uid = Integer.valueOf(split[0]); Integer id = Integer.valueOf(split[1]); String payAmt = jsonObject.get("pay_amt").toString(); userInfoService.payCancelUserBalance(Integer.valueOf(uid), order_id, Integer.valueOf(id), 1); // appOrderController.createAllocationReqUser(1, Integer.valueOf(uid), 1, new BigDecimal(payAmt).divide(new BigDecimal(100)).doubleValue()); // cloudPay(Integer.valueOf(uid),map.get("total_fee"),map.get("transaction_id"),1); PrintWriter out = response.getWriter(); out.write(200); out.flush(); out.close(); } } } catch (Exception e) { e.printStackTrace(); } } /** * 斗拱充值回调函数 } * @param request */ @ResponseBody @PostMapping("/DGCancelUserBalanceZfb") public void DGCancelUserBalanceZfb(HttpServletRequest request, HttpServletResponse response) { try { System.out.println("DG额充值回调函数"); 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); 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)) { String[] split = out_trade_no.split("_"); Integer uid = Integer.valueOf(split[0]); Integer id = Integer.valueOf(split[1]); String payAmt = jsonObject.get("pay_amt").toString(); userInfoService.payCancelUserBalance(Integer.valueOf(uid), order_id, Integer.valueOf(id), 2); // cloudPay(Integer.valueOf(uid),map.get("total_fee"),map.get("transaction_id"),1); PrintWriter out = response.getWriter(); out.write(200); out.flush(); out.close(); } } } catch (Exception e) { e.printStackTrace(); } } /** * 微信余额充值回调函数 * @param request */ @ResponseBody @PostMapping("/wxCancelUserBalance") public void wxCancelUserBalance(HttpServletRequest request, HttpServletResponse response) { try { System.out.println("微信余额充值回调函数"); Map map = payMoneyUtil.weixinpayCallback(request); String id = map.get("out_trade_no"); String order_id = map.get("transaction_id"); String uid = map.get("attach"); String result = map.get("result"); userInfoService.payCancelUserBalance(Integer.valueOf(uid), order_id, Integer.valueOf(id), 1); appOrderController.createAllocationReqUser(1, Integer.valueOf(uid), 1, new BigDecimal(map.get("total_fee")).divide(new BigDecimal(100)).doubleValue()); // cloudPay(Integer.valueOf(uid),map.get("total_fee"),map.get("transaction_id"),1); PrintWriter out = response.getWriter(); out.write(result); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 支付宝余额充值回调 * @param request */ @ResponseBody @PostMapping("/aliCancelUserBalance") public void aliCancelUserBalance(HttpServletRequest request, HttpServletResponse response) { try { System.out.println("支付宝余额充值回调"); Map map = payMoneyUtil.alipayCallback(request); String id = map.get("out_trade_no"); String order_id = map.get("trade_no"); String uid = map.get("passback_params"); userInfoService.payCancelUserBalance(Integer.valueOf(uid), order_id, Integer.valueOf(id), 2); appOrderController.createAllocationReqUser(1, Integer.valueOf(uid), 1, new BigDecimal(map.get("total_amount")).doubleValue()); // cloudPay(Integer.valueOf(uid),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(); } } public 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); UserInfo userInfo = userInfoService.selectById(uid); UserWithdrawal driverWith = userWithdrawalService.selectOne(new EntityWrapper() .eq("phone", userInfo.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); } catch (Exception e) { e.printStackTrace(); } } }