package com.szwl.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.huifu.bspay.sdk.opps.core.utils.DateTools; import com.huifu.bspay.sdk.opps.core.utils.OkHttpClientTools; import com.szwl.common.HuifuBaseCommon; import com.szwl.config.OppsMerchantConfig; import com.szwl.constant.HuifuConstant; import com.szwl.feign.bean.SzwlFeign; import com.szwl.mapper.THuifuMchMapper; import com.szwl.model.bo.R; import com.szwl.model.entity.*; import com.szwl.service.*; import com.szwl.utils.HuifuUtils; import com.szwl.utils.IDGenerator; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; /** *

* 服务实现类 *

* * @author wuhs * @since 2023-07-17 */ @Slf4j @Service public class THuifuMchServiceImpl extends ServiceImpl implements THuifuMchService { @Autowired private THuifuTempOrderService huifuTempOrderService; @Autowired TOrderService orderService; @Autowired private TOrderDetailsService orderDetailsService; @Autowired SzwlFeign szwlFeign; @Autowired WechatPayInfoService wechatPayInfoService; @Override public String uniPay(String orderNo, BigDecimal amount, String productName, String productDesc, String notifyUrl, String frpCode, String openId, String appid, JSONObject acctSplitBunch, String companyType) throws Exception { String url = "https://api.huifu.com/v2/trade/payment/jspay"; HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig()); JSONObject request = new JSONObject(); request.put("req_seq_id", orderNo); request.put("req_date", DateTools.getCurrentDateYYYYMMDD()); if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) { request.put("huifu_id", HuifuConstant.SC_DIV_HUIFU_ID); } else { request.put("huifu_id", HuifuConstant.SZ_DIV_HUIFU_ID); } if (frpCode.equals("ALIPAY_NATIVE")) { request.put("trade_type", "A_NATIVE"); } if (frpCode.equals("WEIXIN_XCX")) { request.put("trade_type", "T_MINIAPP"); JSONObject wxData = new JSONObject(); wxData.put("sub_appid", appid); wxData.put("open_id", openId); request.put("wx_data", wxData); } request.put("trans_amt", amount); request.put("goods_desc", productName); request.put("notify_url", HuifuConstant.Notify_Url); // 分账明细 request.put("acct_split_bunch", acctSplitBunch.toJSONString()); // 签名:sign String s = JSON.toJSONString(request); String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class)); String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY); // 公共参数 JSONObject requestData = new JSONObject(); requestData.put("sys_id", HuifuConstant.SYS_ID); requestData.put("product_id", HuifuConstant.PRODUCT_ID); requestData.put("sign", sign); requestData.put("data", request); System.out.println("请求体:" + requestData); String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID); JSONObject result = JSONObject.parseObject(success); JSONObject data = result.getJSONObject("data"); String qrCode = data.getString("qr_code"); String payInfo = data.getString("pay_info"); if (frpCode.equals("ALIPAY_NATIVE")) { return qrCode; } if (frpCode.equals("WEIXIN_XCX")) { return payInfo; } return null; } @Override public String wetchatPay(THuifuTempOrder huifuTempOrder, String openid) throws Exception { String url = "https://api.huifu.com/v2/trade/payment/jspay"; HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig()); JSONObject request = new JSONObject(); String sn = HuifuUtils.initReqSeqId(); request.put("req_seq_id", sn); request.put("req_date", DateTools.getCurrentDateYYYYMMDD()); String companyType = huifuTempOrder.getCompanyType(); if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) { request.put("huifu_id", HuifuConstant.SC_DIV_HUIFU_ID); } else { request.put("huifu_id", HuifuConstant.SZ_DIV_HUIFU_ID); } request.put("trade_type", "T_JSAPI"); request.put("trans_amt", huifuTempOrder.getPrice()); String clientId = huifuTempOrder.getClientId(); String productName = huifuTempOrder.getProductName(); TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId)); String client6 = clientId.substring(clientId.length() - 6); String productName1 = ""; if (huifuTempOrder.getProductNumber() > 1) { if (equipment.getMachineType() == null || equipment.getMachineType().equals("0")) { productName1 = "棉花糖-" + equipment.getName() + "-" + client6; } else { productName1 = "爆米花-" + equipment.getName() + "-" + client6; } } else { productName1 = productName + "-" + equipment.getName() + "-" + client6; } request.put("goods_desc", productName1); request.put("notify_url", HuifuConstant.Notify_Url); request.put("remark", huifuTempOrder.getId()); // 分账明细 request.put("acct_split_bunch", huifuTempOrder.getAcctSplitBunch()); // 微信支付配置 JSONObject wxData = new JSONObject(); if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) { wxData.put("sub_appid", HuifuConstant.SC_WX_SUB_APP_ID); } else { wxData.put("sub_appid", HuifuConstant.SZ_WX_SUB_APP_ID); } wxData.put("open_id", openid); request.put("wx_data", wxData); // 签名:sign String s = JSON.toJSONString(request); String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class)); String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY); // 公共参数 JSONObject requestData = new JSONObject(); requestData.put("sys_id", HuifuConstant.SYS_ID); requestData.put("product_id", HuifuConstant.PRODUCT_ID); requestData.put("sign", sign); requestData.put("data", request); System.out.println("请求体:" + requestData); String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID); // 拿到返回参数 JSONObject result = JSONObject.parseObject(success); log.info("汇付返回参数:{}", result); JSONObject data = result.getJSONObject("data"); String payInfo = data.getString("pay_info"); JSONObject payInfoJson = JSONObject.parseObject(payInfo); // 获取timeStamp的值 String timeStamp = payInfoJson.getString("timeStamp"); // 获取nonceStr的值 String nonceStr = payInfoJson.getString("nonceStr"); // 获取package的值 String packageValue = payInfoJson.getString("package"); // 获取paySign的值 String paySign = payInfoJson.getString("paySign"); // 测试链接:http://szwltest.sunzee.com.cn/shenze String resultUrl = ""; if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) { resultUrl = HuifuConstant.SC_JUMP_URL + "/#/popPayment?" + "sn=" + sn + "&timeStamp=" + timeStamp + "&nonceStr=" + nonceStr + "&package=" + packageValue + "&paySign=" + paySign; } else { resultUrl = HuifuConstant.SZ_JUMP_URL + "/#/popPayment?" + "sn=" + sn + "&timeStamp=" + timeStamp + "&nonceStr=" + nonceStr + "&package=" + packageValue + "&paySign=" + paySign; } log.info("微信支付链接:{}", resultUrl); // 保存订单到数据库 TOrder tOrder = new TOrder(); String[] ignoreProperties = {"id", "createDate", "sn"}; BeanUtil.copyProperties(huifuTempOrder, tOrder, ignoreProperties); tOrder.setId(IDGenerator.orderID()); tOrder.setSn(sn); tOrder.setCreateDate(new Date()); tOrder.setModifyDate(new Date()); // 保存订单明细 TOrderDetails orderDetails = new TOrderDetails(); orderDetails.setAdminId(huifuTempOrder.getAdminId()); orderDetails.setCreateDate(new Date()); orderDetails.setOrderSn(sn); orderDetails.setCompanyType(huifuTempOrder.getCompanyType()); orderDetails.setRefundStatus("0"); orderDetails.setEquipmentId(huifuTempOrder.getEquipmentId()); orderDetails.setMachineType(huifuTempOrder.getMachineType()); if (huifuTempOrder.getProductNumber() != null && huifuTempOrder.getProductNumber() > 1) { Map map = new HashMap<>(); String[] products = huifuTempOrder.getNote().split(","); for (String product : products) { String[] parts = product.split(":"); // 商品名称-商品编号 String key = parts[0]; // 商品单价-商品数量 String value = parts[1]; map.put(key, value); } for (String key : map.keySet()) { // key:"玫瑰精灵-A01",value:"0.50-1" String value = map.get(key); String[] GoodsInfo = key.split("-"); String[] GoodsValue = value.split("-"); orderDetails.setId(HuifuUtils.initDetailsId()); orderDetails.setProductName(GoodsInfo[0]); orderDetails.setProductNo(GoodsInfo[1]); orderDetails.setPrice(new BigDecimal(GoodsValue[0]).divide(new BigDecimal(GoodsValue[1])).setScale(2)); orderDetails.setProductNumber(Integer.valueOf(GoodsValue[1])); orderDetails.setAmount(new BigDecimal(GoodsValue[0]).setScale(2)); orderDetailsService.save(orderDetails); } log.info("插入成功"); } else { // 订单明细表 orderDetails.setId(HuifuUtils.initDetailsId()); orderDetails.setPrice(huifuTempOrder.getPrice()); orderDetails.setProductName(huifuTempOrder.getProductName()); orderDetails.setProductNo(huifuTempOrder.getProductNo()); orderDetails.setProductNumber(huifuTempOrder.getProductNumber()); orderDetails.setAmount(huifuTempOrder.getPrice()); orderDetailsService.save(orderDetails); } orderService.save(tOrder); return resultUrl; } @Override public String cardPay(String orderNo, BigDecimal amount, String productName, String notifyUrl, String authCode, JSONObject acctSplitBunch, String companyType) throws Exception { String url = "https://api.huifu.com/v2/trade/payment/micropay"; HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig()); JSONObject request = new JSONObject(); request.put("req_seq_id", orderNo); request.put("req_date", DateTools.getCurrentDateYYYYMMDD()); if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) { request.put("huifu_id", HuifuConstant.SC_DIV_HUIFU_ID); } else { request.put("huifu_id", HuifuConstant.SZ_DIV_HUIFU_ID); } request.put("auth_code", authCode); request.put("trans_amt", amount); request.put("goods_desc", productName); request.put("notify_url", HuifuConstant.Notify_Url); // 分账明细 request.put("acct_split_bunch", acctSplitBunch.toJSONString()); // 安全信息 JSONObject riskCheckData = new JSONObject(); riskCheckData.put("ip_addr", "47.112.127.131"); request.put("risk_check_data", riskCheckData); // 签名:sign String s = JSON.toJSONString(request); String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class)); String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY); // 公共参数 JSONObject requestData = new JSONObject(); requestData.put("sys_id", HuifuConstant.SYS_ID); requestData.put("product_id", HuifuConstant.PRODUCT_ID); requestData.put("sign", sign); requestData.put("data", request); System.out.println("请求体:" + requestData); log.info("请求体:{}", requestData); String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID); JSONObject result = JSONObject.parseObject(success); JSONObject data = result.getJSONObject("data"); String transStat = data.getString("trans_stat"); String respDesc = data.getString("resp_desc"); if (transStat.equals(HuifuConstant.TRANS_STAT_S) || transStat.equals(HuifuConstant.TRANS_STAT_P)) { return HuifuConstant.RESP_CODE_0; } else { return respDesc; } } @Override public JSONObject payWechat(TOrder order, String openid) throws Exception { String url = "https://api.huifu.com/v2/trade/payment/jspay"; HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig()); JSONObject request = new JSONObject(); String sn = order.getSn(); request.put("req_seq_id", sn); request.put("req_date", DateTools.getCurrentDateYYYYMMDD()); String companyType = order.getCompanyType(); if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) { request.put("huifu_id", HuifuConstant.SC_DIV_HUIFU_ID); } else { request.put("huifu_id", HuifuConstant.SZ_DIV_HUIFU_ID); } request.put("trade_type", "T_JSAPI"); request.put("trans_amt", order.getPrice()); String clientId = order.getClientId(); String productName = order.getProductName(); TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId)); String client6 = clientId.substring(clientId.length() - 6); String goodsDesc = ""; if (order.getProductNumber() > 1) { if (equipment.getMachineType() == null || equipment.getMachineType().equals("0")) { goodsDesc = "棉花糖-" + equipment.getName() + "-" + client6; } else if (equipment.getMachineType().equals("1")) { goodsDesc = "爆米花-" + equipment.getName() + "-" + client6; } else if (equipment.getMachineType().equals("2")) { goodsDesc = "雪糕-" + equipment.getName() + "-" + client6; } } else { goodsDesc = productName + "-" + equipment.getName() + "-" + client6; } request.put("goods_desc", goodsDesc); request.put("notify_url", HuifuConstant.Notify_Url); // 分账明细 request.put("acct_split_bunch", order.getAcctSplitBunch()); // 微信支付配置 JSONObject wxData = new JSONObject(); if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) { wxData.put("sub_appid", HuifuConstant.SC_WX_SUB_APP_ID); } else { wxData.put("sub_appid", HuifuConstant.SZ_WX_SUB_APP_ID); } wxData.put("open_id", openid); request.put("wx_data", wxData); // 签名:sign String s = JSON.toJSONString(request); String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class)); String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY); // 公共参数 JSONObject requestData = new JSONObject(); requestData.put("sys_id", HuifuConstant.SYS_ID); requestData.put("product_id", HuifuConstant.PRODUCT_ID); requestData.put("sign", sign); requestData.put("data", request); String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID); // 拿到返回参数 JSONObject result = JSONObject.parseObject(success); JSONObject data = result.getJSONObject("data"); String hfSeqId = data.getString("hf_seq_id"); String payInfo = data.getString("pay_info"); JSONObject payInfoJson = JSONObject.parseObject(payInfo); // 获取timeStamp的值 String appId = payInfoJson.getString("appId"); // 获取timeStamp的值 String timeStamp = payInfoJson.getString("timeStamp"); // 获取nonceStr的值 String nonceStr = payInfoJson.getString("nonceStr"); // 获取package的值 String packageValue = payInfoJson.getString("package"); // 获取paySign的值 String paySign = payInfoJson.getString("paySign"); // 保存到数据库 WechatPayInfo wechatPayInfo = new WechatPayInfo(); wechatPayInfo.setSn(sn); wechatPayInfo.setHfSeqId(hfSeqId); wechatPayInfo.setAppId(appId); wechatPayInfo.setTimeStamp(timeStamp); wechatPayInfo.setNonceStr(nonceStr); wechatPayInfo.setPackageValue(packageValue); wechatPayInfo.setPaySign(paySign); wechatPayInfoService.save(wechatPayInfo); return data; } @Override public JSONObject payQuery(String queryId, String sn,String companyType) throws Exception { String url = "https://api.huifu.com/v2/trade/payment/scanpay/query"; HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig()); JSONObject request = new JSONObject(); if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) { request.put("huifu_id", HuifuConstant.SC_DIV_HUIFU_ID); } else { request.put("huifu_id", HuifuConstant.SZ_DIV_HUIFU_ID); } request.put("org_req_date", DateTools.getCurrentDateYYYYMMDD()); if (StrUtil.isNotEmpty(queryId)) { request.put("org_hf_seq_id", queryId); } if (StrUtil.isNotEmpty(sn)) { request.put("org_req_seq_id", sn); } // 签名:sign String s = JSON.toJSONString(request); String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class)); String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY); // 公共参数 JSONObject requestData = new JSONObject(); requestData.put("sys_id", HuifuConstant.SYS_ID); requestData.put("product_id", HuifuConstant.PRODUCT_ID); requestData.put("sign", sign); requestData.put("data", request); String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID); // 拿到返回参数 JSONObject result = JSONObject.parseObject(success); JSONObject data = result.getJSONObject("data"); return data; } }