123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 |
- 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;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author wuhs
- * @since 2023-07-17
- */
- @Slf4j
- @Service
- public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch> 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<String, String> 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;
- }
- }
|