Merge branch 'yuanye-dev' into dev

dev-discount
= 4 years ago
commit 2873442d13
  1. 2
      hai-bweb/src/main/resources/dev/application.yml
  2. 4
      hai-cweb/src/main/java/com/cweb/controller/pay/OrderController.java
  3. 176
      hai-cweb/src/main/java/com/cweb/controller/pay/WechatPayController.java
  4. BIN
      hai-cweb/src/main/resources/privatekey/1289663601_apiclient_cert.p12
  5. BIN
      hai-cweb/src/main/resources/privatekey/1604968055_apiclient_cert.p12
  6. 9
      hai-service/src/main/java/com/hai/common/pay/entity/WeChatPayReqInfo.java
  7. 2
      hai-service/src/main/java/com/hai/common/pay/util/XmlUtil.java
  8. 151
      hai-service/src/main/java/com/hai/common/utils/HttpsUtils.java
  9. 307
      hai-service/src/main/java/com/hai/common/utils/WxUtils.java
  10. 110
      hai-service/src/main/java/com/hai/dao/HighProfitSharingRecordMapper.java
  11. 7
      hai-service/src/main/java/com/hai/dao/HighProfitSharingRecordMapperExt.java
  12. 276
      hai-service/src/main/java/com/hai/dao/HighProfitSharingRecordSqlProvider.java
  13. 178
      hai-service/src/main/java/com/hai/entity/HighProfitSharingRecord.java
  14. 754
      hai-service/src/main/java/com/hai/entity/HighProfitSharingRecordExample.java
  15. 98
      hai-service/src/main/java/com/hai/model/ResultProfitSharing.java
  16. 162
      hai-service/src/main/java/com/hai/model/WxSharingOrderRequestModel.java
  17. 147
      hai-service/src/main/java/com/hai/model/WxSharingOrderResp.java
  18. 84
      hai-service/src/main/java/com/hai/model/WxSharingReceiversVO.java
  19. 12
      hai-service/src/main/java/com/hai/service/HighProfitSharingRecordService.java
  20. 20
      hai-service/src/main/java/com/hai/service/impl/HighProfitSharingRecordServiceImpl.java
  21. 1
      hai-service/src/main/java/com/hai/service/pay/PayService.java
  22. 227
      hai-service/src/main/java/com/hai/service/pay/impl/GoodsOrderServiceImpl.java
  23. BIN
      hai-service/src/main/java/privatekey/apiclient_cert.p12
  24. 23
      hai-service/src/main/java/privatekey/apiclient_cert.pem
  25. 28
      hai-service/src/main/java/privatekey/apiclient_key.pem

@ -9,7 +9,7 @@ debug: false
#datasource数据源设置 #datasource数据源设置
spring: spring:
datasource: datasource:
url: jdbc:mysql://139.159.177.244:3306/hsg_pre?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8 url: jdbc:mysql://139.159.177.244:3306/hsg_pre?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root username: root
password: HF123456. password: HF123456.
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource

@ -160,7 +160,9 @@ public class OrderController {
weChatPayReqInfo.setSpbill_create_ip("139.159.177.244"); //终端ip weChatPayReqInfo.setSpbill_create_ip("139.159.177.244"); //终端ip
weChatPayReqInfo.setNotify_url(SysConst.getSysConfig().getNotifyUrl()); //通知url weChatPayReqInfo.setNotify_url(SysConst.getSysConfig().getNotifyUrl()); //通知url
weChatPayReqInfo.setTrade_type("JSAPI"); //交易类型 weChatPayReqInfo.setTrade_type("JSAPI"); //交易类型
weChatPayReqInfo.setAttach(map.get("orderScene").toString()); //附加数据,区分订单类型 weChatPayReqInfo.setAttach(map.get("orderScene").toString());
weChatPayReqInfo.setProfit_sharing("Y");
//附加数据,区分订单类型
Map<String,String> payMap = new HashMap<>(); Map<String,String> payMap = new HashMap<>();
payMap.put("app_id",SysConst.getSysConfig().getWxSubAppId()); payMap.put("app_id",SysConst.getSysConfig().getWxSubAppId());

@ -1,25 +1,56 @@
package com.cweb.controller.pay; package com.cweb.controller.pay;
import com.alibaba.fastjson.JSONObject;
import com.cweb.config.SysConst; import com.cweb.config.SysConst;
import com.hai.common.pay.WechatPayUtil; import com.hai.common.pay.WechatPayUtil;
import com.hai.common.pay.entity.WechatCallBackInfo;
import com.hai.common.pay.util.IOUtil; import com.hai.common.pay.util.IOUtil;
import com.hai.common.pay.util.SignatureUtil;
import com.hai.common.pay.util.XmlUtil; import com.hai.common.pay.util.XmlUtil;
import com.hai.common.pay.util.sdk.WXPayConstants;
import com.hai.common.utils.HttpsUtils;
import com.hai.common.utils.ResponseMsgUtil;
import com.hai.common.utils.WxUtils;
import com.hai.entity.BsCompany;
import com.hai.entity.HighProfitSharingRecord;
import com.hai.entity.SecRegion;
import com.hai.model.ResponseData;
import com.hai.model.WxSharingOrderRequestModel;
import com.hai.model.WxSharingReceiversVO;
import com.hai.service.HighProfitSharingRecordService;
import com.hai.service.pay.NotifyService; import com.hai.service.pay.NotifyService;
import com.hai.service.pay.PayRecordService; import com.hai.service.pay.PayRecordService;
import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import net.sf.cglib.beans.BeanMap;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.net.ssl.SSLContext;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream; import java.io.BufferedOutputStream;
import java.util.SortedMap; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.security.*;
import java.util.*;
@Controller @Controller
@RequestMapping(value = "/wechatpay") @RequestMapping(value = "/wechatpay")
@ -28,6 +59,8 @@ public class WechatPayController {
private static Logger log = LoggerFactory.getLogger(WechatPayController.class); private static Logger log = LoggerFactory.getLogger(WechatPayController.class);
private WXPayConstants.SignType signType;
@Resource @Resource
private NotifyService notifyService; private NotifyService notifyService;
@Resource @Resource
@ -35,6 +68,9 @@ public class WechatPayController {
@Resource @Resource
private WechatPayUtil wechatPayUtil; private WechatPayUtil wechatPayUtil;
@Resource
private HighProfitSharingRecordService highProfitSharingRecordService;
@RequestMapping(value = "/notify", method = RequestMethod.POST) @RequestMapping(value = "/notify", method = RequestMethod.POST)
@ApiOperation(value = "微信支付 -> 异步回调") @ApiOperation(value = "微信支付 -> 异步回调")
public void wechatNotify(HttpServletRequest request, HttpServletResponse response) { public void wechatNotify(HttpServletRequest request, HttpServletResponse response) {
@ -73,79 +109,73 @@ public class WechatPayController {
} }
} }
/*@RequestMapping(value = "/testCreateOrder", method = RequestMethod.GET) @RequestMapping(value = "/addLedgerReceiver", method = RequestMethod.POST)
@ApiOperation(value = "微信测试 创建支付信息(发版时注释此接口)") @ApiOperation(value = "微信支付 -> 添加分账接收方")
@ResponseBody public void addLedgerReceiver(HttpServletRequest request, HttpServletResponse response) {
public SortedMap<Object, Object> testCreateOrder(@RequestParam(value = "subject", required = true) String subject,
@RequestParam(value = "orderNo", required = true) String orderNo,
@RequestParam(value = "totalPrice", required = true) Integer totalPrice,
HttpServletRequest httpRequest, HttpServletResponse httpResponse) {
try { try {
String nonce_str = MD5Util.MD5Encode(String.valueOf(ThreadLocalRandom.current().nextInt(10000)), "UTF-8");
WeChatPayReqInfo weChatPayReqInfo = new WeChatPayReqInfo(); WxSharingReceiversVO receiversVO = new WxSharingReceiversVO();
weChatPayReqInfo.setAppid(wechatConfig.getApp_id()); //公众号id receiversVO.setAccount("1603942866");
weChatPayReqInfo.setMch_id(wechatConfig.getMch_id()); //商户号 receiversVO.setType("MERCHANT_ID");
weChatPayReqInfo.setNonce_str(nonce_str); //随机字符串 receiversVO.setName("重庆惠昕石化有限责任公司");
weChatPayReqInfo.setBody(subject); //商品描述 receiversVO.setRelation_type("SERVICE_PROVIDER");
weChatPayReqInfo.setOut_trade_no(orderNo); //商户订单号
weChatPayReqInfo.setTotal_fee(totalPrice); //总 Map<String , String> map = new HashMap<>();
weChatPayReqInfo.setSpbill_create_ip("182.43.154.4"); //终端ip
weChatPayReqInfo.setNotify_url(wechatConfig.getNotify_url()); //通知url map.put("mch_id" , "1289663601");
//weChatPayReqInfo.setTrade_type("APP"); //交易类型 map.put("sub_mch_id" , "1609882817");
weChatPayReqInfo.setTrade_type("JSAPI"); map.put("appid" , "wx637bd6f7314daa46");
//weChatPayReqInfo.setOpenid(""); map.put("nonce_str" , WxUtils.makeNonStr());
weChatPayReqInfo.setAttach("Test"); map.put("sign_type" , "HMAC-SHA256");
map.put("receiver" , JSONObject.toJSONString(receiversVO));
*//** 获取沙箱key start *//*
String sandboxKey = GetSignKey(); String sign = WxUtils.generateSignature(map, "Skufk5oi85wDFGl888i6wsRSTkdd5df5" , WXPayConstants.SignType.HMACSHA256);
*//** 获取沙箱key end *//*
String sign = SignatureUtil.createSign(weChatPayReqInfo, sandboxKey, "UTF-8"); // 测试 todo del map.put("sign" , sign);
weChatPayReqInfo.setSign(sign);
String unifiedXmL = XmlUtil.toSplitXml(weChatPayReqInfo); String url = "https://api.mch.weixin.qq.com/pay/profitsharingaddreceiver";
String xm = WxUtils.mapToXml(map);
String unifiedOrderResultXmL = HttpReqUtil.HttpsDefaultExecute("POST", wechatConfig.getUnified_order_url(), null, unifiedXmL, null); String rest = String.valueOf(HttpsUtils.postData(url, xm));
log.error("支付信息:" + unifiedOrderResultXmL);
// 签名校验 System.out.println(rest);
SortedMap<Object,Object> sortedMap = null; log.info("微信支付 -> 添加分账接收方:处理开始");
// 组装支付参数
WechatCallBackInfo wechatCallBackInfo = XmlUtil.getObjectFromXML(unifiedOrderResultXmL, WechatCallBackInfo.class);
Long timeStamp = System.currentTimeMillis()/1000;
sortedMap = new TreeMap<>();
sortedMap.put("appid",wechatConfig.getApp_id());
sortedMap.put("partnerid",wechatConfig.getMch_id());
sortedMap.put("prepayid",wechatCallBackInfo.getPrepay_id());
sortedMap.put("noncestr",wechatCallBackInfo.getNonce_str());
sortedMap.put("timestamp",timeStamp);
sortedMap.put("package","Sign=WXPay");
String secondSign = SignatureUtil.createSign(sortedMap, wechatConfig.getApi_key(), "UTF-8");
sortedMap.put("sign",secondSign);
return sortedMap;
} catch (Exception e) { } catch (Exception e) {
log.error("AlipayTest -> createOrder:生成订单错误", e); log.error("WechatPayController --> wechatNotify() error!", e);
} }
return null; }
}*/
String getToken(String method, String url, String body) throws UnsupportedEncodingException, SignatureException, NoSuchAlgorithmException, InvalidKeyException, FileNotFoundException {
/**
* @desc 获取沙箱key long timeMillis = System.currentTimeMillis();
*/ String nonceStr = String.valueOf(timeMillis);
/*public String GetSignKey() throws Exception { long timestamp = System.currentTimeMillis() / 1000;
String nonce_str = WXPayUtil.generateNonceStr(); //生成随机字符 String message = buildMessage(method, url, timestamp, nonceStr, body);
Map<String, String> param = new HashMap<>(); PrivateKey privateKey = PemUtil.loadPrivateKey(new FileInputStream("G:/hurui-project/hai-parent/hai-cweb/src/main/resources/privatekey/apiclient_key.pem"));
param.put("mch_id", wechatConfig.getMch_id()); //需要真实商户号 String signature = sign(privateKey,message.getBytes("utf-8"));
param.put("nonce_str", nonce_str); //随机字符
String sign = WXPayUtil.generateSignature(param, wechatConfig.getApi_key(), WXPayConstants.SignType.MD5); //通过SDK生成签名其中API_KEY为商户对应的真实密钥 return "mchid=\"" + SysConst.getSysConfig().getWxSubMchId() + "\","
param.put("sign", sign); + "nonce_str=\"" + nonceStr + "\","
String xml = WXPayUtil.mapToXml(param); //将map转换为xml格式 + "timestamp=\"" + timestamp + "\","
String url = "https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey"; //沙箱密钥获取api + "serial_no=\"" + "1B08DC2A078B0B1F77A65C97C445AAD545B5EAA6" + "\","
String signKey = HttpUtil.post(url, xml); + "signature=\"" + signature + "\"";
System.out.println("signkey+"+signKey); }
Map<String, String> param1 = new HashMap<String, String>();
param1 = WXPayUtil.xmlToMap(signKey.toString()); String sign(PrivateKey privateKey,byte[] message) throws SignatureException, NoSuchAlgorithmException, InvalidKeyException {
String key = param1.get("sandbox_signkey"); Signature sign = Signature.getInstance("SHA256withRSA");
return key; sign.initSign(privateKey);
}*/ sign.update(message);
return Base64.getEncoder().encodeToString(sign.sign());
}
String buildMessage(String method, String url, long timestamp, String nonceStr, String body) {
return method + "\n"
+ url + "\n"
+ timestamp + "\n"
+ nonceStr + "\n"
+ body + "\n";
}
} }

@ -30,6 +30,15 @@ public class WeChatPayReqInfo implements Serializable {
private String limit_pay; // 指定支付方式 no_credit--可限制用户不能使用信用卡支付 private String limit_pay; // 指定支付方式 no_credit--可限制用户不能使用信用卡支付
private String openid; // 用户标识(trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识) private String openid; // 用户标识(trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识)
private String sub_openid; // 用户标识(trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识) private String sub_openid; // 用户标识(trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识)
private String profit_sharing;
public String getProfit_sharing() {
return profit_sharing;
}
public void setProfit_sharing(String profit_sharing) {
this.profit_sharing = profit_sharing;
}
public String getSub_openid() { public String getSub_openid() {
return sub_openid; return sub_openid;

@ -219,7 +219,7 @@ public class XmlUtil {
XStream xstream = XStreamFactroy.initSplitLine(); XStream xstream = XStreamFactroy.initSplitLine();
xstream.alias("xml", obj.getClass()); xstream.alias("xml", obj.getClass());
result = xstream.toXML(obj); result = xstream.toXML(obj);
return result; return result.replaceAll("&quot;","\"");
} }
/** /**

@ -15,6 +15,7 @@ import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContexts;
import org.apache.http.conn.ssl.TrustStrategy; import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.StringEntity; import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
@ -29,10 +30,13 @@ import org.slf4j.LoggerFactory;
import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext; import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.security.GeneralSecurityException; import java.security.GeneralSecurityException;
import java.security.KeyStore;
import java.security.cert.CertificateException; import java.security.cert.CertificateException;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import java.util.ArrayList; import java.util.ArrayList;
@ -260,6 +264,45 @@ public class HttpsUtils {
return null; return null;
} }
public static JSONObject doWxPost(String apiUrl, Map<String,String> body, Map<String,Object> header) {
CloseableHttpClient httpClient = null;
if (apiUrl.startsWith("https")) {
httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory())
.setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build();
} else {
httpClient = HttpClients.createDefault();
}
String httpStr = null;
CloseableHttpResponse response = null;
try {
HttpPost httpPost = new HttpPost(apiUrl);
httpPost.setConfig(requestConfig);
for (Map.Entry<String, Object> entry : header.entrySet()) {
httpPost.setHeader(entry.getKey(), entry.getValue().toString());
}
StringEntity stringEntity = new StringEntity(JSON.toJSONString(body), "UTF-8");// 解决中文乱码问题
stringEntity.setContentEncoding("UTF-8");
stringEntity.setContentType("application/json");
httpPost.setEntity(stringEntity);
response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
httpStr = EntityUtils.toString(entity, "UTF-8");
return JSON.parseObject(httpStr);
} catch (Exception e) {
log.error(e.getMessage(),e);
} finally {
if (response != null) {
try {
EntityUtils.consume(response.getEntity());
} catch (IOException e) {
log.error(e.getMessage(),e);
}
}
}
return null;
}
public static JSONObject doPost(String apiUrl, Map<String,Object> body, Map<String,Object> header) { public static JSONObject doPost(String apiUrl, Map<String,Object> body, Map<String,Object> header) {
CloseableHttpClient httpClient = null; CloseableHttpClient httpClient = null;
if (apiUrl.startsWith("https")) { if (apiUrl.startsWith("https")) {
@ -381,8 +424,6 @@ public class HttpsUtils {
* 发送 POST 请求JSON形式 * 发送 POST 请求JSON形式
* *
* @param apiUrl * @param apiUrl
* @param json
* json对象
* @return * @return
*/ */
public static JSONObject doPost(String apiUrl, String str) { public static JSONObject doPost(String apiUrl, String str) {
@ -460,6 +501,112 @@ public class HttpsUtils {
return null; return null;
} }
/**
* @Author Sum1Dream
* @Description // 不带证书请求xml
* @Date 11:42 2021/6/8
* @Param [url, str]
* @return com.alibaba.fastjson.JSONObject
**/
public static JSONObject postData(String url, String str) {
CloseableHttpClient httpClient = null;
if (url.startsWith("https")) {
httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory())
.setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build();
} else {
httpClient = HttpClients.createDefault();
}
String httpStr = null;
CloseableHttpResponse response = null;
try {
HttpPost httpPost = new HttpPost(url);
httpPost.setConfig(requestConfig);
StringEntity stringEntity = new StringEntity(str, "UTF-8");// 解决中文乱码问题
stringEntity.setContentEncoding("UTF-8");
httpPost.addHeader("Content-Type", "text/xml");
httpPost.setEntity(stringEntity);
response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
httpStr = EntityUtils.toString(entity, "UTF-8");
return JSON.parseObject(httpStr);
} catch (Exception e) {
log.error(e.getMessage(),e);
} finally {
if (response != null) {
try {
EntityUtils.consume(response.getEntity());
} catch (IOException e) {
log.error(e.getMessage(),e);
}
}
}
return null;
}
/**
* @Author Sum1Dream
* @Description // 带证书请求 xml
* @Date 11:45 2021/6/8
* @Param [url, mchId, str]
* @return com.alibaba.fastjson.JSONObject
**/
public static JSONObject postData(String url, String mchId , String str) {
CloseableHttpClient httpClient = null;
if (url.startsWith("https")) {
httpClient = HttpClients.custom().setSSLSocketFactory(readCertificate(mchId))
.setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build();
} else {
httpClient = HttpClients.createDefault();
}
String httpStr = null;
CloseableHttpResponse response = null;
try {
HttpPost httpPost = new HttpPost(url);
httpPost.setConfig(requestConfig);
StringEntity stringEntity = new StringEntity(str, "UTF-8");// 解决中文乱码问题
stringEntity.setContentEncoding("UTF-8");
httpPost.addHeader("Content-Type", "text/xml");
httpPost.setEntity(stringEntity);
response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
httpStr = EntityUtils.toString(entity, "UTF-8");
return JSON.parseObject(httpStr);
} catch (Exception e) {
log.error(e.getMessage(),e);
} finally {
if (response != null) {
try {
EntityUtils.consume(response.getEntity());
} catch (IOException e) {
log.error(e.getMessage(),e);
}
}
}
return null;
}
public static SSLConnectionSocketFactory readCertificate(String mchId) {
try {
KeyStore keyStore = KeyStore.getInstance("PKCS12");
FileInputStream stream = new FileInputStream( "F:/mine/hai-server/hai-service/src/main/java/privatekey/apiclient_cert.p12");
keyStore.load(stream , mchId.toCharArray());
stream.close();
SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, mchId.toCharArray()).build();
return new SSLConnectionSocketFactory(
sslcontext,
new String[]{"TLSv1"},
null,
SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
} catch (Exception e) {
System.out.println("证书双向认证出现异常" + e);
}
return null;
}
/** /**
* 创建SSL安全连接 * 创建SSL安全连接
* *

@ -0,0 +1,307 @@
package com.hai.common.utils;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Maps;
import com.hai.common.pay.util.sdk.WXPayConstants;
import com.hai.common.pay.util.sdk.WXPayXmlUtil;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.naming.NoNameCoder;
import com.thoughtworks.xstream.io.xml.XppDriver;
import net.sf.cglib.beans.BeanMap;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContexts;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.FileInputStream;
import java.io.StringWriter;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.SecureRandom;
import java.util.*;
public class WxUtils {
private static final Random RANDOM = new SecureRandom();
private static final String SYMBOLS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
/**
* 生成签名
*
* @param signMaps
* @return
* @throws Exception
*/
public static String generateSign(SortedMap<String, String> signMaps, String mchKey) {
StringBuffer sb = new StringBuffer();
// 字典序
for (Map.Entry signMap : signMaps.entrySet()) {
String key = (String) signMap.getKey();
String value = (String) signMap.getValue();
// 为空不参与签名、参数名区分大小写
if (null != value && !"".equals(value) && !"sign".equals(key) && !"key".equals(key)) {
sb.append(key).append("=").append(value).append("&");
}
}
// 拼接key
sb.append("key=").append(mchKey);
// MD5加密
String sign = MD5Encode(sb.toString(), "UTF-8").toUpperCase();
return sign;
}
public static String generateSignSHA256(SortedMap<String, String> signMaps,String mchKey)throws Exception{
StringBuffer sb = new StringBuffer();
// 字典序
for (Map.Entry signMap : signMaps.entrySet()) {
String key = (String) signMap.getKey();
String value = (String) signMap.getValue();
// 为空不参与签名、参数名区分大小写
if (null != value && !"".equals(value) && !"sign".equals(key) && !"key".equals(key)) {
sb.append(key).append("=").append(value).append("&");
}
}
// 拼接key
sb.append("key=").append(mchKey);
// HMACSHA256加密
String sign = HMACSHA256(sb.toString(), mchKey).toUpperCase();
return sign;
}
private static String byteArrayToHexString(byte b[]) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++)
resultSb.append(byteToHexString(b[i]));
return resultSb.toString();
}
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n += 256;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
public static String MD5Encode(String origin, String charsetname) {
String resultString = null;
try {
resultString = new String(origin);
MessageDigest md = MessageDigest.getInstance("MD5");
if (charsetname == null || "".equals(charsetname))
resultString = byteArrayToHexString(md.digest(resultString
.getBytes()));
else
resultString = byteArrayToHexString(md.digest(resultString
.getBytes(charsetname)));
} catch (Exception exception) {
}
return resultString;
}
private static final String[] hexDigits = { "0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
private static HashMap<String, String> sortAsc(Map<String, String> map) {
HashMap<String, String> tempMap = new LinkedHashMap<String, String>();
List<Map.Entry<String, String>> infoIds = new ArrayList<Map.Entry<String, String>>(map.entrySet());
//排序
infoIds.sort(new Comparator<Map.Entry<String, String>>() {
@Override
public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
return o1.getKey().compareTo(o2.getKey());
}
});
for (int i = 0; i < infoIds.size(); i++) {
Map.Entry<String, String> item = infoIds.get(i);
tempMap.put(item.getKey(), item.getValue());
}
return tempMap;
}
/**
* 生成 HMACSHA256
* @param data 待处理数据
* @param key 密钥
* @return 加密结果
* @throws Exception
*/
public static String HMACSHA256(String data, String key) throws Exception {
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secret_key);
byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for (byte item : array) {
sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
}
return sb.toString().toUpperCase();
}
/**
* 获取随机字符串 Nonce Str
*
* @return String 随机字符串
*/
public static String makeNonStr() {
char[] nonceChars = new char[32];
for (int index = 0; index < nonceChars.length; ++index) {
nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length()));
}
return new String(nonceChars);
}
/**
* 拼接签名数据
*
*/
public static String makeSign(BeanMap beanMap, String mchKey, String signType)throws Exception {
SortedMap<String, String> signMaps = Maps.newTreeMap();
for (Object key : beanMap.keySet()) {
Object value = beanMap.get(key);
// 排除空数据
if (value == null) {
continue;
}
signMaps.put(key + "", String.valueOf(value));
}
if(signType.equals("MD5")) {
// 生成签名
return generateSign(signMaps, mchKey);
}else if(signType.equals("SHA256")){
return generateSignSHA256(signMaps, mchKey);
}else{
return null;
}
}
/**
* 数据转换为xml格式
*
* @param object
* @param obj
* @return
*/
public static String truncateDataToXML(Class<?> object, Object obj) {
XStream xStream = new XStream(new XppDriver(new NoNameCoder()));
xStream.alias("xml", object);
return xStream.toXML(obj);
}
/**
* 生成签名. 注意若含有sign_type字段必须和signType参数保持一致
*
* @param data 待签名数据
* @param key API密钥
* @param signType 签名方式
* @return 签名
*/
public static String generateSignature(final Map<String, String> data, String key, WXPayConstants.SignType signType) throws Exception {
Set<String> keySet = data.keySet();
String[] keyArray = keySet.toArray(new String[keySet.size()]);
Arrays.sort(keyArray);
StringBuilder sb = new StringBuilder();
for (String k : keyArray) {
if (k.equals(WXPayConstants.FIELD_SIGN)) {
continue;
}
if (data.get(k).trim().length() > 0) // 参数值为空,则不参与签名
sb.append(k).append("=").append(data.get(k).trim()).append("&");
}
sb.append("key=").append(key);
if (WXPayConstants.SignType.MD5.equals(signType)) {
return MD5(sb.toString()).toUpperCase();
}
else if (WXPayConstants.SignType.HMACSHA256.equals(signType)) {
return HMACSHA256(sb.toString(), key);
}
else {
throw new Exception(String.format("Invalid sign_type: %s", signType));
}
}
/**
* 生成 MD5
*
* @param data 待处理数据
* @return MD5结果
*/
public static String MD5(String data) throws Exception {
java.security.MessageDigest md = MessageDigest.getInstance("MD5");
byte[] array = md.digest(data.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for (byte item : array) {
sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
}
return sb.toString().toUpperCase();
}
/**
* 将Map转换为XML格式的字符串
*
* @param data Map类型数据
* @return XML格式的字符串
* @throws Exception
*/
public static String mapToXml(Map<String, String> data) throws Exception {
org.w3c.dom.Document document = WXPayXmlUtil.newDocument();
org.w3c.dom.Element root = document.createElement("xml");
document.appendChild(root);
for (String key: data.keySet()) {
String value = data.get(key);
if (value == null) {
value = "";
}
value = value.trim();
org.w3c.dom.Element filed = document.createElement(key);
filed.appendChild(document.createTextNode(value));
root.appendChild(filed);
}
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
DOMSource source = new DOMSource(document);
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
transformer.transform(source, result);
String output = writer.getBuffer().toString(); //.replaceAll("\n|\r", "");
try {
writer.close();
}
catch (Exception ex) {
}
return output;
}
}

@ -0,0 +1,110 @@
package com.hai.dao;
import com.hai.entity.HighProfitSharingRecord;
import com.hai.entity.HighProfitSharingRecordExample;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.DeleteProvider;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.annotations.UpdateProvider;
import org.apache.ibatis.type.JdbcType;
import org.springframework.stereotype.Repository;
/**
*
* 代码由工具生成,请勿修改!!!
* 如果需要扩展请在其父类进行扩展
*
**/
@Repository
public interface HighProfitSharingRecordMapper extends HighProfitSharingRecordMapperExt {
@SelectProvider(type=HighProfitSharingRecordSqlProvider.class, method="countByExample")
long countByExample(HighProfitSharingRecordExample example);
@DeleteProvider(type=HighProfitSharingRecordSqlProvider.class, method="deleteByExample")
int deleteByExample(HighProfitSharingRecordExample example);
@Delete({
"delete from high_profit_sharing_record",
"where id = #{id,jdbcType=BIGINT}"
})
int deleteByPrimaryKey(Long id);
@Insert({
"insert into high_profit_sharing_record (transaction_id, out_order_no, ",
"order_id, price, ",
"content, create_time, ",
"`status`)",
"values (#{transactionId,jdbcType=VARCHAR}, #{outOrderNo,jdbcType=VARCHAR}, ",
"#{orderId,jdbcType=VARCHAR}, #{price,jdbcType=DECIMAL}, ",
"#{content,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, ",
"#{status,jdbcType=VARCHAR})"
})
@Options(useGeneratedKeys=true,keyProperty="id")
int insert(HighProfitSharingRecord record);
@InsertProvider(type=HighProfitSharingRecordSqlProvider.class, method="insertSelective")
@Options(useGeneratedKeys=true,keyProperty="id")
int insertSelective(HighProfitSharingRecord record);
@SelectProvider(type=HighProfitSharingRecordSqlProvider.class, method="selectByExample")
@Results({
@Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true),
@Result(column="transaction_id", property="transactionId", jdbcType=JdbcType.VARCHAR),
@Result(column="out_order_no", property="outOrderNo", jdbcType=JdbcType.VARCHAR),
@Result(column="order_id", property="orderId", jdbcType=JdbcType.VARCHAR),
@Result(column="price", property="price", jdbcType=JdbcType.DECIMAL),
@Result(column="content", property="content", jdbcType=JdbcType.VARCHAR),
@Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="status", property="status", jdbcType=JdbcType.VARCHAR)
})
List<HighProfitSharingRecord> selectByExample(HighProfitSharingRecordExample example);
@Select({
"select",
"id, transaction_id, out_order_no, order_id, price, content, create_time, `status`",
"from high_profit_sharing_record",
"where id = #{id,jdbcType=BIGINT}"
})
@Results({
@Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true),
@Result(column="transaction_id", property="transactionId", jdbcType=JdbcType.VARCHAR),
@Result(column="out_order_no", property="outOrderNo", jdbcType=JdbcType.VARCHAR),
@Result(column="order_id", property="orderId", jdbcType=JdbcType.VARCHAR),
@Result(column="price", property="price", jdbcType=JdbcType.DECIMAL),
@Result(column="content", property="content", jdbcType=JdbcType.VARCHAR),
@Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="status", property="status", jdbcType=JdbcType.VARCHAR)
})
HighProfitSharingRecord selectByPrimaryKey(Long id);
@UpdateProvider(type=HighProfitSharingRecordSqlProvider.class, method="updateByExampleSelective")
int updateByExampleSelective(@Param("record") HighProfitSharingRecord record, @Param("example") HighProfitSharingRecordExample example);
@UpdateProvider(type=HighProfitSharingRecordSqlProvider.class, method="updateByExample")
int updateByExample(@Param("record") HighProfitSharingRecord record, @Param("example") HighProfitSharingRecordExample example);
@UpdateProvider(type=HighProfitSharingRecordSqlProvider.class, method="updateByPrimaryKeySelective")
int updateByPrimaryKeySelective(HighProfitSharingRecord record);
@Update({
"update high_profit_sharing_record",
"set transaction_id = #{transactionId,jdbcType=VARCHAR},",
"out_order_no = #{outOrderNo,jdbcType=VARCHAR},",
"order_id = #{orderId,jdbcType=VARCHAR},",
"price = #{price,jdbcType=DECIMAL},",
"content = #{content,jdbcType=VARCHAR},",
"create_time = #{createTime,jdbcType=TIMESTAMP},",
"`status` = #{status,jdbcType=VARCHAR}",
"where id = #{id,jdbcType=BIGINT}"
})
int updateByPrimaryKey(HighProfitSharingRecord record);
}

@ -0,0 +1,7 @@
package com.hai.dao;
/**
* mapper扩展类
*/
public interface HighProfitSharingRecordMapperExt {
}

@ -0,0 +1,276 @@
package com.hai.dao;
import com.hai.entity.HighProfitSharingRecord;
import com.hai.entity.HighProfitSharingRecordExample.Criteria;
import com.hai.entity.HighProfitSharingRecordExample.Criterion;
import com.hai.entity.HighProfitSharingRecordExample;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.jdbc.SQL;
public class HighProfitSharingRecordSqlProvider {
public String countByExample(HighProfitSharingRecordExample example) {
SQL sql = new SQL();
sql.SELECT("count(*)").FROM("high_profit_sharing_record");
applyWhere(sql, example, false);
return sql.toString();
}
public String deleteByExample(HighProfitSharingRecordExample example) {
SQL sql = new SQL();
sql.DELETE_FROM("high_profit_sharing_record");
applyWhere(sql, example, false);
return sql.toString();
}
public String insertSelective(HighProfitSharingRecord record) {
SQL sql = new SQL();
sql.INSERT_INTO("high_profit_sharing_record");
if (record.getTransactionId() != null) {
sql.VALUES("transaction_id", "#{transactionId,jdbcType=VARCHAR}");
}
if (record.getOutOrderNo() != null) {
sql.VALUES("out_order_no", "#{outOrderNo,jdbcType=VARCHAR}");
}
if (record.getOrderId() != null) {
sql.VALUES("order_id", "#{orderId,jdbcType=VARCHAR}");
}
if (record.getPrice() != null) {
sql.VALUES("price", "#{price,jdbcType=DECIMAL}");
}
if (record.getContent() != null) {
sql.VALUES("content", "#{content,jdbcType=VARCHAR}");
}
if (record.getCreateTime() != null) {
sql.VALUES("create_time", "#{createTime,jdbcType=TIMESTAMP}");
}
if (record.getStatus() != null) {
sql.VALUES("`status`", "#{status,jdbcType=VARCHAR}");
}
return sql.toString();
}
public String selectByExample(HighProfitSharingRecordExample example) {
SQL sql = new SQL();
if (example != null && example.isDistinct()) {
sql.SELECT_DISTINCT("id");
} else {
sql.SELECT("id");
}
sql.SELECT("transaction_id");
sql.SELECT("out_order_no");
sql.SELECT("order_id");
sql.SELECT("price");
sql.SELECT("content");
sql.SELECT("create_time");
sql.SELECT("`status`");
sql.FROM("high_profit_sharing_record");
applyWhere(sql, example, false);
if (example != null && example.getOrderByClause() != null) {
sql.ORDER_BY(example.getOrderByClause());
}
return sql.toString();
}
public String updateByExampleSelective(Map<String, Object> parameter) {
HighProfitSharingRecord record = (HighProfitSharingRecord) parameter.get("record");
HighProfitSharingRecordExample example = (HighProfitSharingRecordExample) parameter.get("example");
SQL sql = new SQL();
sql.UPDATE("high_profit_sharing_record");
if (record.getId() != null) {
sql.SET("id = #{record.id,jdbcType=BIGINT}");
}
if (record.getTransactionId() != null) {
sql.SET("transaction_id = #{record.transactionId,jdbcType=VARCHAR}");
}
if (record.getOutOrderNo() != null) {
sql.SET("out_order_no = #{record.outOrderNo,jdbcType=VARCHAR}");
}
if (record.getOrderId() != null) {
sql.SET("order_id = #{record.orderId,jdbcType=VARCHAR}");
}
if (record.getPrice() != null) {
sql.SET("price = #{record.price,jdbcType=DECIMAL}");
}
if (record.getContent() != null) {
sql.SET("content = #{record.content,jdbcType=VARCHAR}");
}
if (record.getCreateTime() != null) {
sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}");
}
if (record.getStatus() != null) {
sql.SET("`status` = #{record.status,jdbcType=VARCHAR}");
}
applyWhere(sql, example, true);
return sql.toString();
}
public String updateByExample(Map<String, Object> parameter) {
SQL sql = new SQL();
sql.UPDATE("high_profit_sharing_record");
sql.SET("id = #{record.id,jdbcType=BIGINT}");
sql.SET("transaction_id = #{record.transactionId,jdbcType=VARCHAR}");
sql.SET("out_order_no = #{record.outOrderNo,jdbcType=VARCHAR}");
sql.SET("order_id = #{record.orderId,jdbcType=VARCHAR}");
sql.SET("price = #{record.price,jdbcType=DECIMAL}");
sql.SET("content = #{record.content,jdbcType=VARCHAR}");
sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}");
sql.SET("`status` = #{record.status,jdbcType=VARCHAR}");
HighProfitSharingRecordExample example = (HighProfitSharingRecordExample) parameter.get("example");
applyWhere(sql, example, true);
return sql.toString();
}
public String updateByPrimaryKeySelective(HighProfitSharingRecord record) {
SQL sql = new SQL();
sql.UPDATE("high_profit_sharing_record");
if (record.getTransactionId() != null) {
sql.SET("transaction_id = #{transactionId,jdbcType=VARCHAR}");
}
if (record.getOutOrderNo() != null) {
sql.SET("out_order_no = #{outOrderNo,jdbcType=VARCHAR}");
}
if (record.getOrderId() != null) {
sql.SET("order_id = #{orderId,jdbcType=VARCHAR}");
}
if (record.getPrice() != null) {
sql.SET("price = #{price,jdbcType=DECIMAL}");
}
if (record.getContent() != null) {
sql.SET("content = #{content,jdbcType=VARCHAR}");
}
if (record.getCreateTime() != null) {
sql.SET("create_time = #{createTime,jdbcType=TIMESTAMP}");
}
if (record.getStatus() != null) {
sql.SET("`status` = #{status,jdbcType=VARCHAR}");
}
sql.WHERE("id = #{id,jdbcType=BIGINT}");
return sql.toString();
}
protected void applyWhere(SQL sql, HighProfitSharingRecordExample example, boolean includeExamplePhrase) {
if (example == null) {
return;
}
String parmPhrase1;
String parmPhrase1_th;
String parmPhrase2;
String parmPhrase2_th;
String parmPhrase3;
String parmPhrase3_th;
if (includeExamplePhrase) {
parmPhrase1 = "%s #{example.oredCriteria[%d].allCriteria[%d].value}";
parmPhrase1_th = "%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";
parmPhrase2 = "%s #{example.oredCriteria[%d].allCriteria[%d].value} and #{example.oredCriteria[%d].criteria[%d].secondValue}";
parmPhrase2_th = "%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{example.oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";
parmPhrase3 = "#{example.oredCriteria[%d].allCriteria[%d].value[%d]}";
parmPhrase3_th = "#{example.oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";
} else {
parmPhrase1 = "%s #{oredCriteria[%d].allCriteria[%d].value}";
parmPhrase1_th = "%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";
parmPhrase2 = "%s #{oredCriteria[%d].allCriteria[%d].value} and #{oredCriteria[%d].criteria[%d].secondValue}";
parmPhrase2_th = "%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";
parmPhrase3 = "#{oredCriteria[%d].allCriteria[%d].value[%d]}";
parmPhrase3_th = "#{oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";
}
StringBuilder sb = new StringBuilder();
List<Criteria> oredCriteria = example.getOredCriteria();
boolean firstCriteria = true;
for (int i = 0; i < oredCriteria.size(); i++) {
Criteria criteria = oredCriteria.get(i);
if (criteria.isValid()) {
if (firstCriteria) {
firstCriteria = false;
} else {
sb.append(" or ");
}
sb.append('(');
List<Criterion> criterions = criteria.getAllCriteria();
boolean firstCriterion = true;
for (int j = 0; j < criterions.size(); j++) {
Criterion criterion = criterions.get(j);
if (firstCriterion) {
firstCriterion = false;
} else {
sb.append(" and ");
}
if (criterion.isNoValue()) {
sb.append(criterion.getCondition());
} else if (criterion.isSingleValue()) {
if (criterion.getTypeHandler() == null) {
sb.append(String.format(parmPhrase1, criterion.getCondition(), i, j));
} else {
sb.append(String.format(parmPhrase1_th, criterion.getCondition(), i, j,criterion.getTypeHandler()));
}
} else if (criterion.isBetweenValue()) {
if (criterion.getTypeHandler() == null) {
sb.append(String.format(parmPhrase2, criterion.getCondition(), i, j, i, j));
} else {
sb.append(String.format(parmPhrase2_th, criterion.getCondition(), i, j, criterion.getTypeHandler(), i, j, criterion.getTypeHandler()));
}
} else if (criterion.isListValue()) {
sb.append(criterion.getCondition());
sb.append(" (");
List<?> listItems = (List<?>) criterion.getValue();
boolean comma = false;
for (int k = 0; k < listItems.size(); k++) {
if (comma) {
sb.append(", ");
} else {
comma = true;
}
if (criterion.getTypeHandler() == null) {
sb.append(String.format(parmPhrase3, i, j, k));
} else {
sb.append(String.format(parmPhrase3_th, i, j, k, criterion.getTypeHandler()));
}
}
sb.append(')');
}
}
sb.append(')');
}
}
if (sb.length() > 0) {
sql.WHERE(sb.toString());
}
}
}

@ -0,0 +1,178 @@
package com.hai.entity;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* high_profit_sharing_record
* @author
*/
/**
*
* 代码由工具生成
*
**/
public class HighProfitSharingRecord implements Serializable {
/**
* 主键ID
*/
private Long id;
/**
* 微信订单号
*/
private String transactionId;
/**
* 商户分账单号
*/
private String outOrderNo;
/**
* 微信分账单号
*/
private String orderId;
/**
* 分账金额
*/
private BigDecimal price;
/**
* 报文内容
*/
private String content;
/**
* 创建时间
*/
private Date createTime;
/**
* 状态以微信返回为准
*/
private String status;
private static final long serialVersionUID = 1L;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTransactionId() {
return transactionId;
}
public void setTransactionId(String transactionId) {
this.transactionId = transactionId;
}
public String getOutOrderNo() {
return outOrderNo;
}
public void setOutOrderNo(String outOrderNo) {
this.outOrderNo = outOrderNo;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
HighProfitSharingRecord other = (HighProfitSharingRecord) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getTransactionId() == null ? other.getTransactionId() == null : this.getTransactionId().equals(other.getTransactionId()))
&& (this.getOutOrderNo() == null ? other.getOutOrderNo() == null : this.getOutOrderNo().equals(other.getOutOrderNo()))
&& (this.getOrderId() == null ? other.getOrderId() == null : this.getOrderId().equals(other.getOrderId()))
&& (this.getPrice() == null ? other.getPrice() == null : this.getPrice().equals(other.getPrice()))
&& (this.getContent() == null ? other.getContent() == null : this.getContent().equals(other.getContent()))
&& (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()))
&& (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getTransactionId() == null) ? 0 : getTransactionId().hashCode());
result = prime * result + ((getOutOrderNo() == null) ? 0 : getOutOrderNo().hashCode());
result = prime * result + ((getOrderId() == null) ? 0 : getOrderId().hashCode());
result = prime * result + ((getPrice() == null) ? 0 : getPrice().hashCode());
result = prime * result + ((getContent() == null) ? 0 : getContent().hashCode());
result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", transactionId=").append(transactionId);
sb.append(", outOrderNo=").append(outOrderNo);
sb.append(", orderId=").append(orderId);
sb.append(", price=").append(price);
sb.append(", content=").append(content);
sb.append(", createTime=").append(createTime);
sb.append(", status=").append(status);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}

@ -0,0 +1,754 @@
package com.hai.entity;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class HighProfitSharingRecordExample {
protected String orderByClause;
protected boolean distinct;
protected List<Criteria> oredCriteria;
private Integer limit;
private Long offset;
public HighProfitSharingRecordExample() {
oredCriteria = new ArrayList<Criteria>();
}
public void setOrderByClause(String orderByClause) {
this.orderByClause = orderByClause;
}
public String getOrderByClause() {
return orderByClause;
}
public void setDistinct(boolean distinct) {
this.distinct = distinct;
}
public boolean isDistinct() {
return distinct;
}
public List<Criteria> getOredCriteria() {
return oredCriteria;
}
public void or(Criteria criteria) {
oredCriteria.add(criteria);
}
public Criteria or() {
Criteria criteria = createCriteriaInternal();
oredCriteria.add(criteria);
return criteria;
}
public Criteria createCriteria() {
Criteria criteria = createCriteriaInternal();
if (oredCriteria.size() == 0) {
oredCriteria.add(criteria);
}
return criteria;
}
protected Criteria createCriteriaInternal() {
Criteria criteria = new Criteria();
return criteria;
}
public void clear() {
oredCriteria.clear();
orderByClause = null;
distinct = false;
}
public void setLimit(Integer limit) {
this.limit = limit;
}
public Integer getLimit() {
return limit;
}
public void setOffset(Long offset) {
this.offset = offset;
}
public Long getOffset() {
return offset;
}
protected abstract static class GeneratedCriteria {
protected List<Criterion> criteria;
protected GeneratedCriteria() {
super();
criteria = new ArrayList<Criterion>();
}
public boolean isValid() {
return criteria.size() > 0;
}
public List<Criterion> getAllCriteria() {
return criteria;
}
public List<Criterion> getCriteria() {
return criteria;
}
protected void addCriterion(String condition) {
if (condition == null) {
throw new RuntimeException("Value for condition cannot be null");
}
criteria.add(new Criterion(condition));
}
protected void addCriterion(String condition, Object value, String property) {
if (value == null) {
throw new RuntimeException("Value for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value));
}
protected void addCriterion(String condition, Object value1, Object value2, String property) {
if (value1 == null || value2 == null) {
throw new RuntimeException("Between values for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value1, value2));
}
public Criteria andIdIsNull() {
addCriterion("id is null");
return (Criteria) this;
}
public Criteria andIdIsNotNull() {
addCriterion("id is not null");
return (Criteria) this;
}
public Criteria andIdEqualTo(Long value) {
addCriterion("id =", value, "id");
return (Criteria) this;
}
public Criteria andIdNotEqualTo(Long value) {
addCriterion("id <>", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThan(Long value) {
addCriterion("id >", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThanOrEqualTo(Long value) {
addCriterion("id >=", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThan(Long value) {
addCriterion("id <", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThanOrEqualTo(Long value) {
addCriterion("id <=", value, "id");
return (Criteria) this;
}
public Criteria andIdIn(List<Long> values) {
addCriterion("id in", values, "id");
return (Criteria) this;
}
public Criteria andIdNotIn(List<Long> values) {
addCriterion("id not in", values, "id");
return (Criteria) this;
}
public Criteria andIdBetween(Long value1, Long value2) {
addCriterion("id between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andIdNotBetween(Long value1, Long value2) {
addCriterion("id not between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andTransactionIdIsNull() {
addCriterion("transaction_id is null");
return (Criteria) this;
}
public Criteria andTransactionIdIsNotNull() {
addCriterion("transaction_id is not null");
return (Criteria) this;
}
public Criteria andTransactionIdEqualTo(String value) {
addCriterion("transaction_id =", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdNotEqualTo(String value) {
addCriterion("transaction_id <>", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdGreaterThan(String value) {
addCriterion("transaction_id >", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdGreaterThanOrEqualTo(String value) {
addCriterion("transaction_id >=", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdLessThan(String value) {
addCriterion("transaction_id <", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdLessThanOrEqualTo(String value) {
addCriterion("transaction_id <=", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdLike(String value) {
addCriterion("transaction_id like", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdNotLike(String value) {
addCriterion("transaction_id not like", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdIn(List<String> values) {
addCriterion("transaction_id in", values, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdNotIn(List<String> values) {
addCriterion("transaction_id not in", values, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdBetween(String value1, String value2) {
addCriterion("transaction_id between", value1, value2, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdNotBetween(String value1, String value2) {
addCriterion("transaction_id not between", value1, value2, "transactionId");
return (Criteria) this;
}
public Criteria andOutOrderNoIsNull() {
addCriterion("out_order_no is null");
return (Criteria) this;
}
public Criteria andOutOrderNoIsNotNull() {
addCriterion("out_order_no is not null");
return (Criteria) this;
}
public Criteria andOutOrderNoEqualTo(String value) {
addCriterion("out_order_no =", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoNotEqualTo(String value) {
addCriterion("out_order_no <>", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoGreaterThan(String value) {
addCriterion("out_order_no >", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoGreaterThanOrEqualTo(String value) {
addCriterion("out_order_no >=", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoLessThan(String value) {
addCriterion("out_order_no <", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoLessThanOrEqualTo(String value) {
addCriterion("out_order_no <=", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoLike(String value) {
addCriterion("out_order_no like", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoNotLike(String value) {
addCriterion("out_order_no not like", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoIn(List<String> values) {
addCriterion("out_order_no in", values, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoNotIn(List<String> values) {
addCriterion("out_order_no not in", values, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoBetween(String value1, String value2) {
addCriterion("out_order_no between", value1, value2, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoNotBetween(String value1, String value2) {
addCriterion("out_order_no not between", value1, value2, "outOrderNo");
return (Criteria) this;
}
public Criteria andOrderIdIsNull() {
addCriterion("order_id is null");
return (Criteria) this;
}
public Criteria andOrderIdIsNotNull() {
addCriterion("order_id is not null");
return (Criteria) this;
}
public Criteria andOrderIdEqualTo(String value) {
addCriterion("order_id =", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdNotEqualTo(String value) {
addCriterion("order_id <>", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdGreaterThan(String value) {
addCriterion("order_id >", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdGreaterThanOrEqualTo(String value) {
addCriterion("order_id >=", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdLessThan(String value) {
addCriterion("order_id <", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdLessThanOrEqualTo(String value) {
addCriterion("order_id <=", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdLike(String value) {
addCriterion("order_id like", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdNotLike(String value) {
addCriterion("order_id not like", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdIn(List<String> values) {
addCriterion("order_id in", values, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdNotIn(List<String> values) {
addCriterion("order_id not in", values, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdBetween(String value1, String value2) {
addCriterion("order_id between", value1, value2, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdNotBetween(String value1, String value2) {
addCriterion("order_id not between", value1, value2, "orderId");
return (Criteria) this;
}
public Criteria andPriceIsNull() {
addCriterion("price is null");
return (Criteria) this;
}
public Criteria andPriceIsNotNull() {
addCriterion("price is not null");
return (Criteria) this;
}
public Criteria andPriceEqualTo(BigDecimal value) {
addCriterion("price =", value, "price");
return (Criteria) this;
}
public Criteria andPriceNotEqualTo(BigDecimal value) {
addCriterion("price <>", value, "price");
return (Criteria) this;
}
public Criteria andPriceGreaterThan(BigDecimal value) {
addCriterion("price >", value, "price");
return (Criteria) this;
}
public Criteria andPriceGreaterThanOrEqualTo(BigDecimal value) {
addCriterion("price >=", value, "price");
return (Criteria) this;
}
public Criteria andPriceLessThan(BigDecimal value) {
addCriterion("price <", value, "price");
return (Criteria) this;
}
public Criteria andPriceLessThanOrEqualTo(BigDecimal value) {
addCriterion("price <=", value, "price");
return (Criteria) this;
}
public Criteria andPriceIn(List<BigDecimal> values) {
addCriterion("price in", values, "price");
return (Criteria) this;
}
public Criteria andPriceNotIn(List<BigDecimal> values) {
addCriterion("price not in", values, "price");
return (Criteria) this;
}
public Criteria andPriceBetween(BigDecimal value1, BigDecimal value2) {
addCriterion("price between", value1, value2, "price");
return (Criteria) this;
}
public Criteria andPriceNotBetween(BigDecimal value1, BigDecimal value2) {
addCriterion("price not between", value1, value2, "price");
return (Criteria) this;
}
public Criteria andContentIsNull() {
addCriterion("content is null");
return (Criteria) this;
}
public Criteria andContentIsNotNull() {
addCriterion("content is not null");
return (Criteria) this;
}
public Criteria andContentEqualTo(String value) {
addCriterion("content =", value, "content");
return (Criteria) this;
}
public Criteria andContentNotEqualTo(String value) {
addCriterion("content <>", value, "content");
return (Criteria) this;
}
public Criteria andContentGreaterThan(String value) {
addCriterion("content >", value, "content");
return (Criteria) this;
}
public Criteria andContentGreaterThanOrEqualTo(String value) {
addCriterion("content >=", value, "content");
return (Criteria) this;
}
public Criteria andContentLessThan(String value) {
addCriterion("content <", value, "content");
return (Criteria) this;
}
public Criteria andContentLessThanOrEqualTo(String value) {
addCriterion("content <=", value, "content");
return (Criteria) this;
}
public Criteria andContentLike(String value) {
addCriterion("content like", value, "content");
return (Criteria) this;
}
public Criteria andContentNotLike(String value) {
addCriterion("content not like", value, "content");
return (Criteria) this;
}
public Criteria andContentIn(List<String> values) {
addCriterion("content in", values, "content");
return (Criteria) this;
}
public Criteria andContentNotIn(List<String> values) {
addCriterion("content not in", values, "content");
return (Criteria) this;
}
public Criteria andContentBetween(String value1, String value2) {
addCriterion("content between", value1, value2, "content");
return (Criteria) this;
}
public Criteria andContentNotBetween(String value1, String value2) {
addCriterion("content not between", value1, value2, "content");
return (Criteria) this;
}
public Criteria andCreateTimeIsNull() {
addCriterion("create_time is null");
return (Criteria) this;
}
public Criteria andCreateTimeIsNotNull() {
addCriterion("create_time is not null");
return (Criteria) this;
}
public Criteria andCreateTimeEqualTo(Date value) {
addCriterion("create_time =", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeNotEqualTo(Date value) {
addCriterion("create_time <>", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeGreaterThan(Date value) {
addCriterion("create_time >", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
addCriterion("create_time >=", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeLessThan(Date value) {
addCriterion("create_time <", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
addCriterion("create_time <=", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeIn(List<Date> values) {
addCriterion("create_time in", values, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeNotIn(List<Date> values) {
addCriterion("create_time not in", values, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeBetween(Date value1, Date value2) {
addCriterion("create_time between", value1, value2, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
addCriterion("create_time not between", value1, value2, "createTime");
return (Criteria) this;
}
public Criteria andStatusIsNull() {
addCriterion("`status` is null");
return (Criteria) this;
}
public Criteria andStatusIsNotNull() {
addCriterion("`status` is not null");
return (Criteria) this;
}
public Criteria andStatusEqualTo(String value) {
addCriterion("`status` =", value, "status");
return (Criteria) this;
}
public Criteria andStatusNotEqualTo(String value) {
addCriterion("`status` <>", value, "status");
return (Criteria) this;
}
public Criteria andStatusGreaterThan(String value) {
addCriterion("`status` >", value, "status");
return (Criteria) this;
}
public Criteria andStatusGreaterThanOrEqualTo(String value) {
addCriterion("`status` >=", value, "status");
return (Criteria) this;
}
public Criteria andStatusLessThan(String value) {
addCriterion("`status` <", value, "status");
return (Criteria) this;
}
public Criteria andStatusLessThanOrEqualTo(String value) {
addCriterion("`status` <=", value, "status");
return (Criteria) this;
}
public Criteria andStatusLike(String value) {
addCriterion("`status` like", value, "status");
return (Criteria) this;
}
public Criteria andStatusNotLike(String value) {
addCriterion("`status` not like", value, "status");
return (Criteria) this;
}
public Criteria andStatusIn(List<String> values) {
addCriterion("`status` in", values, "status");
return (Criteria) this;
}
public Criteria andStatusNotIn(List<String> values) {
addCriterion("`status` not in", values, "status");
return (Criteria) this;
}
public Criteria andStatusBetween(String value1, String value2) {
addCriterion("`status` between", value1, value2, "status");
return (Criteria) this;
}
public Criteria andStatusNotBetween(String value1, String value2) {
addCriterion("`status` not between", value1, value2, "status");
return (Criteria) this;
}
}
/**
*/
public static class Criteria extends GeneratedCriteria {
protected Criteria() {
super();
}
}
public static class Criterion {
private String condition;
private Object value;
private Object secondValue;
private boolean noValue;
private boolean singleValue;
private boolean betweenValue;
private boolean listValue;
private String typeHandler;
public String getCondition() {
return condition;
}
public Object getValue() {
return value;
}
public Object getSecondValue() {
return secondValue;
}
public boolean isNoValue() {
return noValue;
}
public boolean isSingleValue() {
return singleValue;
}
public boolean isBetweenValue() {
return betweenValue;
}
public boolean isListValue() {
return listValue;
}
public String getTypeHandler() {
return typeHandler;
}
protected Criterion(String condition) {
super();
this.condition = condition;
this.typeHandler = null;
this.noValue = true;
}
protected Criterion(String condition, Object value, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.typeHandler = typeHandler;
if (value instanceof List<?>) {
this.listValue = true;
} else {
this.singleValue = true;
}
}
protected Criterion(String condition, Object value) {
this(condition, value, null);
}
protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.secondValue = secondValue;
this.typeHandler = typeHandler;
this.betweenValue = true;
}
protected Criterion(String condition, Object value, Object secondValue) {
this(condition, value, secondValue, null);
}
}
}

@ -0,0 +1,98 @@
package com.hai.model;
/**
* 分账结果
*/
public class ResultProfitSharing {
private String return_code;
private String result_code;
private String mch_id;
private String sub_mch_id;
private String appid;
private String nonce_str;
private String sign;
private String transaction_id;
private String out_order_no;
private String order_id;
public String getReturn_code() {
return return_code;
}
public void setReturn_code(String return_code) {
this.return_code = return_code;
}
public String getResult_code() {
return result_code;
}
public void setResult_code(String result_code) {
this.result_code = result_code;
}
public String getMch_id() {
return mch_id;
}
public void setMch_id(String mch_id) {
this.mch_id = mch_id;
}
public String getSub_mch_id() {
return sub_mch_id;
}
public void setSub_mch_id(String sub_mch_id) {
this.sub_mch_id = sub_mch_id;
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public String getNonce_str() {
return nonce_str;
}
public void setNonce_str(String nonce_str) {
this.nonce_str = nonce_str;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getTransaction_id() {
return transaction_id;
}
public void setTransaction_id(String transaction_id) {
this.transaction_id = transaction_id;
}
public String getOut_order_no() {
return out_order_no;
}
public void setOut_order_no(String out_order_no) {
this.out_order_no = out_order_no;
}
public String getOrder_id() {
return order_id;
}
public void setOrder_id(String order_id) {
this.order_id = order_id;
}
}

@ -0,0 +1,162 @@
package com.hai.model;
/**
* 分账请求类
*/
public class WxSharingOrderRequestModel {
/**
* 服务商商户号
*/
private String mch_id;
/**
* 子商户号
*/
private String sub_mch_id;
/**
* 服务商appid
*/
private String appid;
/**
* 子商户appid
*/
private String sub_appid;
/**
* 随机字符串
*/
private String nonce_str;
/**
* 签名
*/
private String sign;
/**
* 签名类型只支持HMAC-SHA256
*/
private String sign_type;
/**
* 微信订单号
*/
private String transaction_id;
/**
* 商家订单号
*/
private String out_trade_no;
/**
* 商户分账单号同一个单号多次提交只算一次
*/
private String out_order_no;
/**
* 商户分账金额小于等于订单金额*1-手续费*最大分账比例
*/
private Integer amount;
/**
* 分账接收方列表单次分账不能即是支付商户又是接收商户多次分账没有限制
*/
private String receiver;
public String getMch_id() {
return mch_id;
}
public void setMch_id(String mch_id) {
this.mch_id = mch_id;
}
public String getSub_mch_id() {
return sub_mch_id;
}
public void setSub_mch_id(String sub_mch_id) {
this.sub_mch_id = sub_mch_id;
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public String getSub_appid() {
return sub_appid;
}
public void setSub_appid(String sub_appid) {
this.sub_appid = sub_appid;
}
public String getNonce_str() {
return nonce_str;
}
public void setNonce_str(String nonce_str) {
this.nonce_str = nonce_str;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getSign_type() {
return sign_type;
}
public void setSign_type(String sign_type) {
this.sign_type = sign_type;
}
public String getTransaction_id() {
return transaction_id;
}
public void setTransaction_id(String transaction_id) {
this.transaction_id = transaction_id;
}
public String getOut_trade_no() {
return out_trade_no;
}
public void setOut_trade_no(String out_trade_no) {
this.out_trade_no = out_trade_no;
}
public String getOut_order_no() {
return out_order_no;
}
public void setOut_order_no(String out_order_no) {
this.out_order_no = out_order_no;
}
public Integer getAmount() {
return amount;
}
public void setAmount(Integer amount) {
this.amount = amount;
}
public String getReceiver() {
return receiver;
}
public void setReceiver(String receiver) {
this.receiver = receiver;
}
}

@ -0,0 +1,147 @@
package com.hai.model;
// 分账返回
public class WxSharingOrderResp {
//返回状态码,通信标识,SUCCESS/FAIL
private String return_code;
//返回信息,通信标识OK
private String return_msg;
//业务结果,交易标识,SUCCESS/FAIL
private String result_code;
//错误代码
private String err_code;
//错误代码描述
private String err_code_des;
//商户号
private String mch_id;
//子商户号
private String sub_mch_id;
//公众账号id
private String appid;
private String sub_appid;
//随机字符串
private String nonce_str;
//签名
private String sign;
//微信支付订单号
private String transaction_id;
//商户分账单号(商户订单号)
private String out_order_no;
//商户分账单号
private String order_id;
public String getReturn_code() {
return return_code;
}
public void setReturn_code(String return_code) {
this.return_code = return_code;
}
public String getReturn_msg() {
return return_msg;
}
public void setReturn_msg(String return_msg) {
this.return_msg = return_msg;
}
public String getResult_code() {
return result_code;
}
public void setResult_code(String result_code) {
this.result_code = result_code;
}
public String getErr_code() {
return err_code;
}
public void setErr_code(String err_code) {
this.err_code = err_code;
}
public String getErr_code_des() {
return err_code_des;
}
public void setErr_code_des(String err_code_des) {
this.err_code_des = err_code_des;
}
public String getMch_id() {
return mch_id;
}
public void setMch_id(String mch_id) {
this.mch_id = mch_id;
}
public String getSub_mch_id() {
return sub_mch_id;
}
public void setSub_mch_id(String sub_mch_id) {
this.sub_mch_id = sub_mch_id;
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public String getSub_appid() {
return sub_appid;
}
public void setSub_appid(String sub_appid) {
this.sub_appid = sub_appid;
}
public String getNonce_str() {
return nonce_str;
}
public void setNonce_str(String nonce_str) {
this.nonce_str = nonce_str;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getTransaction_id() {
return transaction_id;
}
public void setTransaction_id(String transaction_id) {
this.transaction_id = transaction_id;
}
public String getOut_order_no() {
return out_order_no;
}
public void setOut_order_no(String out_order_no) {
this.out_order_no = out_order_no;
}
public String getOrder_id() {
return order_id;
}
public void setOrder_id(String order_id) {
this.order_id = order_id;
}
}

@ -0,0 +1,84 @@
package com.hai.model;
/**
* 分账接收方
*/
public class WxSharingReceiversVO {
/**
* 分账接收方类型
*/
private String type;
/**
* 分账接收方帐号
*/
private String account;
/**
* 分账金额
*/
private Integer amount;
/**
* 分账描述
*/
private String description;
/**
* 与分账方的关系类型
*/
private String relation_type;
/**
* 分账接收方全称
*/
private String name;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public Integer getAmount() {
return amount;
}
public void setAmount(Integer amount) {
this.amount = amount;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getRelation_type() {
return relation_type;
}
public void setRelation_type(String relation_type) {
this.relation_type = relation_type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

@ -0,0 +1,12 @@
package com.hai.service;
import com.hai.entity.HighProfitSharingRecord;
/**
* 分账记录
*/
public interface HighProfitSharingRecordService {
void insert(HighProfitSharingRecord highProfitSharingRecord);
}

@ -0,0 +1,20 @@
package com.hai.service.impl;
import com.hai.dao.HighProfitSharingRecordMapper;
import com.hai.entity.HighProfitSharingRecord;
import com.hai.service.HighProfitSharingRecordService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service("highProfitSharingRecord")
public class HighProfitSharingRecordServiceImpl implements HighProfitSharingRecordService {
@Resource
private HighProfitSharingRecordMapper highProfitSharingRecordMapper;
@Override
public void insert(HighProfitSharingRecord highProfitSharingRecord) {
highProfitSharingRecordMapper.insert(highProfitSharingRecord);
}
}

@ -18,4 +18,5 @@ public interface PayService {
*/ */
void paySuccess(Map<String, String> map, String payType) throws Exception; void paySuccess(Map<String, String> map, String payType) throws Exception;
} }

@ -1,21 +1,38 @@
package com.hai.service.pay.impl; package com.hai.service.pay.impl;
import com.alibaba.fastjson.JSONObject;
import com.hai.common.exception.ErrorCode; import com.hai.common.exception.ErrorCode;
import com.hai.common.exception.ErrorHelp; import com.hai.common.exception.ErrorHelp;
import com.hai.common.exception.SysCode; import com.hai.common.exception.SysCode;
import com.hai.common.pay.util.XmlUtil;
import com.hai.common.pay.util.sdk.WXPayConstants;
import com.hai.common.utils.WxUtils;
import com.hai.dao.HighUserCouponMapper; import com.hai.dao.HighUserCouponMapper;
import com.hai.entity.*; import com.hai.entity.*;
import com.hai.model.ResultProfitSharing;
import com.hai.service.*; import com.hai.service.*;
import com.hai.service.pay.PayService; import com.hai.service.pay.PayService;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.net.ssl.SSLContext;
import java.io.FileInputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Calendar; import java.security.KeyStore;
import java.util.Date; import java.util.*;
import java.util.Map;
/** /**
* @Auther: 胡锐 * @Auther: 胡锐
@ -25,6 +42,8 @@ import java.util.Map;
@Service("goodsOrderService") @Service("goodsOrderService")
public class GoodsOrderServiceImpl implements PayService { public class GoodsOrderServiceImpl implements PayService {
private static Logger log = LoggerFactory.getLogger(GoodsOrderServiceImpl.class);
@Resource @Resource
private HighOrderService highOrderService; private HighOrderService highOrderService;
@ -40,6 +59,9 @@ public class GoodsOrderServiceImpl implements PayService {
@Resource @Resource
private HighUserCouponMapper highUserCouponMapper; private HighUserCouponMapper highUserCouponMapper;
@Resource
private HighProfitSharingRecordService highProfitSharingRecordService;
@Override @Override
@Transactional(propagation= Propagation.REQUIRES_NEW) @Transactional(propagation= Propagation.REQUIRES_NEW)
public void paySuccess(Map<String, String> map, String payType) throws Exception { public void paySuccess(Map<String, String> map, String payType) throws Exception {
@ -53,59 +75,164 @@ public class GoodsOrderServiceImpl implements PayService {
if (order == null) { if (order == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.NOT_FOUND_ORDER, ""); throw ErrorHelp.genException(SysCode.System, ErrorCode.NOT_FOUND_ORDER, "");
} }
order.setPaySerialNo(map.get("transaction_id")); // 支付流水号 if (order.getOrderStatus() == 1) {
order.setPayRealPrice(new BigDecimal(map.get("total_fee")).divide(new BigDecimal("100"))); // 实付金额 order.setPaySerialNo(map.get("transaction_id")); // 支付流水号
order.setPayTime(new Date()); // 支付时间 order.setPayRealPrice(new BigDecimal(map.get("total_fee")).divide(new BigDecimal("100"))); // 实付金额
order.setPayModel(2); // 支付模式:1 金币,2 第三方平台,3 混合 order.setPayTime(new Date()); // 支付时间
order.setPayType(2); // 支付方式: 1:支付宝 2:微信 3:金币 order.setPayModel(2); // 支付模式:1 金币,2 第三方平台,3 混合
order.setOrderStatus(2); // 订单状态:1 待支付 2 已支付 3.已完成 4. 已退款 5.已取消 order.setPayType(2); // 支付方式: 1:支付宝 2:微信 3:金币
order.setOrderStatus(2); // 订单状态:1 待支付 2 已支付 3.已完成 4. 已退款 5.已取消
for (HighChildOrder highChildOrder : order.getHighChildOrderList()) {
// 商品类型 商品类型 1:卡卷 2:金币充值 for (HighChildOrder highChildOrder : order.getHighChildOrderList()) {
if (highChildOrder.getGoodsType() == 1) { // 商品类型 商品类型 1:卡卷 2:金币充值
highChildOrder.setChildOrdeStatus(2); // 子订单状态:1 待支付 2 已支付 3.已完成 4. 已退款 5.已取消 if (highChildOrder.getGoodsType() == 1) {
HighCouponCode code = highCouponCodeService.getCouponCodeByOrderId(highChildOrder.getId()); highChildOrder.setChildOrdeStatus(2); // 子订单状态:1 待支付 2 已支付 3.已完成 4. 已退款 5.已取消
code.setStatus(2); // 状态:1.待销售 2.未使用 3.已使用 99.预支付 HighCouponCode code = highCouponCodeService.getCouponCodeByOrderId(highChildOrder.getId());
code.setReceiveTime(new Date()); code.setStatus(2); // 状态:1.待销售 2.未使用 3.已使用 99.预支付
highCouponCodeService.updateCouponCode(code); code.setReceiveTime(new Date());
highCouponCodeService.updateCouponCode(code);
HighCoupon coupon = highCouponService.getCouponById(highChildOrder.getGoodsId());
HighCoupon coupon = highCouponService.getCouponById(highChildOrder.getGoodsId());
// 卡卷关联用户
HighUserCoupon highUserCoupon = new HighUserCoupon(); // 卡卷关联用户
highUserCoupon.setMerchantId(code.getMerchantId()); HighUserCoupon highUserCoupon = new HighUserCoupon();
highUserCoupon.setCouponId(code.getCouponId()); highUserCoupon.setMerchantId(code.getMerchantId());
highUserCoupon.setUserId(order.getMemId()); highUserCoupon.setCouponId(code.getCouponId());
highUserCoupon.setCouponCodeId(code.getId()); highUserCoupon.setUserId(order.getMemId());
highUserCoupon.setCreateTime(new Date()); highUserCoupon.setCouponCodeId(code.getId());
highUserCoupon.setQrCodeImg(code.getExt1()); highUserCoupon.setCreateTime(new Date());
highUserCoupon.setQrCodeImg(code.getExt1());
// 计算使用有效期
Calendar userEndTime = Calendar.getInstance(); // 计算使用有效期
userEndTime.setTime(new Date()); Calendar userEndTime = Calendar.getInstance();
userEndTime.set(Calendar.HOUR_OF_DAY, 23); userEndTime.setTime(new Date());
userEndTime.set(Calendar.MINUTE, 59); userEndTime.set(Calendar.HOUR_OF_DAY, 23);
userEndTime.set(Calendar.SECOND, 59); userEndTime.set(Calendar.MINUTE, 59);
userEndTime.add(Calendar.DATE, coupon.getRecycleDay()); userEndTime.set(Calendar.SECOND, 59);
if (userEndTime.getTime().compareTo(code.getUseEndTime()) == 1) { userEndTime.add(Calendar.DATE, coupon.getRecycleDay());
highUserCoupon.setUseEndTime(code.getUseEndTime()); if (userEndTime.getTime().compareTo(code.getUseEndTime()) == 1) {
} else { highUserCoupon.setUseEndTime(code.getUseEndTime());
highUserCoupon.setUseEndTime(userEndTime.getTime()); } else {
highUserCoupon.setUseEndTime(userEndTime.getTime());
}
highUserCoupon.setStatus(1); // 状态 0:已过期 1:未使用 2:已使用
highUserCouponMapper.insert(highUserCoupon);
} }
highUserCoupon.setStatus(1); // 状态 0:已过期 1:未使用 2:已使用
highUserCouponMapper.insert(highUserCoupon);
}
if (highChildOrder.getGoodsType() == 2) { if (highChildOrder.getGoodsType() == 2) {
highChildOrder.setChildOrdeStatus(3); // 子订单状态:1 待支付 2 已支付 3.已完成 4. 已退款 5.已取消 highChildOrder.setChildOrdeStatus(3); // 子订单状态:1 待支付 2 已支付 3.已完成 4. 已退款 5.已取消
// 金币 1:100 // 金币 1:100
Integer goldNum = new BigDecimal(highChildOrder.getTotalPrice().toString()).multiply(new BigDecimal("100")).intValue(); Integer goldNum = new BigDecimal(highChildOrder.getTotalPrice().toString()).multiply(new BigDecimal("100")).intValue();
highUserService.goldHandle(highChildOrder.getGoodsId(), goldNum, 1, 1, highChildOrder.getId()); highUserService.goldHandle(highChildOrder.getGoodsId(), goldNum, 1, 1, highChildOrder.getId());
}
} }
highOrderService.updateOrder(order);
new Thread(() -> {
try {
Thread.sleep(60*1000);
BigDecimal rake = new BigDecimal("0.01");
BigDecimal profitSharingAmount = order.getPayRealPrice().multiply(rake);
this.wxProfitsharing(order.getPaySerialNo(),order.getOrderNo(),profitSharingAmount);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
} }
}
}
public void wxProfitsharing(String transaction_id,String out_order_no, BigDecimal amount) {
try {
Map<String,String> param = new LinkedHashMap<>();
param.put("appid", "wx637bd6f7314daa46");
param.put("mch_id", "1289663601");
param.put("sub_mch_id" , "1609882817");
param.put("transaction_id" , transaction_id);
param.put("out_order_no" , out_order_no);
param.put("nonce_str" , WxUtils.makeNonStr());
// 分账金额
BigDecimal porofitSharingAmount = amount;
List<Map<String,Object>> receiversList = new ArrayList<>();
Map<String,Object> receiversMap = new LinkedHashMap<>();
receiversMap.put("type", "MERCHANT_ID");
receiversMap.put("account", "1603942866");
receiversMap.put("amount", porofitSharingAmount.multiply(new BigDecimal("100")).intValue());
receiversMap.put("description", "分给商户1603942866");
receiversList.add(receiversMap);
param.put("receivers" , JSONObject.toJSONString(receiversList));
String signStr = WxUtils.generateSignature(param, "Skufk5oi85wDFGl888i6wsRSTkdd5df5" , WXPayConstants.SignType.HMACSHA256);
param.put("sign" , signStr);
String resultXmL = this.doRefundRequest(param.get("mch_id"),null, WxUtils.mapToXml(param));
// 请求分账返回的结果
ResultProfitSharing resultProfitSharing = XmlUtil.getObjectFromXML(resultXmL, ResultProfitSharing.class);
HighProfitSharingRecord sharingRecord = new HighProfitSharingRecord();
sharingRecord.setOutOrderNo(resultProfitSharing.getOut_order_no());
sharingRecord.setTransactionId(resultProfitSharing.getTransaction_id());
sharingRecord.setOrderId(resultProfitSharing.getOrder_id());
sharingRecord.setStatus(resultProfitSharing.getResult_code());
sharingRecord.setPrice(amount);
sharingRecord.setCreateTime(new Date());
sharingRecord.setContent(resultXmL);
highProfitSharingRecordService.insert(sharingRecord);
} catch (Exception e) {
log.error("CmsContentController --> getCorporateAdvertising() error!", e);
}
}
highOrderService.updateOrder(order); //微信小程序读取双向证书
private static CloseableHttpClient readCertificate(String mchId) throws Exception{
/**
* 注意PKCS12证书 是从微信商户平台-账户设置- API安全 中下载的
*/
KeyStore keyStore = KeyStore.getInstance("PKCS12");
//P12文件目录 证书路径,这里需要你自己修改,linux下还是windows下的根路径
FileInputStream instream = new FileInputStream("/home/project/wx_cert/1289663601_apiclient_cert.p12");
try {
keyStore.load(instream, "1289663601".toCharArray());//这里写密码..默认是你的MCHID
} finally {
instream.close();
}
SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, "1289663601".toCharArray()).build();//这里也是写密码的
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, SSLConnectionSocketFactory.getDefaultHostnameVerifier());
// Allow TLSv1 protocol only
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
}
public String doRefundRequest(String mchId, String url, String data) throws Exception {
//小程序退款需要调用双向证书的认证
CloseableHttpClient httpClient = readCertificate(mchId);
try {
HttpPost httpost = new HttpPost("https://api.mch.weixin.qq.com/secapi/pay/profitsharing"); // 设置响应头信息
httpost.addHeader("Connection", "keep-alive");
httpost.addHeader("Accept", "*/*");
httpost.addHeader("Content-Type", "text/xml");
httpost.addHeader("Host", "api.mch.weixin.qq.com");
httpost.addHeader("X-Requested-With", "XMLHttpRequest");
httpost.addHeader("Cache-Control", "max-age=0");
httpost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
httpost.setEntity(new StringEntity(data, "UTF-8"));
CloseableHttpResponse response = httpClient.execute(httpost);
try {
HttpEntity entity = response.getEntity();
String jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8");
EntityUtils.consume(entity);
return jsonStr;
} finally {
response.close();
}
} catch (Exception e){
throw new RuntimeException(e);
} finally {
httpClient.close();
} }
} }
} }

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID2jCCAsKgAwIBAgIUUPi1hMq87bxzKky00MSigY+1IZswDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjAxMjMxMTAyNDAzWhcNMjUxMjMwMTAyNDAzWjBsMRMwEQYDVQQDDAox
NjA0OTY4MDU1MRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xGDAWBgNVBAsM
D+S4quS9k+aIt+aWuea2mzELMAkGA1UEBgwCQ04xETAPBgNVBAcMCFNoZW5aaGVu
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtDjbxytOraNz5QkibnZN
6Q8fBPA11FQyEducTlOxFTXEN2mVIlPrnDJMZ8jQ0fBTHpWsuPMdLY6quEpnBUhf
vzip0giRCo8HAbT8TO2KiQSB0cPiW4HBGvHLI447EXG/xpisHAk6TR1rvdvGtjih
nRpnTLrDTK6TLDKi/hwDGYu2fzGYsXiN++bP45FSLiOn4T29o8PDG2zTpvcrsHEe
lerNltWzPbk5TXnnMDvcoUq/AgvhQjXRpLtOtkhegBBOHJFdTo/ldyV2YJkb/Yjp
SBGA+C/iuXkA5G7QW79LGa5Y0j5YNNHPlLHlxp5jfX+SZyBwmGtlHLFY44xwCN23
oQIDAQABo4GBMH8wCQYDVR0TBAIwADALBgNVHQ8EBAMCBPAwZQYDVR0fBF4wXDBa
oFigVoZUaHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9D
QT0xQkQ0MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyMA0GCSqG
SIb3DQEBCwUAA4IBAQAkPTsxOuOj2BMLj7EzRmx3e3KCjvnz0Y9bmT9ahpgwX4hS
Dv+iHL6urT6FBnGVfE0Ejyymk/zq8DGSG7l7lsCU7s4ul5aaWFpjF30CCGqo4n2B
RRDHaC+Mw2MvUttHvnwR5SB4Exot4Nc1jVqOMos9FVyh3EWkUExVPRSJcdHSANLo
WgiJcuqE7cnvm+njM4ZhywI/HUvSp7+Y7dbQfA5pjh8vEVI9j8+l+7fhD/wCIeoA
zLfCVhdPsJnVdJW31yXQLped2HoQXhFagYNc2/6LR8imF3CUfI+LCIg+SZeGGsdY
ADnqbf9JGLxbXTfjvoOWFUDiWE8mMWuhwki0EI2W
-----END CERTIFICATE-----

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC0ONvHK06to3Pl
CSJudk3pDx8E8DXUVDIR25xOU7EVNcQ3aZUiU+ucMkxnyNDR8FMelay48x0tjqq4
SmcFSF+/OKnSCJEKjwcBtPxM7YqJBIHRw+JbgcEa8csjjjsRcb/GmKwcCTpNHWu9
28a2OKGdGmdMusNMrpMsMqL+HAMZi7Z/MZixeI375s/jkVIuI6fhPb2jw8MbbNOm
9yuwcR6V6s2W1bM9uTlNeecwO9yhSr8CC+FCNdGku062SF6AEE4ckV1Oj+V3JXZg
mRv9iOlIEYD4L+K5eQDkbtBbv0sZrljSPlg00c+UseXGnmN9f5JnIHCYa2UcsVjj
jHAI3behAgMBAAECggEANZGRAiqFQGeNU07bxSm1DslH1xfvaCV+nIBCfaWyxTMu
F6pygbmgFtV8kHzIVR6yFi03IeJhkeEOLakv5goVK6mUELIrKpBI7OD2/Ya93uxQ
CiHHbpuq4m9sii0EsbK15joLLmovwiw0kkJ5VkCPCTuH6O66jlh1tnV2rUF2SmkU
9kfuEx+Id2fK+RK2+K8dCXQmYiS9R3mLQk9OSbanujVyQhlcKg7oPR6ko6UsI+jt
OGlkqxhPNFOuEKDbAsuKWp6kbvM1oWFb36oLpu+wzI0mUfbVatnsRKyE/ltH8xGY
Cm0T98Zic3kHb+k1PHPqm9Cn6olj1nk4A+o7BGAB4QKBgQDjjMqh4mz4G68PVgxI
0FXsEiFv8dr13MnwTzDd1dzPUksPqvPlTThn3I1IwLveDTx8+0SHknPyaJbz3a1d
gFfCCc5/MtK2n12PwwluiPHKNYvHnm/SFI6i5B/V5h5Ngk3g2WJi3shsQrdi620E
vfjSs8SJLLKpOncOfASitFCUqwKBgQDKwT2W4w1TVx7N5LSpVbvJJ01MPtoyHg90
e0aqCuAycjw6Fwta4OcwHQrfzGoGPSYbvYTW126uZF7HE7Rl+/SCvZcKFfYa6Y/L
sBeSUW6LGAQpbzwhcYOO6B4RwuX6/BMMruITwtGjUnVfurK4xeyir/Oq7VWCYKMG
AAy0bpWs4wKBgB6Ak/UJVhQYGepTXYgxLSNc9tB7uh80/njRFLrX3SaJYHh0MQdu
x33cqa+z7jsAyTfzsqb9sb8v1/ROpdufxaPEDsMsO+SxDiikO1Ju1wKFFPyoN1MQ
4GHjdIUGuM8pBWl7ml2ogXNJqi1/Y3i8Qmt0H4dHz5cxuB3f7/sjcp3LAoGAA+qr
t+h27281ZyDN5J+FWyNpONnV+TXfco6XFN3U6uSOCUk8rOq/TIyjEyOtwKUZwVtt
34CV4MSLmCjnSTkOxh/HdShrcqWkY3jpW6g7DHDQU8SUUskQk4gkXI95RdnsvEf8
kgknZ5JGNi0zGqKoKZRgjqK7DiOzwn/pvuqL9aUCgYEAzJVZIOW5fBmyZgA3VrCd
TUl84gldhg9bcqOUmPYOQdOlLx2gZeLqVWi2Lni66h8gz7Vka4OQGtjgULx96ggL
aV9ZHMSWXYxWj7dpF2QrM72vlybGs1VKCf/j/CGWJAzE1t5Uj/TAShtO3egS/4bk
dsTO2NlRDbN+Ty/TSN36l6o=
-----END PRIVATE KEY-----
Loading…
Cancel
Save