package com.szwl.service.impl; import com.alibaba.fastjson.JSONObject; import com.szwl.model.bo.JoinpayConstant; import com.szwl.model.entity.TOrder; import com.szwl.mapper.TOrderMapper; import com.szwl.model.utils.Constant; import com.szwl.model.utils.HttpClientUtils; import com.szwl.service.TOrderService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.http.message.BasicNameValuePair; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.math.RoundingMode; import java.net.URLDecoder; import java.text.SimpleDateFormat; import java.util.*; /** *

* 服务实现类 *

* * @author wuhs * @since 2022-04-23 */ @Slf4j @Service public class TOrderServiceImpl extends ServiceImpl implements TOrderService { @Autowired private TOrderMapper tOrderMapper; @Override public Double getAreaPrice(Map params) { return tOrderMapper.getAreaPrice(params); } @Override @Transactional public synchronized String initSn(Long equipmentId) { StringBuilder number = new StringBuilder(); if (equipmentId != null) { Random random = new Random(); /** * 6位随机 */ for (int i = 0; i < 6; i++) { number.append(String.valueOf(random.nextInt(10))); } /** * 设备id */ number.append(equipmentId.toString()); /** * 日期 */ number.append(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())); } return number.toString(); } @Override public Object initRefundSn(Long equipmentId, int refundNumber) { StringBuilder number = new StringBuilder(); if (equipmentId != null) { Random random = new Random(); /** * 6位随机 */ for (int i = 0; i < 6; i++) { number.append(String.valueOf(random.nextInt(10))); } /** * 设备id */ number.append(equipmentId.toString()); /** * 日期 */ number.append(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())); /** * 退款数量 */ number.append(refundNumber); } return "r" + number.toString(); } @Override public String refund(String sn , Object refundSn , BigDecimal refundAmount , BigDecimal p8_MarketRefAmount , String refundReason , String notifyUrl , String altRefInfo ) { String url = "https://www.joinpay.com/trade/refund.action"; List data = new ArrayList(); data.add(new BasicNameValuePair("p1_MerchantNo", JoinpayConstant.mch_no)); data.add(new BasicNameValuePair("p2_OrderNo", sn)); data.add(new BasicNameValuePair("p3_RefundOrderNo", refundSn.toString())); data.add(new BasicNameValuePair("p4_RefundAmount", refundAmount.setScale(2, RoundingMode.HALF_DOWN).toString())); data.add(new BasicNameValuePair("p5_RefundReason", refundReason)); data.add(new BasicNameValuePair("p6_NotifyUrl", notifyUrl)); data.add(new BasicNameValuePair("p7_AltRefInfo", altRefInfo==null?null:altRefInfo.toString())); if(p8_MarketRefAmount!=null){ data.add(new BasicNameValuePair("p8_MarketRefAmount", p8_MarketRefAmount.toString())); } // TODO: 2019-04-01 空值不参与签名!!!!!!!!!!!!!!!!!! String hmac = null; try { hmac = createHmacSign(data, JoinpayConstant.key); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } data.add(new BasicNameValuePair("hmac", hmac)); String result = HttpClientUtils.postKeyValue(url, data); JSONObject resultJson = JSONObject.parseObject(result); log.info("汇聚返回参数:{}", resultJson); System.out.println(result); return resultJson.getString("rc_CodeMsg"); } /** * 签名算法sign , hmac 签名 * * @param data * @return */ public static String createHmacSign( List data , String key) throws UnsupportedEncodingException { StringBuffer sb = new StringBuffer(); Iterator es = data.iterator(); while (es.hasNext()) { BasicNameValuePair entry = (BasicNameValuePair) es.next(); String k = (String) entry.getName(); String v = (String) entry.getValue(); if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) { sb.append(URLDecoder.decode(String.valueOf(v), "utf-8")); } } sb.append(key); String sign = DigestUtils.md5Hex(sb.toString()); return sign; } }