Commit 8d9c8598 by 董有沛

奖励结算模块

parent 671a73cd
package com.winsun.bean;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.Data;
@SuppressWarnings("serial")
@TableName("hhr_bonus")
@Data
public class BonusApply implements Serializable{
/**
* 主键
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 申请单号
*/
private String applyNum;
/**
* 佣金记录编号
*/
private String bonusNum;
/**
* 佣金所有者
*/
private String userId;
/**
* 佣金
*/
private Double bonus;
/**
* 状态
*/
private String state;
/**
* 创建日期
*/
private Date createDate;
/**
* 申请人id
*/
private String applicantId;
/**
* 申请人
*/
private String applicant;
/**
* 审核时间
*/
private String auditDate;
}
...@@ -25,7 +25,7 @@ public class HhrUser implements Serializable{ ...@@ -25,7 +25,7 @@ public class HhrUser implements Serializable{
private String idCard; private String idCard;
/** /**
* 年 * 年
*/ */
private String grade; private String grade;
...@@ -40,10 +40,9 @@ public class HhrUser implements Serializable{ ...@@ -40,10 +40,9 @@ public class HhrUser implements Serializable{
private String wxHeadImgUrl; private String wxHeadImgUrl;
/** /**
* mybatis 可以跟新为空
* 公众号openid * 公众号openid
*/ */
@TableField(fill = FieldFill.UPDATE) // @TableField(fill = FieldFill.UPDATE)
private String openId; private String openId;
/** /**
......
...@@ -26,6 +26,16 @@ public class SalesOrder { ...@@ -26,6 +26,16 @@ public class SalesOrder {
private String userId; private String userId;
/** /**
* 放号人
*/
private String name;
/**
* 放号人账号
*/
private String account;
/**
* 创建时间 * 创建时间
*/ */
private Date createTime; private Date createTime;
......
package com.winsun.mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.winsun.bean.Bill;
import com.winsun.bean.BonusApply;
/**
*
* @author Warden
*
*/
@Mapper
@Component
public interface BonusMapper extends BaseMapper<BonusApply>{
@Insert(" insert into hhr_bonus_detail(bonus,apply_num,bonus_num,sales_id,order_phone) values(#{bonus},#{applyNum},#{bonusNum},#{salesId},#{orderPhone}) ")
int addApplyDetail(@Param("bonus") double bonus,@Param("applyNum") String applyNum,@Param("bonusNum") String bonusNum,@Param("salesId") int salesId,
@Param("orderPhone") String orderPhone);
@Insert(" insert into hhr_bonus_log(order_num,request_desc,pay_type,create_id,create_date,state) values(#{orderNum},#{requestDesc},#{payType},#{createId},now(),#{state}) ")
int addBonusLog(@Param("orderNum") String orderNum,@Param("requestDesc") String requestDesc,@Param("payType") String payType,@Param("createId") int createId,
@Param("state") int state);
@Update(" update hhr_bonus set state = #{state} where id = #{id} ")
int updateBonus(@Param("state") int state, @Param("int") int id);
@Update(" update hhr_bonus_log set response_desc = #{responseDesc},pay_order_num = #{payOrderNum},state = #{state} where order_num = #{orderNum} ")
int updateBonusLog(@Param("responseDesc") String responseDesc, @Param("payOrderNum") String payOrderNum, @Param("state") int state,
@Param("orderNum") String orderNum);
@Select(" select * from hhr_bonus_detail where bonus_num = #{bonusNum} ")
List<Map<String, Object>> getBonusDetail(@Param("bonusNum") String bonusNum);
}
...@@ -135,6 +135,35 @@ ...@@ -135,6 +135,35 @@
<groupId>com.winsun.framework</groupId> <groupId>com.winsun.framework</groupId>
<artifactId>winsun-core-service</artifactId> <artifactId>winsun-core-service</artifactId>
</dependency>--> </dependency>-->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.0.1</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.winsun.controller; package com.winsun.controller;
import java.io.IOException; import java.io.IOException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
...@@ -40,7 +39,6 @@ import com.winsun.auth.core.util.IOUtils; ...@@ -40,7 +39,6 @@ import com.winsun.auth.core.util.IOUtils;
import com.winsun.bean.SalesOrder; import com.winsun.bean.SalesOrder;
import com.winsun.bean.School; import com.winsun.bean.School;
import com.winsun.bean.SysUser; import com.winsun.bean.SysUser;
import com.winsun.bean.YrymReport;
import com.winsun.mapper.SalesOrderMapper; import com.winsun.mapper.SalesOrderMapper;
import com.winsun.mapper.SchoolMapper; import com.winsun.mapper.SchoolMapper;
import com.winsun.mapper.SysUserMapper; import com.winsun.mapper.SysUserMapper;
...@@ -208,25 +206,12 @@ public class SalesOrderController extends BaseController{ ...@@ -208,25 +206,12 @@ public class SalesOrderController extends BaseController{
} }
/** /**
* 根据县分名称获取一人一码发展统计表数据
*
* @param startTime 开始时间
* @param endTime 结束时间
* @return
*/
private List<YrymReport> getReportNum(String startTime, String endTime) {
List<YrymReport> resultList = new ArrayList<>();
return resultList;
}
/**
* 受理订单 * 受理订单
* *
* @param file 上传的数据文件 * @param file 上传的数据文件
* @return * @return
*/ */
@SuppressWarnings("unchecked")
@Permission(menuname = "上传订单数据", value = "importOrder", method = RequestMethod.POST) @Permission(menuname = "上传订单数据", value = "importOrder", method = RequestMethod.POST)
public ResponseData<String> importOrder(@RequestParam(name = "file") MultipartFile file) { public ResponseData<String> importOrder(@RequestParam(name = "file") MultipartFile file) {
StringBuffer info = new StringBuffer(); StringBuffer info = new StringBuffer();
...@@ -397,6 +382,8 @@ public class SalesOrderController extends BaseController{ ...@@ -397,6 +382,8 @@ public class SalesOrderController extends BaseController{
order.setSalesSubst((String)map.get("salesSubst")); order.setSalesSubst((String)map.get("salesSubst"));
order.setSalesSchool((String)map.get("salesSchool")); order.setSalesSchool((String)map.get("salesSchool"));
order.setOrderType("1"); order.setOrderType("1");
order.setName((String)map.get("name"));
order.setAccount((String)map.get("account"));
num += salesOrderMapper.insert(order); num += salesOrderMapper.insert(order);
} }
...@@ -432,7 +419,6 @@ public class SalesOrderController extends BaseController{ ...@@ -432,7 +419,6 @@ public class SalesOrderController extends BaseController{
*/ */
@Permission(menuname = "充值审核", value = "importRechargeData", method = RequestMethod.POST) @Permission(menuname = "充值审核", value = "importRechargeData", method = RequestMethod.POST)
public ResponseData<String> importRechargeData(@RequestParam(name = "file") MultipartFile file) { public ResponseData<String> importRechargeData(@RequestParam(name = "file") MultipartFile file) {
StringBuffer info = new StringBuffer();
if (!StringUtils.endsWithAny(file.getOriginalFilename(), "xlsx", "xls")) { if (!StringUtils.endsWithAny(file.getOriginalFilename(), "xlsx", "xls")) {
return ResponseData.error("手工上传数据仅支持Excel文件,其他格式不支持!"); return ResponseData.error("手工上传数据仅支持Excel文件,其他格式不支持!");
} }
...@@ -510,7 +496,6 @@ public class SalesOrderController extends BaseController{ ...@@ -510,7 +496,6 @@ public class SalesOrderController extends BaseController{
// 处理充值审核数据 // 处理充值审核数据
public int dealRechargeData(List<Map<String,Object>> list){ public int dealRechargeData(List<Map<String,Object>> list){
Map<String, Object> resultMap = new HashMap<String, Object>();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
...@@ -524,13 +509,13 @@ public class SalesOrderController extends BaseController{ ...@@ -524,13 +509,13 @@ public class SalesOrderController extends BaseController{
wrapperOrder.eq("send_bonus", 0); wrapperOrder.eq("send_bonus", 0);
wrapperOrder.ne("status", "0"); wrapperOrder.ne("status", "0");
List<Map<String, Object>> orderList = salesOrderMapper.selectMaps(wrapperOrder); List<Map<String, Object>> orderList = salesOrderMapper.selectMaps(wrapperOrder);
Map<String, Object> orderMaps = MapUtil.listToMap(orderList, "orderPhone"); Map<String, Map<String,Object>> orderMaps = MapUtil.listToMap(orderList, "orderPhone");
// 获取学校清单比较网点 // 获取学校清单比较网点
Wrapper<School> wrapperSchool = new EntityWrapper<School>(); Wrapper<School> wrapperSchool = new EntityWrapper<School>();
wrapperSchool.setSqlSelect(" school_name as schoolName,network_name as networkName,network_code as networkCode "); wrapperSchool.setSqlSelect(" school_name as schoolName,network_name as networkName,network_code as networkCode ");
List<Map<String, Object>> schoolList = schoolMapper.selectMaps(wrapperSchool); List<Map<String, Object>> schoolList = schoolMapper.selectMaps(wrapperSchool);
Map<String, Object> schoolMaps = MapUtil.listToMap(schoolList, "schoolName"); Map<String, Map<String,Object>> schoolMaps = MapUtil.listToMap(schoolList, "schoolName");
List<Map<String, Object>> updateList = new ArrayList<Map<String,Object>>(); List<Map<String, Object>> updateList = new ArrayList<Map<String,Object>>();
...@@ -634,7 +619,7 @@ public class SalesOrderController extends BaseController{ ...@@ -634,7 +619,7 @@ public class SalesOrderController extends BaseController{
} }
@Permission(menuname = "放号上传模板", method = RequestMethod.POST, value = "downloadTemplateFH") @Permission(menuname = "放号上传模板", method = RequestMethod.POST, value = "downloadTemplateFH")
public ResponseData downloadTemplateFH() { public ResponseData<String> downloadTemplateFH() {
ArrayList<String> columns = new ArrayList<>(); ArrayList<String> columns = new ArrayList<>();
columns.add(FH_SORT); columns.add(FH_SORT);
columns.add(FH_ORDER_PHONE); columns.add(FH_ORDER_PHONE);
...@@ -679,7 +664,7 @@ public class SalesOrderController extends BaseController{ ...@@ -679,7 +664,7 @@ public class SalesOrderController extends BaseController{
} }
@Permission(menuname = "充值审核模板", method = RequestMethod.POST, value = "downloadTemplateCZ") @Permission(menuname = "充值审核模板", method = RequestMethod.POST, value = "downloadTemplateCZ")
public ResponseData downloadTemplateCZ() { public ResponseData<String> downloadTemplateCZ() {
ArrayList<String> columns = new ArrayList<>(); ArrayList<String> columns = new ArrayList<>();
columns.add(CZ_ORDER_PHONE); columns.add(CZ_ORDER_PHONE);
columns.add(CZ_ACTIVATE_TIME); columns.add(CZ_ACTIVATE_TIME);
......
package com.winsun.controller; package com.winsun.controller;
import com.alibaba.fastjson.JSON; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.baomidou.mybatisplus.enums.SqlLike; import com.baomidou.mybatisplus.enums.SqlLike;
import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.plugins.Page;
import com.winsun.auth.core.annotion.Permission; import com.winsun.auth.core.annotion.Permission;
import com.winsun.auth.core.base.controller.BaseController; import com.winsun.auth.core.base.controller.BaseController;
import com.winsun.auth.core.common.model.ResponseData;
import com.winsun.auth.core.shiro.ShiroUser; import com.winsun.auth.core.shiro.ShiroUser;
import com.winsun.bean.Package; import com.winsun.bean.Package;
import com.winsun.bean.Product; import com.winsun.bean.Product;
...@@ -19,21 +33,8 @@ import com.winsun.mapper.SchoolMapper; ...@@ -19,21 +33,8 @@ import com.winsun.mapper.SchoolMapper;
import com.winsun.mapper.SchoolPackageMapper; import com.winsun.mapper.SchoolPackageMapper;
import com.winsun.utils.FileUtil; import com.winsun.utils.FileUtil;
import com.winsun.utils.MyBatisPlusUpdateUtils; import com.winsun.utils.MyBatisPlusUpdateUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.winsun.auth.core.common.model.ResponseData;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList; import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* @Author: chancy * @Author: chancy
...@@ -238,6 +239,7 @@ public class SchoolManagementController extends BaseController { ...@@ -238,6 +239,7 @@ public class SchoolManagementController extends BaseController {
schoolPackages.forEach(val->{ schoolPackages.forEach(val->{
arrayList.add(val.getPackageId()); arrayList.add(val.getPackageId());
}); });
hashMap.put("choosepages",arrayList); hashMap.put("choosepages",arrayList);
return ResponseData.success(hashMap, "查询完毕!"); return ResponseData.success(hashMap, "查询完毕!");
} }
...@@ -257,12 +259,13 @@ public class SchoolManagementController extends BaseController { ...@@ -257,12 +259,13 @@ public class SchoolManagementController extends BaseController {
return ResponseData.success("上传成功" ); return ResponseData.success("上传成功" );
} }
@Permission(menuname = "获取县分下拉列表", value = "substList", method = RequestMethod.POST)
@RequestMapping(name = "获取县分下拉列表", value = "substList", method = RequestMethod.POST)
public ResponseData<List<Map<String, Object>>> substList() { public ResponseData<List<Map<String, Object>>> substList() {
ShiroUser user = getShiroUser(); // ShiroUser user = getShiroUser();
if (!user.getRoleNames().stream().anyMatch(roleName -> StringUtils.equalsAny(roleName, "超级管理员"))) { // if (!user.getRoleNames().stream().anyMatch(roleName -> StringUtils.equalsAny(roleName, "超级管理员"))) {
return ResponseData.error("无数据权限"); // return ResponseData.error("无数据权限");
} // }
// 查询县分列表 // 查询县分列表
Wrapper<School> wrapperSubName = new EntityWrapper<School>(); Wrapper<School> wrapperSubName = new EntityWrapper<School>();
...@@ -274,12 +277,12 @@ public class SchoolManagementController extends BaseController { ...@@ -274,12 +277,12 @@ public class SchoolManagementController extends BaseController {
return ResponseData.success(substNameList, "查询完毕!"); return ResponseData.success(substNameList, "查询完毕!");
} }
@Permission(menuname = "获取学校下拉列表", value = "schoolList", method = RequestMethod.POST) @RequestMapping(name = "获取学校下拉列表", value = "schoolList", method = RequestMethod.POST)
public ResponseData<List<Map<String, Object>>> schoolList(@RequestParam("substName") String substName) { public ResponseData<List<Map<String, Object>>> schoolList(@RequestParam("substName") String substName) {
ShiroUser user = getShiroUser(); // ShiroUser user = getShiroUser();
if (!user.getRoleNames().stream().anyMatch(roleName -> StringUtils.equalsAny(roleName, "超级管理员"))) { // if (!user.getRoleNames().stream().anyMatch(roleName -> StringUtils.equalsAny(roleName, "超级管理员"))) {
return ResponseData.error("无数据权限"); // return ResponseData.error("无数据权限");
} // }
// 查询县分列表 // 查询县分列表
Wrapper<School> wrapper = new EntityWrapper<School>(); Wrapper<School> wrapper = new EntityWrapper<School>();
......
package com.winsun.tenpay;
import java.util.Properties;
public class AlipayGlobals
{
public static final String PARAMS_LIST = "paramsList";
private static Properties properties = null;
private static synchronized void loadProperties()
{
if (properties == null) {
properties = new InitPropLoader().getProperties("tenpayconfig.properties");
}
}
public static synchronized void reloadProperties()
{
properties = null;
properties = new InitPropLoader().getProperties("tenpayconfig.properties");
}
public static String getProperty(String property)
{
loadProperties();
String value = null;
if (properties != null)
{
value = properties.getProperty(property);
if (value != null) {
value = value.trim();
}
}
return value;
}
}
package com.winsun.tenpay;
public class CorporatePrepayResponse
{
private String appId;
private String timeStamp;
private String nonceStr;
private String _package;
private String signType;
private String paySign;
private String appKey;
private String mchId;
private String paymentNo;
private int amount;
private String openid;
private String partnerid;
private String prepareid;
private String errCodeDesc;
public String getAppId()
{
return this.appId;
}
public void setAppId(String appId)
{
this.appId = appId;
}
public String getTimeStamp()
{
return this.timeStamp;
}
public void setTimeStamp(String timeStamp)
{
this.timeStamp = timeStamp;
}
public String getNonceStr()
{
return this.nonceStr;
}
public void setNonceStr(String nonceStr)
{
this.nonceStr = nonceStr;
}
public String get_package()
{
return this._package;
}
public void set_package(String package1)
{
this._package = package1;
}
public String getSignType()
{
return this.signType;
}
public void setSignType(String signType)
{
this.signType = signType;
}
public String getPaySign()
{
return this.paySign;
}
public void setPaySign(String paySign)
{
this.paySign = paySign;
}
public String getAppKey()
{
return this.appKey;
}
public void setAppKey(String appKey)
{
this.appKey = appKey;
}
public String getPartnerid()
{
return this.partnerid;
}
public void setPartnerid(String partnerid)
{
this.partnerid = partnerid;
}
public String getPrepareid()
{
return this.prepareid;
}
public void setPrepareid(String prepareid)
{
this.prepareid = prepareid;
}
public String getMchId() {
return mchId;
}
public void setMchId(String mchId) {
this.mchId = mchId;
}
public String getPaymentNo() {
return paymentNo;
}
public void setPaymentNo(String paymentNo) {
this.paymentNo = paymentNo;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
public String getOpenid() {
return openid;
}
public void setOpenid(String openid) {
this.openid = openid;
}
public String getErrCodeDesc() {
return errCodeDesc;
}
public void setErrCodeDesc(String errCodeDesc) {
this.errCodeDesc = errCodeDesc;
}
}
package com.winsun.tenpay;
import java.io.InputStream;
import java.util.Properties;
public class InitPropLoader
{
public Properties getProperties(String propName)
{
Properties prop = new Properties();
InputStream in = null;
try
{
in = InitPropLoader.class.getResourceAsStream("/" + propName);
prop.load(in);
}
catch (Exception e)
{
e.printStackTrace();
try
{
if (in != null) {
in.close();
}
}
catch (Exception localException1) {}
}
finally
{
try
{
if (in != null) {
in.close();
}
}
catch (Exception localException2) {}
}
return prop;
}
}
package com.winsun.tenpay;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.winsun.tenpay.util.MD5Util;
import com.winsun.tenpay.util.TenpayUtil;
public class NewIntfRequestHandler {
private String gateUrl;
private String key;
private SortedMap parameters;
private String debugInfo;
protected HttpServletRequest request;
protected HttpServletResponse response;
public NewIntfRequestHandler(HttpServletRequest request, HttpServletResponse response) {
this.request = request;
this.response = response;
// this.gateUrl = "https://gw.tenpay.com/gateway/pay.htm";
this.gateUrl = " https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
this.key = "";
this.parameters = new TreeMap();
this.debugInfo = "";
}
public void init() {
}
public String getGateUrl() {
return this.gateUrl;
}
public void setGateUrl(String gateUrl) {
this.gateUrl = gateUrl;
}
public String getKey() {
return this.key;
}
public void setKey(String key) {
this.key = key;
}
public String getParameter(String parameter) {
String s = (String) this.parameters.get(parameter);
return s == null ? "" : s;
}
public void setParameter(String parameter, String parameterValue) {
String v = "";
if (parameterValue != null) {
v = parameterValue.trim();
}
this.parameters.put(parameter, v);
}
public SortedMap getAllParameters() {
return this.parameters;
}
public String getDebugInfo() {
return this.debugInfo;
}
public String getRequestURL() throws UnsupportedEncodingException {
createSign();
StringBuffer sb = new StringBuffer();
String enc = TenpayUtil.getCharacterEncoding(this.request, this.response);
Set es = this.parameters.entrySet();
Iterator it = es.iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
String k = (String) entry.getKey();
String v = (String) entry.getValue();
if (!"spbill_create_ip".equals(k)) {
sb.append(k + "=" + URLEncoder.encode(v, enc) + "&");
} else {
sb.append(k + "=" + v.replace("\\.", "%2E") + "&");
}
}
String reqPars = sb.substring(0, sb.lastIndexOf("&"));
return getGateUrl() + "?" + reqPars;
}
public void doSend() throws UnsupportedEncodingException, IOException {
this.response.sendRedirect(getRequestURL());
}
protected void createSign() {
StringBuffer sb = new StringBuffer();
Set es = this.parameters.entrySet();
Iterator it = es.iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
String k = (String) entry.getKey();
String v = (String) entry.getValue();
if ((v != null) && (!"".equals(v)) && (!"sign".equals(k)) && (!"key".equals(k))) {
sb.append(k + "=" + v + "&");
}
}
sb.append("key=" + getKey());
String sign = MD5Util.MD5Encode(sb.toString(), "UTF-8").toUpperCase();
setParameter("sign", sign);
setDebugInfo(sb.toString() + " => sign:" + sign);
}
protected void setDebugInfo(String debugInfo) {
this.debugInfo = debugInfo;
}
protected HttpServletRequest getHttpServletRequest() {
return this.request;
}
protected HttpServletResponse getHttpServletResponse() {
return this.response;
}
}
package com.winsun.tenpay;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import com.winsun.tenpay.util.ConstantUtil;
import com.winsun.tenpay.util.MD5Util;
public class TenpayNotify
{
private static Logger log = Logger.getLogger(TenpayNotify.class);
public static void buildSign(SortedMap<String, String> paramMap)
{
try
{
StringBuffer sb = new StringBuffer();
Set set = paramMap.entrySet();
Iterator it = set.iterator();
while (it.hasNext())
{
Map.Entry entry = (Map.Entry)it.next();
String k = (String)entry.getKey();
String v = (String)entry.getValue();
if ((v != null) && (!"".equals(v)) && (!"sign".equals(k)) && (!"key".equals(k))) {
sb.append(k + "=" + v + "&");
}
}
sb.append("key=" + ConstantUtil.APP_KEY);
String sign = MD5Util.MD5Encode(sb.toString(), "utf-8").toUpperCase();
paramMap.put("sign", sign);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static String buildTradeSign(SortedMap<String, String> paramMap)
{
String sign = "";
try
{
StringBuffer sb = new StringBuffer();
Set set = paramMap.entrySet();
Iterator it = set.iterator();
while (it.hasNext())
{
Map.Entry entry = (Map.Entry)it.next();
String k = (String)entry.getKey();
String v = (String)entry.getValue();
if ((v != null) && (!"".equals(v)) && (!"sign".equals(k)) && (!"key".equals(k))) {
sb.append(k + "=" + v + "&");
}
}
sb.append("key=" + ConstantUtil.APP_KEY);
sign = MD5Util.MD5Encode(sb.toString(), "utf-8").toUpperCase();
}
catch (Exception e)
{
e.printStackTrace();
}
return sign;
}
public static boolean verifySign(SortedMap<String, String> paramMap)
{
try
{
StringBuffer sb = new StringBuffer();
String remoteSign = (String)paramMap.remove("sign");
Set set = paramMap.entrySet();
Iterator it = set.iterator();
while (it.hasNext())
{
Map.Entry entry = (Map.Entry)it.next();
String k = (String)entry.getKey();
String v = (String)entry.getValue();
if ((v != null) && (!"".equals(v)) && (!"sign".equals(k)) && (!"key".equals(k))) {
sb.append(k + "=" + v + "&");
}
}
sb.append("key=" + ConstantUtil.APP_KEY);
String sign = MD5Util.MD5Encode(sb.toString(), "utf-8").toUpperCase(Locale.ENGLISH);
if (remoteSign.equals(sign)) {
return true;
}
}
catch (Exception e)
{
e.printStackTrace();
}
return false;
}
public static SortedMap<String, String> analyzeXmlToMap(String xml)
{
SortedMap<String, String> rtnMap = new TreeMap();
try
{
Document doc = DocumentHelper.parseText(xml);
Element root = doc.getRootElement();
String code = root.element("return_code").getText();
if ("SUCCESS".equals(code))
{
List<Element> elist = root.elements();
for (Element ele : elist)
{
String name = ele.getName();
String value = ele.getText();
rtnMap.put(name, value);
}
}
else
{
String msg = root.element("return_msg").getText();
log.error("微信原生支付通知失败,建议校园奖励发起主动查询" + msg);
}
}
catch (Exception e)
{
log.error("解析微信原生支付xml异常," + e.toString());
e.printStackTrace();
}
return rtnMap;
}
}
package com.winsun.tenpay;
import java.io.UnsupportedEncodingException;
import java.util.SortedMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.winsun.tenpay.util.HttpUtil;
public class WxCorpRequestHandler extends NewIntfRequestHandler {
public WxCorpRequestHandler(HttpServletRequest request, HttpServletResponse response) {
super(request, response);
}
public String getXmlBody() throws UnsupportedEncodingException {
StringBuffer sb = new StringBuffer();
SortedMap map = super.getAllParameters();
/*
* <xml> <mch_appid>wxe062425f740c30d8</mch_appid>
* <mchid>10000098</mchid>
* <nonce_str>3PG2J4ILTKCH16CQ2502SI8ZNMTM67VS</nonce_str>
* <partner_trade_no>100000982014120919616</partner_trade_no>
* <openid>ohO4Gt7wVPxIT1A9GjFaMYMiZY1s</openid>
* <check_name>OPTION_CHECK</check_name> <re_user_name>张三</re_user_name>
* <amount>100</amount> <desc>节日快乐!</desc>
* <spbill_create_ip>10.2.3.10</spbill_create_ip>
* <sign>C97BDBACF37622775366F38B629F45E3</sign> </xml>
*/
sb.append("<xml>\r\n");
sb.append("<mch_appid>" + map.get("mch_appid") + "</mch_appid>" + "\r\n");
sb.append("<mchid>" + map.get("mchid") + "</mchid>" + "\r\n");
sb.append("<nonce_str>" + map.get("nonce_str") + "</nonce_str>" + "\r\n");
sb.append("<partner_trade_no>" + map.get("partner_trade_no") + "</partner_trade_no>" + "\r\n");
sb.append("<openid>" + map.get("openid") + "</openid>" + "\r\n");
sb.append("<check_name>" + map.get("check_name") + "</check_name>" + "\r\n");
sb.append("<re_user_name>" + map.get("re_user_name") + "</re_user_name>" + "\r\n");
sb.append("<amount>" + map.get("amount") + "</amount>" + "\r\n");
sb.append("<desc>" + map.get("desc") + "</desc>" + "\r\n");
sb.append("<spbill_create_ip>" + map.get("spbill_create_ip") + "</spbill_create_ip>" + "\r\n");
sb.append("<sign>" + map.get("sign") + "</sign>" + "\r\n");
sb.append("</xml>");
return sb.toString();
}
public String sendPost() throws Exception {
createSign();
// return HttpUtil.doPostXml(getGateUrl(), getXmlBody());
return HttpUtil.httpPost(getGateUrl(), getXmlBody());
}
}
package com.winsun.tenpay.business;
import java.util.SortedMap;
import java.util.TreeMap;
import org.apache.log4j.Logger;
import com.winsun.tenpay.CorporatePrepayResponse;
import com.winsun.tenpay.TenpayNotify;
import com.winsun.tenpay.WxCorpRequestHandler;
import com.winsun.tenpay.util.ConstantUtil;
import com.winsun.tenpay.util.HttpUtil;
import com.winsun.tenpay.util.StringUtil;
import com.winsun.tenpay.util.WXUtil;
import com.winsun.tenpay.util.XmlParser;
public class TenpayXyjlBusiness {
private static Logger log = Logger.getLogger(TenpayXyjlBusiness.class);
public static CorporatePrepayResponse xyjlTenPayRequest(String orderno, String openid, String check_name,
String re_user_name, int amount, String desc, String createIp) throws Exception {
CorporatePrepayResponse response = new CorporatePrepayResponse();
WxCorpRequestHandler handler = new WxCorpRequestHandler(null, null);
handler.setGateUrl(ConstantUtil.PAY_URL);
handler.setKey(ConstantUtil.APP_KEY);
handler.setParameter("mch_appid", ConstantUtil.APP_ID);
handler.setParameter("mchid", ConstantUtil.MCH_ID);
handler.setParameter("nonce_str", WXUtil.getNonceStr());
handler.setParameter("partner_trade_no", orderno);
handler.setParameter("openid", openid);
handler.setParameter("check_name", check_name);
handler.setParameter("re_user_name", re_user_name);
handler.setParameter("amount", amount + "");
// handler.setParameter("desc", URLEncoder.encode(desc,"UTF-8"));
handler.setParameter("desc", desc);
handler.setParameter("spbill_create_ip", createIp);
// handler.setParameter("notify_url", notifyUrl);
String xml = handler.sendPost();
//String xml = "";
String err_code = "";
String err_code_des = "";
try {
XmlParser xmlParser = new XmlParser(xml);
String payment_no = xmlParser.getSingleValue("//payment_no");// 企业付款成功,返回的微信订单号
if (StringUtil.isBlank(payment_no)) {
err_code = xmlParser.getSingleValue("//err_code");
err_code_des = xmlParser.getSingleValue("//err_code_des");
response.setErrCodeDesc(err_code_des);
//log.info("支付失败 ,code=" + err_code + "失败原因:msg= " + err_code_des);
}
String partner_trade_no = xmlParser.getSingleValue("//partner_trade_no");
String mchid = xmlParser.getSingleValue("//mchid");
String mch_appid = xmlParser.getSingleValue("//mch_appid");
String device_info = xmlParser.getSingleValue("//device_info");
String payment_time = xmlParser.getSingleValue("//payment_time");
String nonce_str = xmlParser.getSingleValue("//nonce_str");
SortedMap<String, String> paramMap = new TreeMap();
paramMap.put("appid", ConstantUtil.APP_ID);
paramMap.put("timestamp", System.currentTimeMillis() / 1000L + "");
paramMap.put("noncestr", nonce_str);
paramMap.put("mchid", mchid);
paramMap.put("mchAppid", mch_appid);
paramMap.put("partner_trade_no", partner_trade_no);
paramMap.put("payment_no", payment_no);
paramMap.put("deviceInfo", device_info);
paramMap.put("payment_time", payment_time);
TenpayNotify.buildSign(paramMap);
response.setAppId((String) paramMap.get("appid"));
response.setAppKey((String) paramMap.get("appkey"));
response.setNonceStr((String) paramMap.get("noncestr"));
response.setPaymentNo((String) paramMap.get("payment_no"));
response.setTimeStamp((String) paramMap.get("payment_time"));
response.setPaySign((String) paramMap.get("sign"));
response.setAmount(amount);
response.setOpenid(openid);
return response;
} catch (Exception e) {
e.printStackTrace();
throw new Exception(e.getMessage());
}
}
public static String query(String out_trade_no, String tenpay_no) {
String url = ConstantUtil.QUERY_GATEURL;
String app_id = ConstantUtil.APP_ID;
String partner = ConstantUtil.MCH_ID;
String nonce_str = WXUtil.getNonceStr();
SortedMap<String, String> paramMap = new TreeMap();
paramMap.put("appid", app_id);
paramMap.put("mch_id", partner);
paramMap.put("transaction_id", tenpay_no);
paramMap.put("out_trade_no", out_trade_no);
paramMap.put("nonce_str", nonce_str);
String sign = TenpayNotify.buildTradeSign(paramMap);
StringBuffer xml = new StringBuffer();
xml.append("<xml><appid>" + app_id + "</appid><mch_id>" + partner + "</mch_id>");
xml.append("<nonce_str>" + nonce_str + "</nonce_str><out_trade_no>" + out_trade_no + "</out_trade_no>");
xml.append("<sign>" + sign + "</sign>" + "</xml>");
return HttpUtil.doPostXml(url, xml.toString());
}
public static void main(String[] args) throws Exception {
String orderNo = "1000018284310";
String desc = "test201630";
int amount = 101;
String openid = "oJodewFb4QpzLzcp4neLllT1XDoc";
String createIp = "10.17.66.44";
String check_name = "NO_CHECK";
String re_user_name = "test1";
String notifyUrl = "dianyuanjiangli.com";
xyjlTenPayRequest(orderNo, openid, check_name, re_user_name, amount, desc, createIp);
// xyWapRequest( orderNo, amount, desc, "", createIp, openid,
// notifyUrl);
}
}
package com.winsun.tenpay.util;
import com.winsun.tenpay.AlipayGlobals;
public class ConstantUtil {
public static String APP_ID = AlipayGlobals.getProperty("tenpay_app_id");
public static String APP_SECRET = AlipayGlobals.getProperty("tenpay_app_secret");
public static String APP_KEY = AlipayGlobals.getProperty("tenpay_app_key");
public static String MCH_ID = AlipayGlobals.getProperty("tenpay_mch_id");
public static String PKCS12_PWD = "1498149672";
// public static String PUBLIC_APP_ID = "wx5b38a65a0b95a857";
// public static String PUBLIC_MCH_ID = "1353779102";
// public static String PUBLIC_APP_KEY = "0123winsun43243434w0s7su223xy2jl";
public static String QUERY_GATEURL = "https://api.mch.weixin.qq.com/pay/orderquery";
public static String PAY_URL = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
}
package com.winsun.tenpay.util;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.UnrecoverableKeyException;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.util.HashMap;
import java.util.Map;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;
public class HttpClientUtil
{
public static final String SunX509 = "SunX509";
public static final String JKS = "JKS";
public static final String PKCS12 = "PKCS12";
public static final String TLS = "TLS";
public static HttpURLConnection getHttpURLConnection(String strUrl)
throws IOException
{
URL url = new URL(strUrl);
HttpURLConnection httpURLConnection = (HttpURLConnection)url
.openConnection();
return httpURLConnection;
}
public static HttpsURLConnection getHttpsURLConnection(String strUrl)
throws IOException
{
URL url = new URL(strUrl);
HttpsURLConnection httpsURLConnection = (HttpsURLConnection)url
.openConnection();
return httpsURLConnection;
}
public static String getURL(String strUrl)
{
if (strUrl != null)
{
int indexOf = strUrl.indexOf("?");
if (-1 != indexOf) {
return strUrl.substring(0, indexOf);
}
return strUrl;
}
return strUrl;
}
public static String getQueryString(String strUrl)
{
if (strUrl != null)
{
int indexOf = strUrl.indexOf("?");
if (-1 != indexOf) {
return strUrl.substring(indexOf + 1, strUrl.length());
}
return "";
}
return strUrl;
}
public static Map queryString2Map(String queryString)
{
if ((queryString == null) || ("".equals(queryString))) {
return null;
}
Map m = new HashMap();
String[] strArray = queryString.split("&");
for (int index = 0; index < strArray.length; index++)
{
String pair = strArray[index];
putMapByPair(pair, m);
}
return m;
}
public static void putMapByPair(String pair, Map m)
{
if ((pair == null) || ("".equals(pair))) {
return;
}
int indexOf = pair.indexOf("=");
if (-1 != indexOf)
{
String k = pair.substring(0, indexOf);
String v = pair.substring(indexOf + 1, pair.length());
if ((k != null) && (!"".equals(k))) {
m.put(k, v);
}
}
else
{
m.put(pair, "");
}
}
public static String bufferedReader2String(BufferedReader reader)
throws IOException
{
StringBuffer buf = new StringBuffer();
String line = null;
while ((line = reader.readLine()) != null)
{
buf.append(line);
buf.append("\r\n");
}
return buf.toString();
}
public static void doOutput(OutputStream out, byte[] data, int len)
throws IOException
{
int dataLen = data.length;
int off = 0;
while (off < data.length)
{
if (len >= dataLen)
{
out.write(data, off, dataLen);
off += dataLen;
}
else
{
out.write(data, off, len);
off += len;
dataLen -= len;
}
out.flush();
}
}
public static SSLContext getSSLContext(FileInputStream trustFileInputStream, String trustPasswd, FileInputStream keyFileInputStream, String keyPasswd)
throws NoSuchAlgorithmException, KeyStoreException, CertificateException, IOException, UnrecoverableKeyException, KeyManagementException
{
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
KeyStore trustKeyStore = KeyStore.getInstance("JKS");
trustKeyStore.load(trustFileInputStream,
str2CharArray(trustPasswd));
tmf.init(trustKeyStore);
char[] kp = str2CharArray(keyPasswd);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(keyFileInputStream, kp);
kmf.init(ks, kp);
SecureRandom rand = new SecureRandom();
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), rand);
return ctx;
}
public static Certificate getCertificate(File cafile)
throws CertificateException, IOException
{
CertificateFactory cf = CertificateFactory.getInstance("X.509");
FileInputStream in = null;
Certificate cert = null;
try{
in = new FileInputStream(cafile);
cert = cf.generateCertificate(in);
in.close();
}catch(Exception e){
e.printStackTrace();
}finally {
if(null != in)
in.close();
}
return cert;
}
public static char[] str2CharArray(String str)
{
if (str == null) {
return null;
}
return str.toCharArray();
}
public static void storeCACert(Certificate cert, String alias, String password, OutputStream out)
throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException
{
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(null, null);
ks.setCertificateEntry(alias, cert);
ks.store(out, str2CharArray(password));
}
public static InputStream String2Inputstream(String str)
{
return new ByteArrayInputStream(str.getBytes());
}
public static byte[] InputStreamTOByte(InputStream in)
throws IOException
{
int BUFFER_SIZE = 4096;
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] data = new byte[BUFFER_SIZE];
int count = -1;
while ((count = in.read(data, 0, BUFFER_SIZE)) != -1) {
outStream.write(data, 0, count);
}
data = (byte[])null;
byte[] outByte = outStream.toByteArray();
outStream.close();
return outByte;
}
public static String InputStreamTOString(InputStream in, String encoding)
throws IOException
{
return new String(InputStreamTOByte(in), encoding);
}
}
package com.winsun.tenpay.util;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContexts;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;
public class HttpUtil {
private static HttpClient httpClient = null;
protected static final Logger log = Logger.getLogger(HttpUtil.class);
static {
MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
httpClient = new HttpClient(connectionManager);
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(10000);
httpClient.getHttpConnectionManager().getParams().setSoTimeout(20000);
httpClient.setHttpConnectionFactoryTimeout(10000L);
}
/**
* 访问https的网站
*
* @param httpclient
*/
private static void enableSSL(DefaultHttpClient httpclient) {
// 调用ssl
try {
SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(null, new TrustManager[] { truseAllManager }, null);
SSLSocketFactory sf = new SSLSocketFactory(sslcontext);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
Scheme https = new Scheme("https", sf, 443);
httpclient.getConnectionManager().getSchemeRegistry().register(https);
} catch (Exception e) {
e.printStackTrace();
}
}
private static TrustManager truseAllManager = new X509TrustManager() {
public void checkClientTrusted(java.security.cert.X509Certificate[] arg0, String arg1)
throws CertificateException {
// TODO Auto-generated method stub
}
public void checkServerTrusted(java.security.cert.X509Certificate[] arg0, String arg1)
throws CertificateException {
// TODO Auto-generated method stub
}
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
// TODO Auto-generated method stub
return null;
}
};
public static String doPostXml(String serverAddress, String xml) {
/*
* //CerPath证书路径 String certPath =
* ConfigurationManager.AppSettings["certPath"].ToString(); //证书密码
* String password =
* ConfigurationManager.AppSettings["password"].ToString();
* X509Certificate cert = new
* System.Security.Cryptography.X509Certificates.X509Certificate2(
* certPath, password, X509KeyStorageFlags.MachineKeySet);
*
* // 设置参数 request = WebRequest.Create(posturl) as HttpWebRequest;
*/
String searchResult = "";
String url = serverAddress;
log.info("url=" + url);
PostMethod postMethod = new PostMethod(url);
postMethod.addRequestHeader("Content-Type", "text/xml;charset=UTF-8");
postMethod.setRequestBody(xml);
BufferedInputStream ins = null;
try {
int statusCode = httpClient.executeMethod(postMethod);
if (statusCode == 200) {
ins = new BufferedInputStream(postMethod.getResponseBodyAsStream());
byte[] resultBytes = readUrlStream(ins);
if ((resultBytes != null) && (resultBytes.length > 0)) {
searchResult = new String(resultBytes, "UTF-8");
//log.info(searchResult);
}
}
} catch (HttpException e) {
log.error("HttpUtil doPost unexpected exception:" + e.toString());
} catch (Exception e) {
log.error("HttpUtil doPost unexpected exception:" + e.toString());
} finally {
postMethod.releaseConnection();
try {
if(null != ins)
ins.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return searchResult;
}
public static String httpPost(String url, String data) throws Exception {
Integer statusCode = -1;
CloseableHttpClient client = HttpClients.createDefault();
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(20000).setConnectTimeout(20000).build();
SSLConnectionSocketFactory sslsf = null;
try {
// 指定读取证书格式为PKCS12
KeyStore keyStore = KeyStore.getInstance("PKCS12");
// 读取本机存放的PKCS12证书文件
URL certUrl = HttpUtil.class.getClassLoader().getResource("apiclient_cert.p12");
File file = new File(certUrl.getFile());
FileInputStream instream = new FileInputStream(file);
try {
// 指定PKCS12的密码(商户ID)
System.out.println(ConstantUtil.PKCS12_PWD);
keyStore.load(instream, ConstantUtil.PKCS12_PWD.toCharArray());
} finally {
instream.close();
}
SSLContext sslcontext = SSLContexts.custom()
.loadKeyMaterial(keyStore, ConstantUtil.PKCS12_PWD.toCharArray()).build();
sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" },
null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
client = HttpClients.custom().setSSLSocketFactory(sslsf).build();
// 创建http请求(get方式)
// HttpGet httpget = new
// HttpGet("https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers");
// CloseableHttpResponse response = client.execute(httpget);
// System.out.println("executing request" +
// httpget.getRequestLine());
// httpClient = (HttpClient) httpclient.getConnectionManager();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (KeyStoreException e1) {
e1.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
}finally {
client.close();
}
HttpPost post = new HttpPost(url);
post.setConfig(requestConfig);
StringEntity entity = new StringEntity(data, "UTF-8");
entity.setContentType("application/json;charset=UTF-8");
post.setEntity(entity);
post.setHeader("accept", "application/json");
post.setHeader("Content-Type", "application/json;charset=UTF-8");
CloseableHttpResponse response = client.execute(post);
StringBuffer result = new StringBuffer();
try {
statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
throw new HttpException("Http Status is error: " + statusCode);
} else {
HttpEntity entityRsp = response.getEntity();
BufferedReader rd = new BufferedReader(new InputStreamReader(entityRsp.getContent(), "UTF-8"));
try {
String tempLine = rd.readLine();
while (tempLine != null) {
result.append(tempLine);
tempLine = rd.readLine();
}
} finally {
rd.close();
EntityUtils.consume(entityRsp);
}
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
response.close();
}
client.close();
return result.toString();
}
private static byte[] readUrlStream(BufferedInputStream bufferedInputStream) throws IOException {
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while ((rc = bufferedInputStream.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
return swapStream.toByteArray();
}
}
package com.winsun.tenpay.util;
import java.security.MessageDigest;
public class MD5Util
{
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 localException) {}
return resultString;
}
private static final String[] hexDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d",
"e", "f" };
}
package com.winsun.tenpay.util;
import java.security.MessageDigest;
import java.util.Random;
public class Sha1Util {
// 生成微信签名
public static String getSha1(String str) {
if ((str == null) || (str.length() == 0)) {
return null;
}
char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };
try {
MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
mdTemp.update(str.getBytes());
byte[] md = mdTemp.digest();
int j = md.length;
char[] buf = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
buf[(k++)] = hexDigits[(byte0 >>> 4 & 0xF)];
buf[(k++)] = hexDigits[(byte0 & 0xF)];
}
return new String(buf);
} catch (Exception e) {
}
return null;
}
// 获取随机字符串
public static String getNonceStr() {
Random random = new Random();
return MD5Util
.MD5Encode(String.valueOf(random.nextInt(10000)), "UTF-8");
}
// 获取时间戳
public static String getTimeStamp() {
return String.valueOf(System.currentTimeMillis() / 1000);
}
}
package com.winsun.tenpay.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TenpayUtil
{
public static String toString(Object obj)
{
if (obj == null) {
return "";
}
return obj.toString();
}
public static int toInt(Object obj)
{
int a = 0;
try
{
if (obj != null) {
a = Integer.parseInt(obj.toString());
}
}
catch (Exception localException) {}
return a;
}
public static String getCurrTime()
{
Date now = new Date();
SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String s = outFormat.format(now);
return s;
}
public static String formatDate(Date date)
{
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
String strDate = formatter.format(date);
return strDate;
}
public static int buildRandom(int length)
{
int num = 1;
double random = Math.random();
if (random < 0.1D) {
random += 0.1D;
}
for (int i = 0; i < length; i++) {
num *= 10;
}
return (int)(random * num);
}
public static String getCharacterEncoding(HttpServletRequest request, HttpServletResponse response)
{
if ((request == null) || (response == null)) {
return "gbk";
}
String enc = request.getCharacterEncoding();
if ((enc == null) || ("".equals(enc))) {
enc = response.getCharacterEncoding();
}
if ((enc == null) || ("".equals(enc))) {
enc = "gbk";
}
return enc;
}
public static long getUnixTime(Date date)
{
if (date == null) {
return 0L;
}
return date.getTime() / 1000L;
}
public static String date2String(Date date, String formatType)
{
SimpleDateFormat sdf = new SimpleDateFormat(formatType);
return sdf.format(date);
}
}
package com.winsun.tenpay.util;
import java.util.Random;
public class WXUtil
{
public static String getNonceStr()
{
Random random = new Random();
return MD5Util.MD5Encode(String.valueOf(random.nextInt(10000)), "GBK");
}
public static String getTimeStamp()
{
return String.valueOf(System.currentTimeMillis() / 1000L);
}
}
...@@ -266,4 +266,40 @@ public class ExcelDealUtils { ...@@ -266,4 +266,40 @@ public class ExcelDealUtils {
return resultMap; return resultMap;
} }
// 账单汇总导出excel表头
public static Map<String, Object> billStatisExcel(String sheetName){
Map<String, Object> headMap = new LinkedHashMap<String, Object>();
headMap.put("项目类型", "billType");
headMap.put("月份", "month");
headMap.put("收支详情", "billDetail");
headMap.put("金额", "amount");
headMap.put("项目类型", "billTypeExpense");
headMap.put("月份", "monthExpense");
headMap.put("收支详情", "billDetailExpense");
headMap.put("不含税金额", "amountExpense");
headMap.put("含税金额", "taxAmount");
Map<String, Object> resultMap = dealHeadMap(headMap);
resultMap.put("sheetName", sheetName);
return resultMap;
}
// 奖励结算导出excel表头
public static Map<String, Object> bonusExcel(String sheetName){
Map<String, Object> headMap = new LinkedHashMap<String, Object>();
headMap.put("账号", "account");
headMap.put("姓名", "userName");
headMap.put("县分", "substName");
headMap.put("学校", "schoolName");
headMap.put("金额", "bonus");
headMap.put("佣金状态", "state");
Map<String, Object> resultMap = dealHeadMap(headMap);
resultMap.put("sheetName", sheetName);
return resultMap;
}
} }
##### wx pay config#########
##
# xiaoyuan
##
tenpay_app_id=wx0641dc1dc4d34384
tenpay_app_secret=3b43b46fc94d4e98588ee6ad992fa5c7
tenpay_mch_id=1498149672
#tenpay_app_key=168168ABCDHENGYIDE66XYJL51525388
tenpay_app_key=WINSUN123456xyjl987654wxpay88888
##
# test winsun
##
#tenpay_app_id=wxfc18f5186b729d15
#tenpay_app_secret=122278f3fb555468848ff040620505ad
#tenpay_mch_id=1346602601
#tenpay_app_key=wi20nsu17nt07est18go16nb88168123
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment