Commit 021df1c2 by Java-聂换换

HL2通道支付

parent fc5b0eaa
...@@ -17,9 +17,9 @@ public class ComCode { ...@@ -17,9 +17,9 @@ public class ComCode {
* juhezhong相关参数 * juhezhong相关参数
*/ */
public static final String HOST = "http://pay.hezhongpay.com"; // 请求地址 public static final String HOST = "http://pay.hezhongpay.com"; // 请求地址
public static final String MERCHANT_ID = "100532502195879"; // 商户号 public static final String MERCHANT_ID = Global.getConfig("pay.merchant_id"); // 商户号
public static final String MERCHANT_KEY = "670993bf-dd22-4464-9d81-69595d36b794";//"670993bf-dd22-4464-9d81-69595d36b794"; // 商户key public static final String MERCHANT_KEY = Global.getConfig("pay.merchant.key");//"670993bf-dd22-4464-9d81-69595d36b794"; // 商户key
public static final String MERCHANT_SECRET = "289ada73-27db-49e0-b2ad-3ae1613a665a";//"289ada73-27db-49e0-b2ad-3ae1613a665a"; // 商户sescet public static final String MERCHANT_SECRET = Global.getConfig("pay.merchant.secret");//"289ada73-27db-49e0-b2ad-3ae1613a665a"; // 商户sescet
public static final String MERCHANT_REG_URL = "/api/quick/merchant/apply"; // 注册商户 public static final String MERCHANT_REG_URL = "/api/quick/merchant/apply"; // 注册商户
public static final String ORDER_QUERY_URL = "/order/query"; // 查询订单 public static final String ORDER_QUERY_URL = "/order/query"; // 查询订单
public static final String SETTLE_UPDATE_URL = "/api/quick/settle/card/update"; // 修改结算卡信息 public static final String SETTLE_UPDATE_URL = "/api/quick/settle/card/update"; // 修改结算卡信息
...@@ -31,15 +31,31 @@ public class ComCode { ...@@ -31,15 +31,31 @@ public class ComCode {
public static final String EXTRA_RATE = "200"; // 附加手续费(单位:分) public static final String EXTRA_RATE = "200"; // 附加手续费(单位:分)
public static final String INTEGRAL_MERCHANT_ID = "100532502191215"; // 商户号 public static final String INTEGRAL_MERCHANT_ID = Global.getConfig("pay.integral.merchant_id"); // 商户号
public static final String INTEGRAL_MERCHANT_KEY = "781ed0d6-9657-404c-9f91-79eff2e0b782";//"670993bf-dd22-4464-9d81-69595d36b794"; // 商户key public static final String INTEGRAL_MERCHANT_KEY = Global.getConfig("pay.integral.merchant.key");//"670993bf-dd22-4464-9d81-69595d36b794"; // 商户key
public static final String INTEGRAL_MERCHANT_SECRET = "0033fc8d-161b-4e97-87de-efed7a34bdea";//"289ada73-27db-49e0-b2ad-3ae1613a665a"; // 商户sescet public static final String INTEGRAL_MERCHANT_SECRET = Global.getConfig("pay.integral.merchant.secret");//"289ada73-27db-49e0-b2ad-3ae1613a665a"; // 商户sescet
public static final String INTEGRAL_QUICK_PAY_URL = "/quick/pay"; // 积分快捷支付 public static final String INTEGRAL_QUICK_PAY_URL = "/quick/pay"; // 积分快捷支付
public static final String INTEGRAL_ORDER_QUERY_URL = "/order/query"; // 积分查询订单 public static final String INTEGRAL_ORDER_QUERY_URL = "/order/query"; // 积分查询订单
//快捷处理 //快捷处理
public static final String INTEGRAL_MERCHANT_REG_URL ="/api/quick/pay/handle"; public static final String INTEGRAL_MERCHANT_REG_URL ="/api/quick/pay/handle";
public static final String JFEN_MERCHANT_ID = Global.getConfig("pay.jfen.merchant_id"); // 商户号
public static final String JFEN_MERCHANT_KEY = Global.getConfig("pay.jfen.merchant.key");//"670993bf-dd22-4464-9d81-69595d36b794"; // 商户key
public static final String JFEN_MERCHANT_SECRET = Global.getConfig("pay.jfen.merchant.secret");//"289ada73-27db-49e0-b2ad-3ae1613a665a"; // 商户sescet
//商户入网
public static final String JFEN_MICRO_HANDLE_URL="/merchant/handle";
//快捷处理订单
public static final String JFEN_QUICK_PAY_URL="/api/quick/pay/handle";
//银联二维码接口
public static final String JFEN_UNION_PAY_URL = "/union/qrcode";
//封顶快捷处理
public static final String JFEN_PEAK_QUICK_PAY_URL="/peak/quick/pay/handle";
/** /**
* duolabao相关参数 * duolabao相关参数
* *
...@@ -123,4 +139,12 @@ public class ComCode { ...@@ -123,4 +139,12 @@ public class ComCode {
*/ */
public static final String STATUS_CODE_6001 = "6001"; public static final String STATUS_CODE_6001 = "6001";
public static final String STATUS_CODE_6001_DESC = "订单号不存在"; public static final String STATUS_CODE_6001_DESC = "订单号不存在";
/**
* payChannel 通道
*/
public static final String PAYCHANNEL_HL1 = "quick_no_integral";
public static final String PAYCHANNEL_HL2 = "quick_jfen";
public static final String PAYCHANNEL_HL3 = "quick_integral";
} }
...@@ -9,6 +9,10 @@ import com.thinkgem.jeesite.modules.pay.service.PayApiService; ...@@ -9,6 +9,10 @@ import com.thinkgem.jeesite.modules.pay.service.PayApiService;
import com.thinkgem.jeesite.modules.sys.entity.Dict; import com.thinkgem.jeesite.modules.sys.entity.Dict;
import com.thinkgem.jeesite.modules.sys.service.DictService; import com.thinkgem.jeesite.modules.sys.service.DictService;
import com.thinkgem.jeesite.modules.user.bean.JuHeZhongPayRequest; import com.thinkgem.jeesite.modules.user.bean.JuHeZhongPayRequest;
import com.thinkgem.jeesite.modules.user.bean.UserRequest;
import com.thinkgem.jeesite.modules.user.entity.CardEntity;
import com.thinkgem.jeesite.modules.user.entity.CardSwpaccidEntity;
import com.thinkgem.jeesite.modules.user.service.UserApiService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest; import org.springframework.http.HttpRequest;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
...@@ -34,6 +38,9 @@ public class PayApiController { ...@@ -34,6 +38,9 @@ public class PayApiController {
@Autowired @Autowired
private DictService dictService; private DictService dictService;
@Autowired
private UserApiService userApiService;
/** /**
* 快捷支付 * 快捷支付
* *
...@@ -44,6 +51,7 @@ public class PayApiController { ...@@ -44,6 +51,7 @@ public class PayApiController {
public Response quickPay(JuHeZhongPayRequest request) { public Response quickPay(JuHeZhongPayRequest request) {
Response resp = new Response(); Response resp = new Response();
try { try {
PayBackDto payBackDto = payService.quickPay(request); PayBackDto payBackDto = payService.quickPay(request);
if(payBackDto.getUrl()!=null && !"".equals(payBackDto.getUrl())){ if(payBackDto.getUrl()!=null && !"".equals(payBackDto.getUrl())){
resp.setStatus(ComCode.STATUS_CODE_2000); resp.setStatus(ComCode.STATUS_CODE_2000);
...@@ -57,7 +65,7 @@ public class PayApiController { ...@@ -57,7 +65,7 @@ public class PayApiController {
} catch (MyException e){ } catch (MyException e){
resp.setStatus(ComCode.STATUS_CODE_9998); resp.setStatus(ComCode.STATUS_CODE_9998);
resp.setMessage(ComCode.STATUS_CODE_9998_DESC); resp.setMessage(e.getMessage());
resp.setError(e.getMessage()); resp.setError(e.getMessage());
}catch (Exception e) { }catch (Exception e) {
...@@ -69,6 +77,39 @@ public class PayApiController { ...@@ -69,6 +77,39 @@ public class PayApiController {
return resp; return resp;
} }
/**
* 开卡
*
* @param request
* @return
*/
@PostMapping("/openCard")
public Response openCard(UserRequest request) {
Response resp = new Response();
if(ComCode.PAYCHANNEL_HL2.equals(request.getPayChannel())){
return payService.openCardJFen(request);
}
resp.setMessage("没有该渠道");
resp.setStatus(ComCode.STATUS_CODE_9998);
return resp;
}
/**
* 发送验证码
*
* @param request
* @return
*/
@PostMapping("/sendMessagePay")
public Response sendMessagePay(JuHeZhongPayRequest request) {
Response resp = new Response();
if(ComCode.PAYCHANNEL_HL2.equals(request.getPayChannel())){
return payService.sendMessageJFen(request);
}
resp.setMessage("没有该渠道");
resp.setStatus(ComCode.STATUS_CODE_9998);
return resp;
}
/** /**
* 回调 * 回调
...@@ -139,6 +180,71 @@ public class PayApiController { ...@@ -139,6 +180,71 @@ public class PayApiController {
/** /**
* 回调
* @param request
* @param response
*/
@RequestMapping("/openCardCallback")
public void openCardCallback(HttpServletRequest request, HttpServletResponse response) {
System.out.println("。。。。。。openCardCallback回调。。。。。");
Map map=request.getParameterMap();
Set keSet=map.entrySet();
for(Iterator itr = keSet.iterator(); itr.hasNext();){
Map.Entry me=(Map.Entry)itr.next();
Object ok=me.getKey(); //获取参数名
Object ov=me.getValue(); //获取参数值
System.out.println(ok+"="+ok.toString());
System.out.println(ov+"="+ov.toString());
String[] value=new String[1];
if(ov instanceof String[]){
value=(String[])ov;
}else{
value[0]=ov.toString();
}
for(int k=0;k <value.length;k++){
System.out.println(ok+"="+value[k]);
}
}
//设置编码
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String swpaccid=request.getParameter("swpaccid");
String cardNo = request.getParameter("cardNo");
String phone=request.getParameter("phone");
String code = request.getParameter("code");
if("0000".equals(code)){
CardEntity cardEntity = new CardEntity();
cardEntity.setCardNo(cardNo);
cardEntity.setCardMobile(phone);
cardEntity = userApiService.getCardByCardNo(cardNo);
CardSwpaccidEntity cardSwpaccidEntity = new CardSwpaccidEntity();
cardSwpaccidEntity.setPayMethod("quick");
cardSwpaccidEntity.setPayChannel(ComCode.PAYCHANNEL_HL2);
cardSwpaccidEntity.setSwpaccid(swpaccid);
cardSwpaccidEntity.setCardCode(cardEntity.getCode());
userApiService.addSwpaccid(cardSwpaccidEntity);
//返回true 收到请求,停止通知
PrintWriter write= null;
try {
write = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
write.print("true");
write.flush();
write.close();
}
}
/**
* 获取支付的结果 * 获取支付的结果
* @param orderEntity * @param orderEntity
* @return * @return
......
...@@ -4,6 +4,7 @@ import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao; ...@@ -4,6 +4,7 @@ import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
import com.thinkgem.jeesite.modules.pay.entity.BenefitEntity; import com.thinkgem.jeesite.modules.pay.entity.BenefitEntity;
import com.thinkgem.jeesite.modules.pay.entity.OrderEntity; import com.thinkgem.jeesite.modules.pay.entity.OrderEntity;
import com.thinkgem.jeesite.modules.pay.entity.UserRateEntity; import com.thinkgem.jeesite.modules.pay.entity.UserRateEntity;
import com.thinkgem.jeesite.modules.user.entity.CardEntity;
import java.util.List; import java.util.List;
...@@ -19,6 +20,7 @@ public interface PayApiDao { ...@@ -19,6 +20,7 @@ public interface PayApiDao {
void saveBenefitInfo(BenefitEntity benefitEntity); void saveBenefitInfo(BenefitEntity benefitEntity);
void updateOrderStatus(OrderEntity orderEntity); void updateOrderStatus(OrderEntity orderEntity);
int updateOrderTradeNo(OrderEntity orderEntity);
OrderEntity getOrder(OrderEntity orderEntity); OrderEntity getOrder(OrderEntity orderEntity);
...@@ -31,4 +33,5 @@ public interface PayApiDao { ...@@ -31,4 +33,5 @@ public interface PayApiDao {
// 查询状态为支付中的状态 // 查询状态为支付中的状态
List<OrderEntity> getOrderListTimeing(OrderEntity orderEntity); List<OrderEntity> getOrderListTimeing(OrderEntity orderEntity);
} }
...@@ -22,6 +22,10 @@ public class OrderEntity extends BaseEntity implements Serializable { ...@@ -22,6 +22,10 @@ public class OrderEntity extends BaseEntity implements Serializable {
private String createDate; private String createDate;
private String startTime;
private String endTime;
public OrderEntity() { public OrderEntity() {
} }
...@@ -155,4 +159,20 @@ public class OrderEntity extends BaseEntity implements Serializable { ...@@ -155,4 +159,20 @@ public class OrderEntity extends BaseEntity implements Serializable {
public void setPayMethodName(String payMethodName) { public void setPayMethodName(String payMethodName) {
this.payMethodName = payMethodName; this.payMethodName = payMethodName;
} }
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
} }
...@@ -11,13 +11,15 @@ public class RateEntity extends BaseEntity implements Serializable { ...@@ -11,13 +11,15 @@ public class RateEntity extends BaseEntity implements Serializable {
private String balance; // 结算 private String balance; // 结算
private String singleLimit; // 单笔限额 private String singleLimit; // 单笔限额
private String dayLimit; // 当天额度 private String dayLimit; // 当天额度
private String payChannel;// HL3通道的汇率编码 private String payChannel;// 通道
private String img; // 图标 private String img; // 图标
private String payMethodLabel;// 支付方式名称 private String payMethodLabel;// 支付方式名称
private String serviceType;
private String rateType;
public RateEntity() { public RateEntity() {
} }
...@@ -99,4 +101,21 @@ public class RateEntity extends BaseEntity implements Serializable { ...@@ -99,4 +101,21 @@ public class RateEntity extends BaseEntity implements Serializable {
public void setPayChannel(String payChannel) { public void setPayChannel(String payChannel) {
this.payChannel = payChannel; this.payChannel = payChannel;
} }
public String getServiceType() {
return serviceType;
}
public void setServiceType(String serviceType) {
this.serviceType = serviceType;
}
public String getRateType() {
return rateType;
}
public void setRateType(String rateType) {
this.rateType = rateType;
}
} }
...@@ -8,6 +8,9 @@ package com.thinkgem.jeesite.modules.pay.juhezhong.dto; ...@@ -8,6 +8,9 @@ package com.thinkgem.jeesite.modules.pay.juhezhong.dto;
public class PayBackDto { public class PayBackDto {
private String url; // 支付url private String url; // 支付url
private String message; private String message;
private String payChannel;//
private String isUrl = "1";// 是否是返回的url 1是 0否
public String getUrl() { public String getUrl() {
return url; return url;
...@@ -24,4 +27,20 @@ public class PayBackDto { ...@@ -24,4 +27,20 @@ public class PayBackDto {
public void setMessage(String message) { public void setMessage(String message) {
this.message = message; this.message = message;
} }
public String getPayChannel() {
return payChannel;
}
public void setPayChannel(String payChannel) {
this.payChannel = payChannel;
}
public String getIsUrl() {
return isUrl;
}
public void setIsUrl(String isUrl) {
this.isUrl = isUrl;
}
} }
package com.thinkgem.jeesite.modules.pay.juhezhong.dto;
/**
* Created by lishi on 2017/11/21.
*/
public class QrCodeDto extends CommonDto {
private String terminalId;//付款码
private String subMchId="";//子商户号
private String bankSettNo="";//联行号
private String acctName="";//收款人姓名
private String acctNo="";//收款人账号
private String idNo="";//证件号码
public String getSubMchId() {
return subMchId;
}
public void setSubMchId(String subMchId) {
this.subMchId = subMchId;
}
public String getBankSettNo() {
return bankSettNo;
}
public void setBankSettNo(String bankSettNo) {
this.bankSettNo = bankSettNo;
}
public String getAcctName() {
return acctName;
}
public void setAcctName(String acctName) {
this.acctName = acctName;
}
public String getAcctNo() {
return acctNo;
}
public void setAcctNo(String acctNo) {
this.acctNo = acctNo;
}
public String getIdNo() {
return idNo;
}
public void setIdNo(String idNo) {
this.idNo = idNo;
}
public String getTerminalId() {
return terminalId;
}
public void setTerminalId(String terminalId) {
this.terminalId = terminalId;
}
}
...@@ -12,13 +12,16 @@ import com.thinkgem.jeesite.modules.pay.juhezhong.utils.HttpUtil; ...@@ -12,13 +12,16 @@ import com.thinkgem.jeesite.modules.pay.juhezhong.utils.HttpUtil;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.*; import com.thinkgem.jeesite.modules.pay.juhezhong.utils.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Map; import java.util.Map;
@Transactional
@Service @Service
@Lazy(false)
@Transactional
public class JuHeZhongPayIntegralService { public class JuHeZhongPayIntegralService {
private Logger logger = LoggerFactory.getLogger(Logger.class); private Logger logger = LoggerFactory.getLogger(Logger.class);
...@@ -32,7 +35,7 @@ public class JuHeZhongPayIntegralService { ...@@ -32,7 +35,7 @@ public class JuHeZhongPayIntegralService {
* @throws Exception * @throws Exception
*/ */
public JSONObject query(CommonDto dto) throws Exception { public JSONObject query(CommonDto dto) throws Exception {
dto.setMerchantId(ComCode.MERCHANT_ID); dto.setMerchantId(ComCode.INTEGRAL_MERCHANT_ID);
dto.setMerchantKey(ComCode.INTEGRAL_MERCHANT_KEY); dto.setMerchantKey(ComCode.INTEGRAL_MERCHANT_KEY);
Map<String, Object> params = Bean2Map.Entity2Map(dto); Map<String, Object> params = Bean2Map.Entity2Map(dto);
String signBefore = SignUtils.signBefore(params); String signBefore = SignUtils.signBefore(params);
...@@ -66,7 +69,7 @@ public class JuHeZhongPayIntegralService { ...@@ -66,7 +69,7 @@ public class JuHeZhongPayIntegralService {
// JSONObject jsonObject = juHeZhongPayIntegralService.quickPayHandle(dto); // JSONObject jsonObject = juHeZhongPayIntegralService.quickPayHandle(dto);
// System.out.println(jsonObject.toJSONString()); // System.out.println(jsonObject.toJSONString());
JuHeZhongPayIntegralService juHeZhongPayIntegralService = new JuHeZhongPayIntegralService(); // JuHeZhongPayIntegralService juHeZhongPayIntegralService = new JuHeZhongPayIntegralService();
// JSONObject dto = new JSONObject(); // JSONObject dto = new JSONObject();
// //
// dto.put("orderId", MakeOrderNum.makeOrderNum());//标识请求唯一(非订单号) // dto.put("orderId", MakeOrderNum.makeOrderNum());//标识请求唯一(非订单号)
...@@ -93,18 +96,18 @@ public class JuHeZhongPayIntegralService { ...@@ -93,18 +96,18 @@ public class JuHeZhongPayIntegralService {
// String sign = SignUtils.sign(signBefore, ComCode.INTEGRAL_MERCHANT_SECRET); // String sign = SignUtils.sign(signBefore, ComCode.INTEGRAL_MERCHANT_SECRET);
//B105004538 //B105004538
//
JSONObject dto = new JSONObject(); // JSONObject dto = new JSONObject();
//
dto.put("serviceType", 10);// 服务类型 // dto.put("serviceType", 10);// 服务类型
dto.put("merchantId",ComCode.INTEGRAL_MERCHANT_ID);//商户号 // dto.put("merchantId",ComCode.INTEGRAL_MERCHANT_ID);//商户号
dto.put("orderId", IdGen.randomBase62(64));//订单号 // dto.put("orderId", IdGen.randomBase62(64));//订单号
//
// 李波的交通银行卡subMchId 403196720 // // 李波的交通银行卡subMchId 403196720
dto.put("subMchId", "403196720");//由系统分配的商户号 // dto.put("subMchId", "403196720");//由系统分配的商户号
dto.put("merchantKey", ComCode.INTEGRAL_MERCHANT_KEY);//商户key // dto.put("merchantKey", ComCode.INTEGRAL_MERCHANT_KEY);//商户key
dto.put("timestamp", System.currentTimeMillis());//时间戳 // dto.put("timestamp", System.currentTimeMillis());//时间戳
JSONObject jsonObject = juHeZhongPayIntegralService.quickPayHandle(dto); // JSONObject jsonObject = juHeZhongPayIntegralService.quickPayHandle(dto);
// JSONObject dto = new JSONObject(); // JSONObject dto = new JSONObject();
...@@ -144,7 +147,7 @@ public class JuHeZhongPayIntegralService { ...@@ -144,7 +147,7 @@ public class JuHeZhongPayIntegralService {
// dto.put("timestamp", System.currentTimeMillis());//时间戳 // dto.put("timestamp", System.currentTimeMillis());//时间戳
// System.out.println(dto.toJSONString()); // System.out.println(dto.toJSONString());
// JSONObject jsonObject = juHeZhongPayIntegralService.quickPayHandle(dto); // JSONObject jsonObject = juHeZhongPayIntegralService.quickPayHandle(dto);
System.out.println(jsonObject.toJSONString()); // System.out.println(jsonObject.toJSONString());
} }
......
package com.thinkgem.jeesite.modules.pay.juhezhong.service;
import com.alibaba.fastjson.JSONObject;
import com.thinkgem.jeesite.common.config.Global;
import com.thinkgem.jeesite.common.constant.ComCode;
import com.thinkgem.jeesite.common.utils.DateUtils;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.ApiQuickPayDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.CommonDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.QrCodeDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.MerchantDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.QuickDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.Bean2Map;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.JFenHttpUtil;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.MakeOrderNum;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.SignUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.Map;
/**
* 首页通知
*/
@Service
@Transactional(readOnly = true)
public class JuHeZhongPayJFenService {
private Logger logger = LoggerFactory.getLogger(Logger.class);
/**
* 查询订单状态
*
* @param dto
* @return
* @throws Exception
*/
public JSONObject query(CommonDto dto) throws Exception {
Map<String, Object> params = Bean2Map.Entity2Map(dto);
String signBefore = SignUtils.signBefore(params);
String sign = SignUtils.sign(signBefore, ComCode.JFEN_MERCHANT_SECRET);
params.put("sign", sign);
String respStr = JFenHttpUtil.post(ComCode.HOST + ComCode.ORDER_QUERY_URL, params);
logger.info("respStr:{}", respStr);
return JSONObject.parseObject(respStr);
}
public JSONObject merchantIn(JSONObject dto) throws Exception {
dto.put("merchantId",ComCode.JFEN_MERCHANT_ID);
dto.put("merchantKey",ComCode.JFEN_MERCHANT_KEY);
String signBefore = SignUtils.signBefore(dto);
logger.info("signBefore:{}", signBefore);
String sign = SignUtils.sign(signBefore, ComCode.JFEN_MERCHANT_SECRET);
dto.put("sign", sign);
String respStr = JFenHttpUtil.postRaw(ComCode.HOST + ComCode.JFEN_MICRO_HANDLE_URL, dto.toString());
return JSONObject.parseObject(respStr);
}
public JSONObject merchantAddFeel(JSONObject dto) throws Exception {
dto.put("timestamp",System.currentTimeMillis());
dto.put("serviceType","6");
dto.put("orderId",MakeOrderNum.makeOrderNum());
return merchantIn(dto);
}
public JSONObject merchantModifyFeel(JSONObject dto)throws Exception {
dto.put("timestamp",System.currentTimeMillis());
dto.put("serviceType","7");
dto.put("orderId",MakeOrderNum.makeOrderNum());
return merchantIn(dto);
}
public JSONObject openCard(JSONObject dto)throws Exception {
String signBefore = SignUtils.signBefore(dto);
logger.info("signBefore:{}", signBefore);
String sign = SignUtils.sign(signBefore, ComCode.JFEN_MERCHANT_SECRET);
dto.put("sign", sign);
String respStr = JFenHttpUtil.postRaw(ComCode.HOST + ComCode.JFEN_QUICK_PAY_URL, dto.toString());
return JSONObject.parseObject(respStr);
}
public JSONObject unionQrCodePay(QrCodeDto dto) throws Exception {
Map<String, Object> params = Bean2Map.Entity2Map(dto);
String signBefore = SignUtils.signBefore(params);
logger.info("signBefore:{}", signBefore);
String sign = SignUtils.sign(signBefore, ComCode.JFEN_MERCHANT_SECRET);
params.put("sign", sign);
String respStr = JFenHttpUtil.post(ComCode.HOST + ComCode.JFEN_UNION_PAY_URL, params);
return JSONObject.parseObject(respStr);
}
public JSONObject peakQuickPayHandle(JSONObject dto) throws Exception {
String signBefore = SignUtils.signBefore(dto);
logger.info("signBefore:{}", signBefore);
String sign = SignUtils.sign(signBefore, ComCode.JFEN_MERCHANT_SECRET);
dto.put("sign", sign);
String respStr = JFenHttpUtil.post(ComCode.HOST + ComCode.JFEN_PEAK_QUICK_PAY_URL, dto.toJSONString());
return JSONObject.parseObject(respStr);
}
public static void main(String[] args) throws Exception {
JuHeZhongPayJFenService juHeZhongPayJFenService = new JuHeZhongPayJFenService();
JSONObject dto = new JSONObject();
// dto.put("orderId", MakeOrderNum.makeOrderNum());
// subMchId = B105244442
// 聂换换 B105247024
// dto.put("serviceType",1);
// dto.put("subMerchantName","kklsubMerchantName32");
// dto.put("subMerchantType","PERSON");
// dto.put("businessLicense","businessLicense23");
// dto.put("legalPersonName","聂换换");
// dto.put("legalPersonID","130434199212214429");
// dto.put("subMerchantPersonName","聂换换");
// dto.put("subMerchantPersonPhone","13722537737");
// dto.put("bankType","TOPRIVATE");
//
// dto.put("accountName","聂换换");
// dto.put("accountNo","6217000060031684713");
// dto.put("bankName","中国建设银行");
// dto.put("bankProv","天津");
// dto.put("bankCity","天津市");
// dto.put("bankBranch","开户地址new");
// dto.put("bankCode","105100000017");
//
// dto.put("timestamp",System.currentTimeMillis());
//
// juHeZhongPayJFenService.merchantIn(dto);
// dto.put("subMchId","B105247024");
// dto.put("paymentType","QUICKPAY");
// dto.put("d0Fee","0.0043");// 最低是0.0043 d0Fee和d1Fee建议两个值相同
// dto.put("d1Fee","0.0043");// 最低是0.0043
// juHeZhongPayJFenService.merchantModifyFeel(dto);
//
//
// dto.put("orderId",MakeOrderNum.makeOrderNum());
// dto.put("merchantId",ComCode.JFEN_MERCHANT_ID);
// dto.put("serviceType","8");
// dto.put("subMchId","B105244442");
// dto.put("idType","01");
// dto.put("idNo","53250219850831031X");
// dto.put("d0Fee","0.0043");
// dto.put("accountName","李波");
// dto.put("accountNo","6225571645517950");
// dto.put("mobile","13821934497");
// dto.put("notifyUrl","http://39.107.124.166:8080/youka-api/api/pay/openCardCallback");
// dto.put("merchantKey",ComCode.JFEN_MERCHANT_KEY);
// dto.put("timestamp",System.currentTimeMillis());
/**
* 。。。。。。openCardCallback回调。。。。。
swpaccid=swpaccid
[Ljava.lang.String;@37c7e16f=[Ljava.lang.String;@37c7e16f
swpaccid=3296555230614091180
msg=msg
[Ljava.lang.String;@5fb7df1a=[Ljava.lang.String;@5fb7df1a
msg=成功
code=code
[Ljava.lang.String;@7a5c7842=[Ljava.lang.String;@7a5c7842
code=0000
merchantId=merchantId
[Ljava.lang.String;@53c16c4b=[Ljava.lang.String;@53c16c4b
merchantId=100532502198424
phone=phone
[Ljava.lang.String;@5b8533c5=[Ljava.lang.String;@5b8533c5
phone=13821934497
sign=sign
[Ljava.lang.String;@3aab68a0=[Ljava.lang.String;@3aab68a0
sign=1c7358d6e3c067902ad8d24cb17e3aa6
subMchId=subMchId
[Ljava.lang.String;@232c89df=[Ljava.lang.String;@232c89df
subMchId=B105244442
cardNo=cardNo
[Ljava.lang.String;@7bd70ac5=[Ljava.lang.String;@7bd70ac5
cardNo=6225571645517950
merchantKey=merchantKey
[Ljava.lang.String;@93e1561=[Ljava.lang.String;@93e1561
merchantKey=260a7539-6a2b-410d-aeec-9897ccee92a1
timestamp=timestamp
[Ljava.lang.String;@6831928e=[Ljava.lang.String;@6831928e
timestamp=1523590870783
2018-04-13 11:41:10,939 DEBUG [jeesite.modules.sys.interceptor.LogInterceptor] - 计时结束:11:41:10.939 耗时:0:0:0.37 URI: /youka-api/api/pay/openCardCallback 最大内存: 1739m 已分配内存: 743m 已分配内存中的剩余空间: 145m 最大可用内存: 1141m
*/
// System.out.println(dto.toJSONString());
// juHeZhongPayJFenService.openCard(dto);
// dto.put("orderId",MakeOrderNum.makeOrderNum());
// dto.put("merchantId",ComCode.JFEN_MERCHANT_ID);
// dto.put("serviceType","4");
// dto.put("subMchId","B105244442");
// dto.put("merchantKey",ComCode.JFEN_MERCHANT_KEY);
// dto.put("timestamp",System.currentTimeMillis());
// dto.put("amount","100");
// dto.put("idNo","53250219850831031X");
// dto.put("accountName","李波");
// dto.put("accountNo","6225571645517950");
//
// dto.put("mobile","13821934497");
// dto.put("swpaccid","3296555230614091180");
//
// dto.put("notifyUrl","http://39.107.124.166:8080/youka-api/api/pay/openCardCallback");
// dto.put("amount","1000");
// juHeZhongPayJFenService.openCard(dto);
// trade_no 20180413135023288124
/**
* 2018-04-13 13:54:01,804 DEBUG [modules.pay.juhezhong.utils.HttpUtil] - httpclient调用状态:HTTP/1.1 200
2018-04-13 13:54:01,809 DEBUG [modules.pay.juhezhong.utils.HttpUtil] - httpclient调用结果{"serviceType":"4","swpaccid":"3296555230614091180","msg":"成功","amount":"1000","code":"0000","accountName":"李波","orderId":"20180413135359987000","mobile":"13821934497","sign":"9f0276f8632701b07ec67a9a2de637b7","subMchId":"B105244442","idNo":"53250219850831031X","merchantKey":"260a7539-6a2b-410d-aeec-9897ccee92a1","merchantId":"100532502198424","accountNo":"6225571645517950","notifyUrl":"http://39.107.124.166:8080/youka-api/api/pay/openCardCallback","trade_no":"20180413135359746143","timestamp":1523598840038}
*/
dto.put("orderId",MakeOrderNum.makeOrderNum());
dto.put("merchantId",ComCode.JFEN_MERCHANT_ID);
dto.put("serviceType","5");
dto.put("subMchId","B105244442");
dto.put("merchantKey",ComCode.JFEN_MERCHANT_KEY);
dto.put("timestamp",System.currentTimeMillis());
dto.put("passwd","249286");
dto.put("productName","productName");
dto.put("tradeNo","20180413135359746143");
dto.put("swpaccid","3296555230614091180");
juHeZhongPayJFenService.openCard(dto);
}
}
...@@ -10,6 +10,7 @@ import com.thinkgem.jeesite.modules.pay.juhezhong.utils.Bean2Map; ...@@ -10,6 +10,7 @@ import com.thinkgem.jeesite.modules.pay.juhezhong.utils.Bean2Map;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.HttpUtil; import com.thinkgem.jeesite.modules.pay.juhezhong.utils.HttpUtil;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.SignUtils; import com.thinkgem.jeesite.modules.pay.juhezhong.utils.SignUtils;
import com.thinkgem.jeesite.modules.user.bean.JuHeZhongPayRequest; import com.thinkgem.jeesite.modules.user.bean.JuHeZhongPayRequest;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -19,7 +20,8 @@ import java.util.Map; ...@@ -19,7 +20,8 @@ import java.util.Map;
* 首页通知 * 首页通知
*/ */
@Service @Service
@Transactional(readOnly = true) @Lazy(false)
@Transactional
public class JuHeZhongPayService { public class JuHeZhongPayService {
/** /**
......
package com.thinkgem.jeesite.modules.pay.juhezhong.utils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
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.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.LoggerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.net.URLEncoder;
import java.security.cert.CertificateException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static java.lang.System.currentTimeMillis;
/***
* httpUtil
*
* @author
*/
public class JFenHttpUtil {
private static final org.slf4j.Logger log = LoggerFactory.getLogger(HttpUtil.class);
private static PoolingHttpClientConnectionManager cm = null;
private static RequestConfig defaultRequestConfig = null;
static {
try {
//采用绕过验证的方式处理https请求
SSLContext sslcontext = createIgnoreVerifySSL();
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("https", new SSLConnectionSocketFactory(sslcontext))
.register("http", new PlainConnectionSocketFactory())
.build();
cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
cm.setMaxTotal(2000);
cm.setDefaultMaxPerRoute(20);
defaultRequestConfig = RequestConfig.custom()
.setSocketTimeout(30000)
.setConnectTimeout(30000)
.setConnectionRequestTimeout(30000)
.setStaleConnectionCheckEnabled(true)
.build();
} catch (Exception e) {
e.printStackTrace();
}
}
private static SSLContext createIgnoreVerifySSL() throws Exception {
SSLContext sc = SSLContext.getInstance("SSLv3");
// 实现一个X509TrustManager接口,用于绕过验证,不用修改里面的方法
X509TrustManager trustManager = new X509TrustManager() {
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
String paramString) throws CertificateException {
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
String paramString) throws CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
};
sc.init(null, new TrustManager[]{trustManager}, null);
return sc;
}
public static String get(String url, String param) throws IOException {
CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(cm).setDefaultRequestConfig(defaultRequestConfig).build();
HttpPost httpPost = null;
CloseableHttpResponse response = null;
// 发送get请求
try {
// 用get方法发送http请求
HttpGet get = new HttpGet(url + URLEncoder.encode(param, "UTF-8"));
get.setHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/51.0.2704.79 Chrome/51.0.2704.79 Safari/537.36");
System.out.println("执行get请求, uri: " + get.getURI());
response = httpclient.execute(get);
// response实体
HttpEntity entity = response.getEntity();
if (null != entity) {
String str = EntityUtils.toString(entity);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
// 成功
return str;
} else {
return null;
}
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("httpclient请求失败");
return null;
} finally {
if (response != null) {
response.close();
}
if (httpPost != null) {
httpPost.releaseConnection();
}
}
return null;
}
public static String post(String url, List<NameValuePair> nvps) throws Exception {
CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(cm).setDefaultRequestConfig(defaultRequestConfig).build();
HttpPost httpPost = null;
CloseableHttpResponse response = null;
String str = "";
try {
httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
response = httpclient.execute(httpPost);
HttpEntity entity = response.getEntity();
str = EntityUtils.toString(entity);
log.debug("httpclient调用状态:" + response.getStatusLine());
log.debug("httpclient调用结果{}", str);
// return EntityUtils.toString(response.getEntity());
return str;
} finally {
if (response != null) {
response.close();
}
if (httpPost != null) {
httpPost.releaseConnection();
}
}
}
public static String post(String url, Map<String, Object> params) throws Exception {
Long time = System.currentTimeMillis();
// CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(cm).setDefaultRequestConfig(defaultRequestConfig).build();
CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(cm).build();
CloseableHttpResponse response = null;
HttpPost httpPost = null;
String str = "";
try {
httpPost = new HttpPost(url);
//设置参数
List<NameValuePair> list = new ArrayList<NameValuePair>();
for (String key : params.keySet()) {
list.add(new BasicNameValuePair(key, "" + params.get(key)));
}
if (list.size() > 0) {
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list);
httpPost.setEntity(new UrlEncodedFormEntity(list, "UTF-8"));
}
response = httpclient.execute(httpPost);
str = EntityUtils.toString(response.getEntity(), "UTF-8");
log.info("请求耗时:{}ms", (System.currentTimeMillis() - time));
return str;
} finally {
if (response != null) {
response.close();
}
if (httpPost != null) {
httpPost.releaseConnection();
}
}
}
public static String postRaw(String url, String json) throws Exception {
CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(cm).build();
HttpPost httpPost = null;
CloseableHttpResponse response = null;
String str = "";
try {
httpPost = new HttpPost(url);
StringEntity postingString = new StringEntity(json,"UTF-8");// json传递
httpPost.setEntity(postingString);
httpPost.setHeader("Content-type", "application/json");
response = httpclient.execute(httpPost);
try {
HttpEntity entity = response.getEntity();
str = EntityUtils.toString(entity,"UTF-8");
log.debug("httpclient调用状态:" + response.getStatusLine());
log.debug("httpclient调用结果{}", str);
// return EntityUtils.toString(response.getEntity());
return str;
} finally {
response.close();
}
} finally {
if (response != null) {
response.close();
}
if (httpPost != null) {
httpPost.releaseConnection();
}
}
}
public static String get(String url) throws Exception {
CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(cm).setDefaultRequestConfig(defaultRequestConfig).build();
HttpPost httpPost = null;
CloseableHttpResponse response = null;
HttpGet httpget = null;
try {
httpget = new HttpGet(url);
String str = "";
response = httpclient.execute(httpget);
// 获取状态行
HttpEntity entity = response.getEntity();
str = EntityUtils.toString(entity);
log.debug("httpclient调用状态:" + response.getStatusLine());
log.debug("httpclient调用结果{}", str);
return str;
} finally {
if (response != null) {
response.close();
}
if (httpget != null) {
httpget.releaseConnection();
}
}
}
public static void main(String[] args) {
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
try {
for (int i = 0; i < 200; i++) {
Long time = currentTimeMillis();
get("https://www.baidu.com/website/index");
System.out.println("耗时:" + ((currentTimeMillis() - time) / 1000) + "s");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static String formSubmit(String url, Map<String, Object> params) throws IOException {
CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(cm).setDefaultRequestConfig(defaultRequestConfig).build();
CloseableHttpResponse response = null;
HttpPost httpPost = null;
String str = "";
try {
httpPost = new HttpPost(url);
httpPost.setHeader("Accept", "Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
httpPost.setHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");
httpPost.setHeader("Accept-Encoding", "gzip, deflate");
httpPost.setHeader("Accept-Language", "zh-cn,zh;q=0.5");
httpPost.setHeader("Connection", "keep-alive");
httpPost.setHeader("Cookie", "__utma=226521935.73826752.1323672782.1325068020.1328770420.6;");
httpPost.setHeader("Host", "localhost");
httpPost.setHeader("refer", "");
httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
httpPost.setHeader("Content-type", "application/x-www-form-urlencoded");
//设置参数
List<NameValuePair> list = new ArrayList<NameValuePair>();
for (String key : params.keySet()) {
list.add(new BasicNameValuePair(key, "" + params.get(key)));
}
if (list.size() > 0) {
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list);
httpPost.setEntity(new UrlEncodedFormEntity(list, "utf-8"));
}
response = httpclient.execute(httpPost);
str = EntityUtils.toString(response.getEntity(), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (response != null) {
response.close();
}
if (httpPost != null) {
httpPost.releaseConnection();
}
}
return str;
}
public static String sendData(String url, String xml) throws Exception {
Long time = System.currentTimeMillis();
CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(cm).setDefaultRequestConfig(defaultRequestConfig).build();
HttpPost httpPost = null;
CloseableHttpResponse response = null;
String str = "";
try {
httpPost = new HttpPost(url);
StringEntity postingString = new StringEntity(xml, "UTF-8");// json传递
httpPost.setEntity(postingString);
response = httpclient.execute(httpPost);
try {
str = EntityUtils.toString(response.getEntity(), "UTF-8");
log.debug("请求耗时:{}ms", (System.currentTimeMillis() - time));
return str;
} finally {
response.close();
}
} finally {
if (response != null) {
response.close();
}
if (httpPost != null) {
httpPost.releaseConnection();
}
}
}
public static String post(String url, String json) throws Exception {
CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(cm).build();
HttpPost httpPost = null;
CloseableHttpResponse response = null;
String str = "";
try {
httpPost = new HttpPost(url);
StringEntity postingString = new StringEntity(json,"UTF-8");// json传递
httpPost.setEntity(postingString);
httpPost.setHeader("Content-type", "application/json");
response = httpclient.execute(httpPost);
try {
HttpEntity entity = response.getEntity();
str = EntityUtils.toString(entity,"UTF-8");
log.debug("httpclient调用状态:" + response.getStatusLine());
log.debug("httpclient调用结果{}", str);
// return EntityUtils.toString(response.getEntity());
return str;
} finally {
response.close();
}
} finally {
if (response != null) {
response.close();
}
if (httpPost != null) {
httpPost.releaseConnection();
}
}
}
}
...@@ -2,6 +2,7 @@ package com.thinkgem.jeesite.modules.pay.service; ...@@ -2,6 +2,7 @@ package com.thinkgem.jeesite.modules.pay.service;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.thinkgem.jeesite.common.baseBean.Request; import com.thinkgem.jeesite.common.baseBean.Request;
import com.thinkgem.jeesite.common.baseBean.Response;
import com.thinkgem.jeesite.common.config.Global; import com.thinkgem.jeesite.common.config.Global;
import com.thinkgem.jeesite.common.constant.ComCode; import com.thinkgem.jeesite.common.constant.ComCode;
import com.thinkgem.jeesite.common.utils.DateUtils; import com.thinkgem.jeesite.common.utils.DateUtils;
...@@ -17,18 +18,22 @@ import com.thinkgem.jeesite.modules.pay.juhezhong.dto.MerchantDto; ...@@ -17,18 +18,22 @@ import com.thinkgem.jeesite.modules.pay.juhezhong.dto.MerchantDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.PayBackDto; import com.thinkgem.jeesite.modules.pay.juhezhong.dto.PayBackDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.QuickDto; import com.thinkgem.jeesite.modules.pay.juhezhong.dto.QuickDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayIntegralService; import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayIntegralService;
import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayJFenService;
import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayService; import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayService;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.MakeOrderNum;
import com.thinkgem.jeesite.modules.user.bean.JuHeZhongPayRequest; import com.thinkgem.jeesite.modules.user.bean.JuHeZhongPayRequest;
import com.thinkgem.jeesite.modules.user.bean.UserRequest; import com.thinkgem.jeesite.modules.user.bean.UserRequest;
import com.thinkgem.jeesite.modules.user.entity.CardEntity; import com.thinkgem.jeesite.modules.user.entity.*;
import com.thinkgem.jeesite.modules.user.entity.UserEntity;
import com.thinkgem.jeesite.modules.user.service.UserApiService; import com.thinkgem.jeesite.modules.user.service.UserApiService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.*; import java.util.*;
...@@ -36,7 +41,9 @@ import java.util.*; ...@@ -36,7 +41,9 @@ import java.util.*;
/** /**
* 支付相关 * 支付相关
*/ */
@Service @Service
@Lazy(false)
@Transactional(readOnly = true) @Transactional(readOnly = true)
public class PayApiService { public class PayApiService {
@Autowired @Autowired
...@@ -49,8 +56,17 @@ public class PayApiService { ...@@ -49,8 +56,17 @@ public class PayApiService {
@Autowired @Autowired
private JuHeZhongPayIntegralService juHeZhongPayIntegralService; private JuHeZhongPayIntegralService juHeZhongPayIntegralService;
@Autowired
private JuHeZhongPayJFenService juHeZhongPayJFenService;
@Transactional(readOnly = false) @Transactional(readOnly = false)
public PayBackDto quickPay(JuHeZhongPayRequest request) throws MyException, Exception { public PayBackDto quickPay(JuHeZhongPayRequest request) throws MyException, Exception {
if(ComCode.PAYCHANNEL_HL2.equals(request.getPayChannel())){
PayBackDto payBackDto = this.jFenPayJuhezhong(request);
payBackDto.setIsUrl("0");
return payBackDto;
}
// 1. 根据入参获取用户详情信息,包括支付卡片信息 // 1. 根据入参获取用户详情信息,包括支付卡片信息
UserEntity userEntity = userService.getUserInfo(new Request(request.getSubMerchantCode())); UserEntity userEntity = userService.getUserInfo(new Request(request.getSubMerchantCode()));
userEntity = userService.getUserDetailInfo(userEntity); userEntity = userService.getUserDetailInfo(userEntity);
...@@ -65,6 +81,9 @@ public class PayApiService { ...@@ -65,6 +81,9 @@ public class PayApiService {
String payCode = IdGen.randomBase62(64); String payCode = IdGen.randomBase62(64);
DecimalFormat df = new DecimalFormat("######0.00"); DecimalFormat df = new DecimalFormat("######0.00");
String amount = df.format(Double.valueOf(request.getAmount())); String amount = df.format(Double.valueOf(request.getAmount()));
// 4. JuHeZhong支付
PayBackDto payBackDto = new PayBackDto();
if(ComCode.PAYCHANNEL_HL1.equals(request.getPayChannel())){
OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode,"quick", request.getPayChannel(), "1",amount , request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 6 : 0)), request.getCardCode()); OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode,"quick", request.getPayChannel(), "1",amount , request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 6 : 0)), request.getCardCode());
payDao.saveOrderInfo(orderEntity); payDao.saveOrderInfo(orderEntity);
// 3. 创建分润信息,并保存 // 3. 创建分润信息,并保存
...@@ -75,25 +94,49 @@ public class PayApiService { ...@@ -75,25 +94,49 @@ public class PayApiService {
benefitEntity.setAmount(String.valueOf(Double.valueOf(benefitEntity.getAmount()))); benefitEntity.setAmount(String.valueOf(Double.valueOf(benefitEntity.getAmount())));
payDao.saveBenefitInfo(benefitEntity); payDao.saveBenefitInfo(benefitEntity);
} }
// 4. JuHeZhong支付
PayBackDto payBackDto = new PayBackDto();
// 获取支付卡号 // 获取支付卡号
CardEntity cardEntityPay = userService.getCardInfo(request); CardEntity cardEntityPay = userService.getCardInfo(request);
if("quick_no_integral".equals(request.getPayChannel())){
payBackDto = quickPayJuHeZhongPay(userEntity, orderEntity, request,cardEntityPay); payBackDto = quickPayJuHeZhongPay(userEntity, orderEntity, request,cardEntityPay);
}else if("quick_integral".equals(request.getPayChannel())){ }else if(ComCode.PAYCHANNEL_HL3.equals(request.getPayChannel())){
OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode,"quick", request.getPayChannel(), "1",amount , request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 6 : 0)), request.getCardCode());
payDao.saveOrderInfo(orderEntity);
// 3. 创建分润信息,并保存
Map<String, String> userBenefits = getUserBenefit(userEntity, request);
for (String key : userBenefits.keySet()) {
String benefitCode = IdGen.randomBase62(64);
BenefitEntity benefitEntity = new BenefitEntity(benefitCode, request.getSubMerchantCode(), code, request.getPayChannel(), "0", "A", userBenefits.get(key), "");
benefitEntity.setAmount(String.valueOf(Double.valueOf(benefitEntity.getAmount())));
payDao.saveBenefitInfo(benefitEntity);
}
// 获取支付卡号
CardEntity cardEntityPay = userService.getCardInfo(request);
if(!"C".equals(cardEntityPay.getCardType())){ if(!"C".equals(cardEntityPay.getCardType())){
payBackDto.setMessage("只能用信用卡支付"); payBackDto.setMessage("只能用信用卡支付");
}else if(cardEntityPay.getSupportPayChannel()==null || !cardEntityPay.getSupportPayChannel().contains("quick_integral,")){ }else if(cardEntityPay.getSupportPayChannel()==null || !cardEntityPay.getSupportPayChannel().contains("ComCode.PAYCHANNEL_HL3,")){
payBackDto.setMessage("不支持"+cardEntityPay.getBankName()); payBackDto.setMessage("不支持"+cardEntityPay.getBankName());
}else{ }else{
payBackDto = this.quickPayJuHeZhongIntegralPay(userEntity, orderEntity, request,cardEntityPay); payBackDto = this.quickPayJuHeZhongIntegralPay(userEntity, orderEntity, request,cardEntityPay);
} }
}else { }else {
OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode,"quick", ComCode.PAYCHANNEL_HL3, "1",amount , request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 6 : 0)), request.getCardCode());
payDao.saveOrderInfo(orderEntity);
// 3. 创建分润信息,并保存
Map<String, String> userBenefits = getUserBenefit(userEntity, request);
for (String key : userBenefits.keySet()) {
String benefitCode = IdGen.randomBase62(64);
BenefitEntity benefitEntity = new BenefitEntity(benefitCode, request.getSubMerchantCode(), code, request.getPayChannel(), "0", "A", userBenefits.get(key), "");
benefitEntity.setAmount(String.valueOf(Double.valueOf(benefitEntity.getAmount())));
payDao.saveBenefitInfo(benefitEntity);
}
// 获取支付卡号
CardEntity cardEntityPay = userService.getCardInfo(request);
if(!"C".equals(cardEntityPay.getCardType())){ if(!"C".equals(cardEntityPay.getCardType())){
payBackDto.setMessage("只能用信用卡支付"); payBackDto.setMessage("只能用信用卡支付");
}else if(cardEntityPay.getSupportPayChannel()==null || !cardEntityPay.getSupportPayChannel().contains("quick_integral,")){ }else if(cardEntityPay.getSupportPayChannel()==null || !cardEntityPay.getSupportPayChannel().contains("ComCode.PAYCHANNEL_HL3,")){
payBackDto.setMessage("不支持"+cardEntityPay.getBankName()); payBackDto.setMessage("不支持"+cardEntityPay.getBankName());
}else{ }else{
payBackDto = this.quickPayJuHeZhongIntegralPay(userEntity, orderEntity, request,cardEntityPay); payBackDto = this.quickPayJuHeZhongIntegralPay(userEntity, orderEntity, request,cardEntityPay);
...@@ -160,7 +203,7 @@ public class PayApiService { ...@@ -160,7 +203,7 @@ public class PayApiService {
RateEntity rateEntity = new RateEntity(); RateEntity rateEntity = new RateEntity();
rateEntity.setUserLevel(userEntity.getLevel()); rateEntity.setUserLevel(userEntity.getLevel());
rateEntity.setPayMethod("quick"); rateEntity.setPayMethod("quick");
rateEntity.setPayChannel("quick_no_integral"); rateEntity.setPayChannel(ComCode.PAYCHANNEL_HL1);
rateEntity = userService.getRateByLevel(rateEntity); rateEntity = userService.getRateByLevel(rateEntity);
if(rateEntity!=null){ if(rateEntity!=null){
double userFee = Long.parseLong(request.getAmount())*100*Double.valueOf(rateEntity.getRate()); double userFee = Long.parseLong(request.getAmount())*100*Double.valueOf(rateEntity.getRate());
...@@ -200,7 +243,12 @@ public class PayApiService { ...@@ -200,7 +243,12 @@ public class PayApiService {
* @throws Exception * @throws Exception
*/ */
public PayBackDto quickPayJuHeZhongIntegralPay(UserEntity userEntity, OrderEntity orderEntity, JuHeZhongPayRequest request,CardEntity cardEntity) throws Exception { public PayBackDto quickPayJuHeZhongIntegralPay(UserEntity userEntity, OrderEntity orderEntity, JuHeZhongPayRequest request,CardEntity cardEntity) throws Exception {
UserSubMchId userSubMchId = new UserSubMchId();
userSubMchId.setPayChannel(ComCode.PAYCHANNEL_HL3);
userSubMchId.setUserCode(userEntity.getCode());
userSubMchId = userService.getUserSubmchid(userSubMchId);
String subMchId = null;
if(userSubMchId==null){
UserRequest userRequest = new UserRequest(); UserRequest userRequest = new UserRequest();
userRequest.setSubMerchantCode(request.getSubMerchantCode()); userRequest.setSubMerchantCode(request.getSubMerchantCode());
userRequest.setBelongBank(userEntity.getUserDetail().getCard().getBelongBank()); userRequest.setBelongBank(userEntity.getUserDetail().getCard().getBelongBank());
...@@ -209,13 +257,17 @@ public class PayApiService { ...@@ -209,13 +257,17 @@ public class PayApiService {
userRequest.setMobile(userEntity.getMobile()); userRequest.setMobile(userEntity.getMobile());
userRequest.setIdCard(userEntity.getUserDetail().getIdCard()); userRequest.setIdCard(userEntity.getUserDetail().getIdCard());
userRequest.setCardPlace(userEntity.getUserDetail().getCard().getCardPlace()); userRequest.setCardPlace(userEntity.getUserDetail().getCard().getCardPlace());
String subMchId = userService.quickPayHandleJuhezhong(userRequest,""); subMchId = userService.quickPayHandleJuhezhong(userRequest,"",userEntity.getLevel());
userSubMchId = new UserSubMchId();
userSubMchId.setPayChannel(ComCode.PAYCHANNEL_HL3);
userSubMchId.setUserCode(userEntity.getCode());
userSubMchId.setSubmchid(subMchId);
userService.addUserSubmchid(userSubMchId);
}else{
subMchId = userSubMchId.getSubmchid();
}
JSONObject dto = new JSONObject(); JSONObject dto = new JSONObject();
dto.put("serviceType", 4);// 服务类型 dto.put("serviceType", 4);// 服务类型
dto.put("orderId", orderEntity.getPayCode());//订单号 dto.put("orderId", orderEntity.getPayCode());//订单号
dto.put("amount", Long.parseLong(request.getAmount())*100);//交易金额 dto.put("amount", Long.parseLong(request.getAmount())*100);//交易金额
...@@ -283,6 +335,184 @@ public class PayApiService { ...@@ -283,6 +335,184 @@ public class PayApiService {
return userBenefit; return userBenefit;
} }
// HL2 通道 即JFEN 开卡
public Response openCardJFen(UserRequest request){
CardEntity cardEntity = userService.getCardInfo(request);
UserSubMchId userSubMchId = new UserSubMchId();
userSubMchId.setUserCode(request.getSubMerchantCode());
userSubMchId.setPayChannel(ComCode.PAYCHANNEL_HL2);
userSubMchId = userService.getUserSubmchid(userSubMchId);
UserEntity userEntity = userService.getUserInfo(request);
UserDetailEntity userDetailEntity = userService.getUserDetailByCode(request.getSubMerchantCode());
RateEntity rateEntity = new RateEntity();
rateEntity.setUserLevel(userEntity.getLevel());
rateEntity.setPayChannel(ComCode.PAYCHANNEL_HL2);
rateEntity.setPayMethod("quick");
rateEntity = userService.getRateByLevel(rateEntity);
Response response = new Response();
JSONObject dto = new JSONObject();
dto.put("orderId", MakeOrderNum.makeOrderNum());
dto.put("merchantId",ComCode.JFEN_MERCHANT_ID);
dto.put("serviceType","8");
dto.put("subMchId",userSubMchId.getSubmchid());
dto.put("idType","01");
dto.put("idNo",userDetailEntity.getIdCard());
if(rateEntity==null){
dto.put("d0Fee","0.0043");
}else{
dto.put("d0Fee",rateEntity.getRate());
}
dto.put("accountName",userDetailEntity.getRealName());
dto.put("accountNo",cardEntity.getCardNo());
dto.put("mobile",cardEntity.getCardMobile());
dto.put("notifyUrl",Global.getConfig("project.access.url")+"/api/pay/openCardCallback");
dto.put("merchantKey",ComCode.JFEN_MERCHANT_KEY);
dto.put("timestamp",System.currentTimeMillis());
PayBackDto payBackDto = new PayBackDto();
try {
JSONObject jsonObject = juHeZhongPayJFenService.openCard(dto);
if("0000".equals(jsonObject.get("code"))){
payBackDto.setUrl(jsonObject.getString("url"));
response.setData(payBackDto);
response.setStatus(ComCode.STATUS_CODE_2000);
return response;
}else{
payBackDto.setUrl(jsonObject.getString("url"));
response.setData(payBackDto);
response.setStatus(ComCode.STATUS_CODE_9998);
response.setMessage(jsonObject.getString("msg"));
return response;
}
} catch (Exception e) {
response.setData(payBackDto);
response.setStatus(ComCode.STATUS_CODE_9998);
response.setMessage(ComCode.STATUS_CODE_9998_DESC);
}
return response;
}
// HL2 通道 即JFEN 发送验证码 需要的参数 SubMerchantCode\amount\cardCode\PayChannel 通道\
@Transactional(readOnly = false)
public Response sendMessageJFen (JuHeZhongPayRequest request){
request.setPayMethod("quick");
CardEntity cardEntity = userService.getCardInfoSwpaccid(request);
UserSubMchId userSubMchId = new UserSubMchId();
userSubMchId.setUserCode(request.getSubMerchantCode());
userSubMchId.setPayChannel(ComCode.PAYCHANNEL_HL2);
userSubMchId = userService.getUserSubmchid(userSubMchId);
UserEntity userEntity = userService.getUserInfo(request);
UserDetailEntity userDetailEntity = userService.getUserDetailByCode(request.getSubMerchantCode());
userEntity.setUserDetail(userDetailEntity);
// 2. 创建支付订单信息,并保存
String code = IdGen.randomBase62(64);
String payNo = ComCode.YYYYMMDDHHMM.format(new Date()) + IdGen.randomBase62(8); // 订单号
String payCode = IdGen.randomBase62(64);
DecimalFormat df = new DecimalFormat("######0.00");
String amount = df.format(Double.valueOf(request.getAmount()));
OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode,"quick", request.getPayChannel(), "1",amount , request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userDetailEntity.getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userDetailEntity.getCard().getCardType()) ? 6 : 0)), request.getCardCode());
payDao.saveOrderInfo(orderEntity);
// 3. 创建分润信息,并保存
Map<String, String> userBenefits = getUserBenefit(userEntity, request);
for (String key : userBenefits.keySet()) {
String benefitCode = IdGen.randomBase62(64);
BenefitEntity benefitEntity = new BenefitEntity(benefitCode, request.getSubMerchantCode(), code, request.getPayChannel(), "0", "A", userBenefits.get(key), "");
benefitEntity.setAmount(String.valueOf(Double.valueOf(benefitEntity.getAmount())));
payDao.saveBenefitInfo(benefitEntity);
}
Response response = new Response();
JSONObject dto = new JSONObject();
dto.put("orderId",payCode); // 订单号
dto.put("merchantId",ComCode.JFEN_MERCHANT_ID);
dto.put("serviceType","4");
dto.put("subMchId",userSubMchId.getSubmchid());
dto.put("merchantKey",ComCode.JFEN_MERCHANT_KEY);
dto.put("timestamp",System.currentTimeMillis());
dto.put("amount",amount);
dto.put("idNo",userDetailEntity.getIdCard());
dto.put("accountName",userDetailEntity.getRealName());
dto.put("accountNo",cardEntity.getCardNo());
dto.put("mobile",cardEntity.getCardMobile());
dto.put("swpaccid",cardEntity.getSwpaccid());
dto.put("notifyUrl",Global.getConfig("project.access.url")+"/api/pay/openCardCallback");
try {
JSONObject jsonObject = juHeZhongPayJFenService.openCard(dto);
if("0000".equals(jsonObject.get("code"))){
orderEntity.setTradeNo(jsonObject.getString("trade_no"));
payDao.updateOrderTradeNo(orderEntity);
response.setData(orderEntity);
response.setStatus(ComCode.STATUS_CODE_2000);
response.setMessage(ComCode.STATUS_CODE_2000_DESC);
return response;
}
response.setData(orderEntity);
response.setStatus(ComCode.STATUS_CODE_9998);
response.setMessage(jsonObject.getString("msg"));
return response;
} catch (Exception e) {
response.setData(orderEntity);
response.setStatus(ComCode.STATUS_CODE_9998);
response.setMessage(ComCode.STATUS_CODE_9998_DESC);
response.setError(e.getMessage());
}
return response;
}
// HL2 通道 即JFEN 发送验证码 需要的参数 SubMerchantCode\payNo\passwd\cardCode \
@Transactional(readOnly = false)
public PayBackDto jFenPayJuhezhong (JuHeZhongPayRequest request) throws Exception {
request.setPayMethod("quick");
CardEntity cardEntity = userService.getCardInfoSwpaccid(request);
UserSubMchId userSubMchId = new UserSubMchId();
userSubMchId.setUserCode(request.getSubMerchantCode());
userSubMchId.setPayChannel(ComCode.PAYCHANNEL_HL2);
userSubMchId = userService.getUserSubmchid(userSubMchId);
OrderEntity orderEntity = this.getOrder(request.getPayNo());
PayBackDto payBackDto = new PayBackDto();
payBackDto.setIsUrl("0");
JSONObject dto = new JSONObject();
dto.put("orderId",MakeOrderNum.makeOrderNum()); // 非订单号
dto.put("merchantId",ComCode.JFEN_MERCHANT_ID);// 商户号
dto.put("serviceType","5");// 操作类型 5
dto.put("subMchId",userSubMchId.getSubmchid());// 子商户号
dto.put("merchantKey",ComCode.JFEN_MERCHANT_KEY);
dto.put("timestamp",System.currentTimeMillis());
dto.put("passwd",request.getPasswd());
dto.put("productName","productName");
dto.put("tradeNo",orderEntity.getTradeNo());
dto.put("swpaccid",cardEntity.getSwpaccid());
JSONObject jsonObject = juHeZhongPayJFenService.openCard(dto);
this.notifyPay(orderEntity);
if("0000".equals(jsonObject.get("code"))){
payBackDto.setMessage(jsonObject.getString("msg"));
return payBackDto;
}else{
payBackDto.setMessage(jsonObject.getString("msg"));
throw new MyException(jsonObject.getString("msg"));
}
}
/** /**
* 回调 * 回调
* @param orderEntity * @param orderEntity
...@@ -297,7 +527,20 @@ public class PayApiService { ...@@ -297,7 +527,20 @@ public class PayApiService {
dto.setMerchantKey(ComCode.MERCHANT_KEY); dto.setMerchantKey(ComCode.MERCHANT_KEY);
dto.setTimestamp(System.currentTimeMillis()); dto.setTimestamp(System.currentTimeMillis());
JSONObject jsonObject = juHeZhongPayService.query(dto); orderEntity = payDao.getOrder(orderEntity);
JSONObject jsonObject = null;
if(ComCode.PAYCHANNEL_HL3.equals(orderEntity.getPayChannel())){
dto.setMerchantId(ComCode.INTEGRAL_MERCHANT_ID);
dto.setMerchantKey(ComCode.INTEGRAL_MERCHANT_KEY);
jsonObject = juHeZhongPayIntegralService.query(dto);
}else if(ComCode.PAYCHANNEL_HL1.equals(orderEntity.getPayChannel())){
jsonObject = juHeZhongPayService.query(dto);
}else if(ComCode.PAYCHANNEL_HL2.equals(orderEntity.getPayChannel())){
dto.setMerchantId(ComCode.JFEN_MERCHANT_ID);
dto.setMerchantKey(ComCode.JFEN_MERCHANT_KEY);
jsonObject = juHeZhongPayService.query(dto);
}
System.out.println("查询订单返回结果:"+jsonObject.toJSONString()); System.out.println("查询订单返回结果:"+jsonObject.toJSONString());
// 支付成功 // 支付成功
if("0000".equals(jsonObject.get("code"))){ if("0000".equals(jsonObject.get("code"))){
...@@ -309,7 +552,7 @@ public class PayApiService { ...@@ -309,7 +552,7 @@ public class PayApiService {
// benefitEntity.setOrderCode(orderEntity.getPayCode()); // benefitEntity.setOrderCode(orderEntity.getPayCode());
// benefitEntity.setBenefitStatus("1"); // benefitEntity.setBenefitStatus("1");
// payDao.updateBenefit(benefitEntity); // payDao.updateBenefit(benefitEntity);
}else if("0001".equals(jsonObject.get("code"))){ // 支付失败 }else{ // 支付失败
orderEntity.setPayStatus("4"); orderEntity.setPayStatus("4");
payDao.updateOrderStatus(orderEntity); payDao.updateOrderStatus(orderEntity);
BenefitEntity benefitEntity = new BenefitEntity(); BenefitEntity benefitEntity = new BenefitEntity();
...@@ -326,13 +569,17 @@ public class PayApiService { ...@@ -326,13 +569,17 @@ public class PayApiService {
return payDao.getOrder(orderEntity); return payDao.getOrder(orderEntity);
} }
public OrderEntity getOrder(String payNo){
OrderEntity orderEntity = new OrderEntity();
orderEntity.setPayNo(payNo);
return payDao.getOrder(orderEntity);
}
@Scheduled(cron = "*/30 * * * * ?")
@Transactional(readOnly = false) @Transactional(readOnly = false)
public void updateOrderTiming(){ public void updateOrderTiming(){
System.out.println("定时任务。。。。。"); // System.out.println("。。。。。。。定时任务。updateOrderTiming开始。。。。");
OrderEntity orderEntity = new OrderEntity(); OrderEntity orderEntity = new OrderEntity();
orderEntity.setCreated(DateUtils.getYesterday(DateUtils.getYesterday("yyyy-MM-dd HH:mm:ss"))); orderEntity.setEndTime(DateUtils.getYesterday(DateUtils.getYesterday("yyyy-MM-dd HH:mm:ss")));
List<OrderEntity> list = payDao.getOrderListTimeing(orderEntity); List<OrderEntity> list = payDao.getOrderListTimeing(orderEntity);
for(OrderEntity order:list){ for(OrderEntity order:list){
order.setPayStatus("3"); order.setPayStatus("3");
...@@ -341,5 +588,53 @@ public class PayApiService { ...@@ -341,5 +588,53 @@ public class PayApiService {
benefitEntity.setOrderCode(order.getPayCode()); benefitEntity.setOrderCode(order.getPayCode());
payDao.deleteBenefit(benefitEntity); payDao.deleteBenefit(benefitEntity);
} }
// System.out.println("。。。。。。。定时任务。updateOrderTiming结束。。。。");
}
@Transactional(readOnly = false)
public void updateOrders(){
// System.out.println("。。。。。。。定时任务。updateOrders开始。。。。");
try {
OrderEntity orderEntity = new OrderEntity();
orderEntity.setStartTime(DateUtils.getYesterday(DateUtils.getYesterday("yyyy-MM-dd HH:mm:ss")));
orderEntity.setEndTime(DateUtils.formatDate(DateUtils.addHours(new Date(),-12),"yyyy-MM-dd HH:mm:ss"));
List<OrderEntity> list = payDao.getOrderListTimeing(orderEntity);
for(OrderEntity order:list){
QuickDto dto = new QuickDto();
dto.setOrderId(order.getPayCode());
dto.setTimestamp(System.currentTimeMillis());
JSONObject jsonObject = null;
if(ComCode.PAYCHANNEL_HL3.equals(order.getPayChannel())){
dto.setMerchantId(ComCode.MERCHANT_ID);
dto.setMerchantKey(ComCode.MERCHANT_KEY);
jsonObject = juHeZhongPayIntegralService.query(dto);
}else if(ComCode.PAYCHANNEL_HL1.equals(order.getPayChannel())){
jsonObject = juHeZhongPayService.query(dto);
}
if(jsonObject!=null){
// System.out.println("查询订单返回结果:"+jsonObject.toJSONString());
// 支付成功
if("0000".equals(jsonObject.get("code"))){
System.out.println("查询订单返回结果:"+jsonObject.toJSONString());
order.setPayStatus("2");
payDao.updateOrderStatus(order);
}else{ // 支付失败
order.setPayStatus("4");
payDao.updateOrderStatus(order);
BenefitEntity benefitEntity = new BenefitEntity();
benefitEntity.setOrderCode(order.getPayCode());
benefitEntity.setDelFlag("1");
payDao.deleteBenefit(benefitEntity);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
// System.out.println("。。。。。。。定时任务。updateOrders结束。。。。");
} }
} }
package com.thinkgem.jeesite.modules.pay.service;
import com.alibaba.fastjson.JSONObject;
import com.thinkgem.jeesite.common.constant.ComCode;
import com.thinkgem.jeesite.modules.pay.dao.PayApiDao;
import com.thinkgem.jeesite.modules.pay.entity.BenefitEntity;
import com.thinkgem.jeesite.modules.pay.entity.OrderEntity;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.QuickDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayIntegralService;
import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayService;
import com.thinkgem.jeesite.modules.user.service.UserApiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Lazy(false)
public class TimingService {
@Autowired
private PayApiService payApiService;
@Autowired
private JuHeZhongPayService juHeZhongPayService;
@Autowired
private JuHeZhongPayIntegralService juHeZhongPayIntegralService;
@Scheduled(cron = "0 0 0/1 * * ?")
public void updateOrders(){
payApiService.updateOrderTiming();
payApiService.updateOrders();
}
}
...@@ -6,7 +6,11 @@ public class JuHeZhongPayRequest extends Request { ...@@ -6,7 +6,11 @@ public class JuHeZhongPayRequest extends Request {
private String amount; // 金额 private String amount; // 金额
private String cardCode; // 支付卡code private String cardCode; // 支付卡code
private String subject; // 商品名称 private String subject; // 商品名称
private String payChannel; // 渠道 目前合众支付接口仅传入quick_no_integral quick_integral private String payChannel; // 渠道 目前合众支付接口仅传入quick_no_integral ComCode.PAYCHANNEL_HL3
private String payMethod;//
private String passwd;// 验证码
private String payNo;// 订单号
public String getAmount() { public String getAmount() {
return amount; return amount;
...@@ -39,4 +43,28 @@ public class JuHeZhongPayRequest extends Request { ...@@ -39,4 +43,28 @@ public class JuHeZhongPayRequest extends Request {
public void setPayChannel(String payChannel) { public void setPayChannel(String payChannel) {
this.payChannel = payChannel; this.payChannel = payChannel;
} }
public String getPayMethod() {
return payMethod;
}
public void setPayMethod(String payMethod) {
this.payMethod = payMethod;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getPayNo() {
return payNo;
}
public void setPayNo(String payNo) {
this.payNo = payNo;
}
} }
...@@ -83,4 +83,19 @@ public interface UserApiDao { ...@@ -83,4 +83,19 @@ public interface UserApiDao {
Level getLevelByUserLevel(UserRequest request); Level getLevelByUserLevel(UserRequest request);
void addUserSubmchid(UserSubMchId userSubMchId);
UserSubMchId getUserSubmchid(UserSubMchId userSubMchId);
public int updateUserSubmchid(UserSubMchId userSubMchId);
public CardEntity getCardByCardNo(CardEntity cardEntity);
public int addSwpaccid(CardSwpaccidEntity entity);
public CardSwpaccidEntity getSwpaccid(CardSwpaccidEntity cardSwpaccidEntity);
CardEntity getCardInfoSwpaccid(Request request);
} }
...@@ -37,6 +37,8 @@ public class CardEntity extends BaseEntity implements Serializable { ...@@ -37,6 +37,8 @@ public class CardEntity extends BaseEntity implements Serializable {
private String supportPayChannel; private String supportPayChannel;
private String swpaccid; // HL2通道 开卡唯一标识
public CardEntity() { public CardEntity() {
} }
...@@ -221,4 +223,12 @@ public class CardEntity extends BaseEntity implements Serializable { ...@@ -221,4 +223,12 @@ public class CardEntity extends BaseEntity implements Serializable {
public void setSupportPayChannel(String supportPayChannel) { public void setSupportPayChannel(String supportPayChannel) {
this.supportPayChannel = supportPayChannel; this.supportPayChannel = supportPayChannel;
} }
public String getSwpaccid() {
return swpaccid;
}
public void setSwpaccid(String swpaccid) {
this.swpaccid = swpaccid;
}
} }
package com.thinkgem.jeesite.modules.user.entity;
public class CardSwpaccidEntity {
private String cardCode;
private String payMethod; // 支付方式
private String payChannel;// 通道
private String swpaccid;
public String getCardCode() {
return cardCode;
}
public void setCardCode(String cardCode) {
this.cardCode = cardCode;
}
public String getPayMethod() {
return payMethod;
}
public void setPayMethod(String payMethod) {
this.payMethod = payMethod;
}
public String getPayChannel() {
return payChannel;
}
public void setPayChannel(String payChannel) {
this.payChannel = payChannel;
}
public String getSwpaccid() {
return swpaccid;
}
public void setSwpaccid(String swpaccid) {
this.swpaccid = swpaccid;
}
}
package com.thinkgem.jeesite.modules.user.entity;
public class UserSubMchId {
private String userCode;
private String submchid;
private String payChannel;
public String getUserCode() {
return userCode;
}
public void setUserCode(String userCode) {
this.userCode = userCode;
}
public String getSubmchid() {
return submchid;
}
public void setSubmchid(String submchid) {
this.submchid = submchid;
}
public String getPayChannel() {
return payChannel;
}
public void setPayChannel(String payChannel) {
this.payChannel = payChannel;
}
}
...@@ -10,6 +10,7 @@ import com.thinkgem.jeesite.modules.commonError.MyException; ...@@ -10,6 +10,7 @@ import com.thinkgem.jeesite.modules.commonError.MyException;
import com.thinkgem.jeesite.modules.message.MessageUtils; import com.thinkgem.jeesite.modules.message.MessageUtils;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.MerchantDto; import com.thinkgem.jeesite.modules.pay.juhezhong.dto.MerchantDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayIntegralService; import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayIntegralService;
import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayJFenService;
import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayService; import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayService;
import com.thinkgem.jeesite.modules.pay.entity.RateEntity; import com.thinkgem.jeesite.modules.pay.entity.RateEntity;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.MakeOrderNum; import com.thinkgem.jeesite.modules.pay.juhezhong.utils.MakeOrderNum;
...@@ -19,6 +20,7 @@ import com.thinkgem.jeesite.modules.user.dao.UserApiDao; ...@@ -19,6 +20,7 @@ import com.thinkgem.jeesite.modules.user.dao.UserApiDao;
import com.thinkgem.jeesite.modules.user.entity.*; import com.thinkgem.jeesite.modules.user.entity.*;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -35,7 +37,8 @@ import java.util.List; ...@@ -35,7 +37,8 @@ import java.util.List;
* 前端用户相关 * 前端用户相关
*/ */
@Service @Service
@Transactional(readOnly = true) @Lazy(false)
@Transactional
public class UserApiService { public class UserApiService {
@Autowired @Autowired
...@@ -46,6 +49,9 @@ public class UserApiService { ...@@ -46,6 +49,9 @@ public class UserApiService {
@Autowired @Autowired
private JuHeZhongPayIntegralService juHeZhongPayIntegralService; private JuHeZhongPayIntegralService juHeZhongPayIntegralService;
@Autowired
private JuHeZhongPayJFenService juHeZhongPayJFenService;
public UserEntity getUserInfo(Request request) { public UserEntity getUserInfo(Request request) {
UserEntity user = userDao.getUserInfo(request); UserEntity user = userDao.getUserInfo(request);
// 以下两行代码应Android要求,增加空detail和card // 以下两行代码应Android要求,增加空detail和card
...@@ -184,6 +190,12 @@ public class UserApiService { ...@@ -184,6 +190,12 @@ public class UserApiService {
return entity; return entity;
} }
public CardEntity getCardInfoSwpaccid(Request request) {
CardEntity entity = userDao.getCardInfoSwpaccid(request);
return entity;
}
@Transactional(readOnly = false) @Transactional(readOnly = false)
public void removeCards(UserRequest request) { public void removeCards(UserRequest request) {
userDao.removeCards(request); userDao.removeCards(request);
...@@ -214,6 +226,7 @@ public class UserApiService { ...@@ -214,6 +226,7 @@ public class UserApiService {
return userDao.getAboutUsInfo(request); return userDao.getAboutUsInfo(request);
} }
// 实名认证
@Transactional(readOnly = false) @Transactional(readOnly = false)
public void certification(UserRequest request) throws MyException, Exception { public void certification(UserRequest request) throws MyException, Exception {
// 更新用户详情 // 更新用户详情
...@@ -227,18 +240,23 @@ public class UserApiService { ...@@ -227,18 +240,23 @@ public class UserApiService {
String type = "1"; // 默认将卡片添加为对私 String type = "1"; // 默认将卡片添加为对私
String status = "0"; // 新增卡片审核状态均为未审核 String status = "0"; // 新增卡片审核状态均为未审核
String subMerchantId = null;//registJuHeZhongPay(request, type); String subMerchantId = null;//registJuHeZhongPay(request, type);
// String subMerchantId = quickPayHandleJuhezhong(request,type);
submitPayTest(subMerchantId);
// 更新银行卡详情 // 更新银行卡详情
CardEntity cardStatusEntity = new CardEntity(request.getSubMerchantCode(), "N"); CardEntity cardStatusEntity = new CardEntity(request.getSubMerchantCode(), "N");
userDao.updateCardStatus(cardStatusEntity); userDao.updateCardStatus(cardStatusEntity);
CardEntity cardEntity = new CardEntity(IdGen.randomBase62(64), request.getSubMerchantCode(), "D", request.getCardNo(), request.getCardMobile(), request.getBelongBank(), request.getCardBank(), request.getCardPlace(), "Y", subMerchantId, request.getCardSrc().replace(Global.getConfig("sys.pre.url"), ""), type, status, request.getProvince(), request.getCity()); CardEntity cardEntity = new CardEntity(IdGen.randomBase62(64), request.getSubMerchantCode(), "D", request.getCardNo(), request.getCardMobile(), request.getBelongBank(), request.getCardBank(), request.getCardPlace(), "Y", subMerchantId, request.getCardSrc().replace(Global.getConfig("sys.pre.url"), ""), type, status, request.getProvince(), request.getCity());
userDao.addNewCard(cardEntity); userDao.addNewCard(cardEntity);
// 更新用户状态 // 更新用户状态
UserEntity userEntity = new UserEntity(); UserEntity userEntity = new UserEntity();
userEntity.setCode(request.getSubMerchantCode()); userEntity.setCode(request.getSubMerchantCode());
userEntity.setStatus("1"); userEntity.setStatus("1");
userDao.updateUserInfo(userEntity); userDao.updateUserInfo(userEntity);
// 查询与实名用户相同推荐人的信息 // 查询与实名用户相同推荐人的信息
UserEntity queryUserRecommendEntity = new UserEntity(request.getSubMerchantCode()); UserEntity queryUserRecommendEntity = new UserEntity(request.getSubMerchantCode());
List<UserEntity> countRecommend = userDao.getUserInfoBySameRecommend(queryUserRecommendEntity); List<UserEntity> countRecommend = userDao.getUserInfoBySameRecommend(queryUserRecommendEntity);
...@@ -249,14 +267,108 @@ public class UserApiService { ...@@ -249,14 +267,108 @@ public class UserApiService {
recommendedUser.setLevel("D"); recommendedUser.setLevel("D");
// 实名用户的推荐人等级由E(青铜)升为D(白银) // 实名用户的推荐人等级由E(青铜)升为D(白银)
userDao.updateUserLevel(recommendedUser); userDao.updateUserLevel(recommendedUser);
// 修改实名用户推荐人的银行卡费率
// RateEntity rateEntityParam = new RateEntity("D", "quick",); RateEntity rateEntityParam = new RateEntity();
// RateEntity rateEntity = userDao.getRateByLevel(rateEntityParam); rateEntityParam.setUserLevel("D");
// List<CardEntity> recommendCards = userDao.getRecommendCardsInfo(recommendedUser); List<RateEntity> list = userDao.getRateListByLevel(rateEntityParam);
// for (CardEntity entity : recommendCards) { for(RateEntity rateEntity:list){
// updateRateJuHeZhongPay(entity, rateEntity); if(ComCode.PAYCHANNEL_HL3.equals(rateEntity.getPayChannel())){
// } String subMchId = this.quickPayHandleJuhezhong(request,"","D");
UserSubMchId userSubMchId = new UserSubMchId();
userSubMchId.setSubmchid(subMchId);
userSubMchId.setUserCode(recommendedUser.getCode());
userSubMchId.setPayChannel(rateEntity.getPayChannel());
int row = this.updateUserSubmchid(userSubMchId);
if(row == 0){
this.addUserSubmchid(userSubMchId);
}
}else if(ComCode.PAYCHANNEL_HL2.equals(rateEntity.getPayChannel())){
UserSubMchId userSubMchId = new UserSubMchId();
userSubMchId.setUserCode(recommendedUser.getCode());
userSubMchId.setPayChannel(rateEntity.getPayChannel());
UserSubMchId userSubMchIdQuery = userDao.getUserSubmchid(userSubMchId);
// 如果推荐人的 quick_jfen 通道下的 subMchId 是空 则该通道下先注册
if(userSubMchIdQuery == null){
recommendedUser = this.getUserDetailInfo(recommendedUser);
JSONObject dto = new JSONObject();
String orderId = MakeOrderNum.makeOrderNum();
dto.put("orderId", MakeOrderNum.makeOrderNum());
dto.put("serviceType",1);
dto.put("subMerchantName",recommendedUser.getUserDetail().getRealName()+orderId);
dto.put("subMerchantType","PERSON");
dto.put("businessLicense",recommendedUser.getUserDetail().getRealName()+orderId);
dto.put("legalPersonName",recommendedUser.getUserDetail().getRealName());
dto.put("legalPersonID",recommendedUser.getUserDetail().getIdCard());
dto.put("subMerchantPersonName",recommendedUser.getUserDetail().getRealName());
dto.put("subMerchantPersonPhone",recommendedUser.getMobile());
dto.put("bankType","TOPRIVATE");
dto.put("accountName",recommendedUser.getUserDetail().getRealName());
dto.put("accountNo",recommendedUser.getUserDetail().getCard().getCardNo());
dto.put("bankName",recommendedUser.getUserDetail().getCard().getBankName());
dto.put("bankProv",recommendedUser.getUserDetail().getCard().getProvince());
dto.put("bankCity",recommendedUser.getUserDetail().getCard().getCity());
dto.put("bankBranch",recommendedUser.getUserDetail().getCard().getCardPlace());
dto.put("bankCode",recommendedUser.getUserDetail().getCard().getBelongBank());
dto.put("timestamp",System.currentTimeMillis());
JSONObject jsonObject = juHeZhongPayJFenService.merchantIn(dto);
if (!"0000".equals(jsonObject.getString("code"))) {
throw new MyException(jsonObject.getString("msg"));
} }
String subMchId = jsonObject.getString("subMchId");
rateEntity.setServiceType("0");// 添加费率
this.merchantFeelJFen(subMchId,rateEntity);
}else{
// 修改费率
rateEntity.setServiceType("0");
this.merchantFeelJFen(userSubMchId.getSubmchid(),rateEntity);
}
}else if("".equals(rateEntity.getPayChannel())){
}
}
}
/* 实名认证用户 商户入网 和 添加对应的费率 开始*/
UserEntity userEntityRequest = this.getUserInfo(request);
RateEntity rate = new RateEntity();
rate.setUserLevel(userEntityRequest.getLevel());
UserSubMchId userSubMchIdRequest = new UserSubMchId();
userSubMchIdRequest.setUserCode(request.getSubMerchantCode());
// ComCode.PAYCHANNEL_HL3 商户入网
String inregralSubMchId = this.quickPayHandleJuhezhong(request,"",userEntityRequest.getLevel());
userSubMchIdRequest.setPayChannel(ComCode.PAYCHANNEL_HL3);
userSubMchIdRequest.setSubmchid(inregralSubMchId);
this.addUserSubmchid(userSubMchIdRequest);
// 加添费率
this.quickPayHandleJuhezhong(request,"",userEntityRequest.getLevel());
// JFen 商户入网 + 添加费率
String JFenSubMchId = this.merchantInJFenJuhezhong(request);
userSubMchIdRequest.setPayChannel(ComCode.PAYCHANNEL_HL2);
userSubMchIdRequest.setSubmchid(inregralSubMchId);
this.addUserSubmchid(userSubMchIdRequest);
rate.setPayChannel(ComCode.PAYCHANNEL_HL2);
RateEntity rateEntity = this.getRateByLevel(rate);
rateEntity.setServiceType("0");
// 添加费率
this.merchantFeelJFen(JFenSubMchId,rateEntity);
/* 实名认证用户 商户入网 和 添加对应的费率 结束*/
} }
public List<ProvinceCityEntity> getProvinceCity(UserRequest request) { public List<ProvinceCityEntity> getProvinceCity(UserRequest request) {
...@@ -273,6 +385,7 @@ public class UserApiService { ...@@ -273,6 +385,7 @@ public class UserApiService {
return userDao.getBelongBank(request); return userDao.getBelongBank(request);
} }
// 改变结算卡
@Transactional(readOnly = false) @Transactional(readOnly = false)
public void changeDebit(UserRequest request) throws MyException, Exception { public void changeDebit(UserRequest request) throws MyException, Exception {
// 将该用户的所有卡类型置为非结算卡 // 将该用户的所有卡类型置为非结算卡
...@@ -289,7 +402,7 @@ public class UserApiService { ...@@ -289,7 +402,7 @@ public class UserApiService {
*/ */
/** /**
* 注册JuHeZhong支付用户 * 注册JuHeZhong支付用户 无积分
* *
* @param request * @param request
* @param type * @param type
...@@ -332,14 +445,12 @@ public class UserApiService { ...@@ -332,14 +445,12 @@ public class UserApiService {
return jsonObject.getString("subMchId"); return jsonObject.getString("subMchId");
} }
public String quickPayHandleJuhezhong(UserRequest request, String type) throws MyException, Exception { // 积分 商户入网
UserEntity userEntity = userDao.getUserInfo(request); public String quickPayHandleJuhezhong(UserRequest request, String type,String level) throws MyException, Exception {
BelongBankEntity belongBankEntity = userDao.getBelongBankEntity(request); BelongBankEntity belongBankEntity = userDao.getBelongBankEntity(request);
if (userEntity == null) {
throw new MyException("用户信息为空");
}
// UserDetailEntity userDetailEntity = userDao.getUserDetailByCode(userEntity); // UserDetailEntity userDetailEntity = userDao.getUserDetailByCode(userEntity);
RateEntity rateEntityParam = new RateEntity(userEntity.getLevel(), "quick","quick_integral"); RateEntity rateEntityParam = new RateEntity(level, "quick",ComCode.PAYCHANNEL_HL3);
RateEntity rateEntity = userDao.getRateByLevel(rateEntityParam); RateEntity rateEntity = userDao.getRateByLevel(rateEntityParam);
if (rateEntity == null) { if (rateEntity == null) {
throw new MyException("费率等级信息为空"); throw new MyException("费率等级信息为空");
...@@ -361,7 +472,7 @@ public class UserApiService { ...@@ -361,7 +472,7 @@ public class UserApiService {
dto.put("mobile",request.getMobile()); dto.put("mobile",request.getMobile());
dto.put("idNo",request.getIdCard());//身份证号 dto.put("idNo",request.getIdCard());//身份证号
dto.put("settleType",rateEntity.getRate());//费率类型 795934 dto.put("settleType",rateEntity.getRateType());//费率类型 795934
dto.put("address",request.getCardPlace());//地址 dto.put("address",request.getCardPlace());//地址
dto.put("merchantKey", ComCode.INTEGRAL_MERCHANT_KEY);//商户key dto.put("merchantKey", ComCode.INTEGRAL_MERCHANT_KEY);//商户key
dto.put("timestamp", System.currentTimeMillis());//时间戳 dto.put("timestamp", System.currentTimeMillis());//时间戳
...@@ -375,6 +486,54 @@ public class UserApiService { ...@@ -375,6 +486,54 @@ public class UserApiService {
// JFen 商户入网
public String merchantInJFenJuhezhong(UserRequest request) throws MyException, Exception {
UserEntity userEntity = userDao.getUserInfo(request);
BelongBankEntity belongBankEntity = userDao.getBelongBankEntity(request);
if (userEntity == null) {
throw new MyException("用户信息为空");
}
// UserDetailEntity userDetailEntity = userDao.getUserDetailByCode(userEntity);
RateEntity rateEntityParam = new RateEntity(userEntity.getLevel(), "quick",ComCode.PAYCHANNEL_HL3);
RateEntity rateEntity = userDao.getRateByLevel(rateEntityParam);
if (rateEntity == null) {
throw new MyException("费率等级信息为空");
}
JSONObject dto = new JSONObject();
String orderId = MakeOrderNum.makeOrderNum();
dto.put("orderId", MakeOrderNum.makeOrderNum());
dto.put("serviceType",1);
dto.put("subMerchantName",request.getRealName()+orderId);
dto.put("subMerchantType","PERSON");
dto.put("businessLicense",request.getRealName()+orderId);
dto.put("legalPersonName",request.getRealName());
dto.put("legalPersonID",request.getIdCard());
dto.put("subMerchantPersonName",request.getRealName());
dto.put("subMerchantPersonPhone",request.getMobile());
dto.put("bankType","TOPRIVATE");
dto.put("accountName",request.getRealName());
dto.put("accountNo",request.getCardNo());
dto.put("bankName",belongBankEntity.getBankName());
dto.put("bankProv",request.getProvince());
dto.put("bankCity",request.getCity());
dto.put("bankBranch",request.getCardPlace());
dto.put("bankCode",request.getBelongBank());
dto.put("timestamp",System.currentTimeMillis());
JSONObject jsonObject = juHeZhongPayJFenService.merchantIn(dto);
if (!"0000".equals(jsonObject.getString("code"))) {
throw new MyException(jsonObject.getString("msg"));
}
return jsonObject.getString("subMchId");
}
public void submitPayTest(String subMchId) throws Exception { public void submitPayTest(String subMchId) throws Exception {
JSONObject dto = new JSONObject(); JSONObject dto = new JSONObject();
...@@ -391,7 +550,31 @@ public class UserApiService { ...@@ -391,7 +550,31 @@ public class UserApiService {
} }
} }
/**
* JuHeZhong支付用户费率
* @param rateEntity
* @return
* @throws MyException
* @throws Exception
*/
public void merchantFeelJFen(String subMchId, RateEntity rateEntity) throws MyException, Exception {
// 修改费率
JSONObject dto = new JSONObject();
dto.put("subMchId",subMchId);
dto.put("paymentType","QUICKPAY");
dto.put("d0Fee",rateEntity.getRate());
dto.put("d1Fee",rateEntity.getRate());
JSONObject jsonObject = null;
if("1".equals(rateEntity.getServiceType())){
jsonObject = juHeZhongPayJFenService.merchantModifyFeel(dto);
}else {
jsonObject = juHeZhongPayJFenService.merchantAddFeel(dto);
}
if (!"0000".equals(jsonObject.getString("code"))) {
throw new MyException(jsonObject.getString("msg"));
}
}
/** /**
* 修改JuHeZhong支付用户费率 * 修改JuHeZhong支付用户费率
...@@ -455,6 +638,11 @@ public class UserApiService { ...@@ -455,6 +638,11 @@ public class UserApiService {
return userDao.getDebitCardByUserCode(request); return userDao.getDebitCardByUserCode(request);
} }
public CardEntity getDebitCardByUserCode(String code){
UserRequest request = new UserRequest();
request.setSubMerchantCode(code);
return userDao.getDebitCardByUserCode(request);
}
@Transactional(readOnly = false) @Transactional(readOnly = false)
...@@ -473,4 +661,42 @@ public class UserApiService { ...@@ -473,4 +661,42 @@ public class UserApiService {
return userDao.getLevelByUserLevel(request); return userDao.getLevelByUserLevel(request);
} }
public void addUserSubmchid(UserSubMchId userSubMchId){
userDao.addUserSubmchid(userSubMchId);
}
public UserSubMchId getUserSubmchid(UserSubMchId userSubMchId){
return userDao.getUserSubmchid(userSubMchId);
}
public int updateUserSubmchid(UserSubMchId userSubMchId){
return userDao.updateUserSubmchid(userSubMchId);
}
public BelongBankEntity getBelongBankEntity(String belongBank){
UserRequest request = new UserRequest();
request.setBelongBank(belongBank);
return userDao.getBelongBankEntity(request);
}
public CardEntity getCardByCardNo(String cardNo){
CardEntity cardEntity = new CardEntity();
cardEntity.setCardNo(cardNo);
return userDao.getCardByCardNo(cardEntity);
}
public int addSwpaccid(CardSwpaccidEntity entity){
return userDao.addSwpaccid(entity);
}
public CardSwpaccidEntity getSwpaccid(CardSwpaccidEntity cardSwpaccidEntity){
return userDao.getSwpaccid(cardSwpaccidEntity);
}
public UserDetailEntity getUserDetailByCode(String userCode){
UserEntity userEntity = new UserEntity();
userEntity.setCode(userCode);
return userDao.getUserDetailByCode(userEntity);
}
} }
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
user_code, user_code,
pay_no, pay_no,
pay_code, pay_code,
pay_method,
pay_channel, pay_channel,
pay_status, pay_status,
amount, amount,
...@@ -17,7 +18,7 @@ ...@@ -17,7 +18,7 @@
card_code, card_code,
create_by, create_by,
update_by update_by
) VALUES (#{code}, #{userCode}, #{payNo}, #{payCode}, #{payChannel}, #{payStatus}, #{amount}, #{subject}, #{tradeNo}, #{payType}, #{cardCode}, #{createdUser}, #{modifiedUser}) ) VALUES (#{code}, #{userCode}, #{payNo}, #{payCode},#{payMethod}, #{payChannel}, #{payStatus}, #{amount}, #{subject}, #{tradeNo}, #{payType}, #{cardCode}, #{createdUser}, #{modifiedUser})
</insert> </insert>
<update id="updateOrderStatus"> <update id="updateOrderStatus">
UPDATE youka_orders UPDATE youka_orders
...@@ -25,6 +26,13 @@ ...@@ -25,6 +26,13 @@
WHERE pay_code = #{payCode} WHERE pay_code = #{payCode}
</update> </update>
<update id="updateOrderTradeNo">
UPDATE youka_orders
SET trade_no = #{tradeNo}
WHERE pay_code = #{payCode}
</update>
<select id="getCDEUsers" resultType="com.thinkgem.jeesite.modules.pay.entity.UserRateEntity"> <select id="getCDEUsers" resultType="com.thinkgem.jeesite.modules.pay.entity.UserRateEntity">
SELECT SELECT
yu.code AS userCode, yu.code AS userCode,
...@@ -69,6 +77,7 @@ ...@@ -69,6 +77,7 @@
pay_no, pay_no,
pay_code, pay_code,
pay_channel, pay_channel,
pay_method,
pay_status, pay_status,
amount, amount,
subject, subject,
...@@ -95,9 +104,16 @@ ...@@ -95,9 +104,16 @@
card_code card_code
FROM youka_orders FROM youka_orders
WHERE pay_status = 1 WHERE pay_status = 1
AND create_date &lt;= #{create} <if test="endTime != null and endTime != ''">
AND create_date &lt;= #{endTime}
</if>
<if test="startTime != null and startTime != ''">
AND create_date >= #{startTime}
</if>
AND del_flag = 0 AND del_flag = 0
</select> </select>
<select id="getBenefitSum" resultType="com.thinkgem.jeesite.modules.pay.entity.BenefitEntity"> <select id="getBenefitSum" resultType="com.thinkgem.jeesite.modules.pay.entity.BenefitEntity">
SELECT SELECT
SUM(amount) AS amount SUM(amount) AS amount
......
...@@ -286,6 +286,47 @@ ...@@ -286,6 +286,47 @@
LIMIT 1 LIMIT 1
</select> </select>
<select id="getCardInfoSwpaccid" resultType="com.thinkgem.jeesite.modules.user.entity.CardEntity">
SELECT
yc.id,
yc.code,
yc.user_code AS userCode,
yc.card_type AS cardType,
yc.card_no AS cardNo,
yc.card_mobile AS cardMobile,
yc.belong_bank AS belongBank,
yb.bank_name AS bankName,
yb.bank_short AS bankShort,
yb.support_pay_channel AS supportPayChannel,
yc.card_bank AS cardBank,
yc.card_place AS cardPlace,
yc.is_debit AS isDebit,
yc.sub_merchant_id AS subMerchantId,
yc.card_src AS cardSrc,
yc.type,
yc.status,
yc.province,
yc.city,
yc.create_date AS created,
yc.create_by AS createdUser,
yc.update_date AS modified,
yc.update_by AS modifiedUser,
yc.del_flag AS delFlag,
ycs.swpaccid
FROM
youka_cards yc
LEFT JOIN youka_bank yb ON yc.belong_bank = yb.bank_code
LEFT JOIN youka_card_swpaccid ON ycs.card_code = yc.code
WHERE
yc.user_code = #{subMerchantCode}
AND yc.code = #{cardCode}
AND yc.del_flag = '0'
AND ycs.pay_method = #{payMethod}
AND ycs.pay_channel = #{payChannel}
LIMIT 1
</select>
<update id="removeCards"> <update id="removeCards">
UPDATE UPDATE
youka_cards youka_cards
...@@ -425,6 +466,7 @@ ...@@ -425,6 +466,7 @@
yr.pay_method AS payMethod, yr.pay_method AS payMethod,
yr.pay_channel AS payChannel, yr.pay_channel AS payChannel,
yr.rate, yr.rate,
yr.rate_type,
yr.balance, yr.balance,
yr.single_limit AS singleLimit, yr.single_limit AS singleLimit,
yr.day_limit AS dayLimit, yr.day_limit AS dayLimit,
...@@ -696,4 +738,88 @@ ...@@ -696,4 +738,88 @@
yl.`level` = #{level} yl.`level` = #{level}
</select> </select>
<insert id="addUserSubmchid">
insert into youka_user_submchid(
user_code,
pay_channel,
submchid
) VALUES(
#{userCode},
#{payChannel},
#{submchid}
)
</insert>
<update id="updateUserSubmchid">
UPDATE youka_user_submchid SET submchid = #{submchid}
WHERE user_code = #{userCode}
AND pay_channel = #{payChannel}
</update>
<select id="getUserSubmchid" resultType="com.thinkgem.jeesite.modules.user.entity.UserSubMchId">
SELECT
user_code,
pay_channel,
submchid
FROM youka_user_submchid
WHERE user_code = #{userCode}
AND pay_channel = #{payChannel}
</select>
<select id="getDebitCardByUserCode" resultType="com.thinkgem.jeesite.modules.user.entity.CardEntity">
SELECT
yc.id,
yc.code,
yc.user_code AS userCode,
yc.card_type AS cardType,
yc.card_no AS cardNo,
yc.card_mobile AS cardMobile,
yc.belong_bank AS belongBank,
yc.card_bank AS cardBank,
yc.card_place AS cardPlace,
yc.is_debit AS isDebit,
yc.sub_merchant_id AS subMerchantId,
yc.card_src AS cardSrc,
yc.type,
yc.status,
yc.province,
yc.city,
yc.create_date AS created,
yc.create_by AS createdUser,
yc.update_date AS modified,
yc.update_by AS modifiedUser,
yc.del_flag AS delFlag
FROM
youka_cards yc
WHERE
yc.card_no = #{cardNo}
</select>
<insert id="addSwpaccid">
INSERT INTO youka_card_swpaccid(
card_code,
pay_method,
pay_channel,
swpaccid
)VALUES(
#{cardCode},
#{payMethod},
#{payChannel},
#{swpaccid}
)
</insert>
<select id="getSwpaccid" resultType="com.thinkgem.jeesite.modules.user.entity.CardSwpaccidEntity">
SELECT
card_code,
pay_method,
pay_channel,
swpaccid
FROM youka_card_swpaccid
WHEN card_code = #{cardCode}
AND pay_method = #{payMethod}
AND pay_channel = #{payChannel}
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -109,7 +109,22 @@ logo.bank.url=https://apimg.alipay.com/combo.png?d=cashier&t= ...@@ -109,7 +109,22 @@ logo.bank.url=https://apimg.alipay.com/combo.png?d=cashier&t=
## 快捷支付相关 ## 快捷支付相关
pay.y = 0 pay.y = 0
## 无积分
pay.settle.type = 177631 pay.settle.type = 177631
pay.merchant_id = 100532502195879
pay.merchant.key = 670993bf-dd22-4464-9d81-69595d36b794
pay.merchant.secret = 289ada73-27db-49e0-b2ad-3ae1613a665a
## 积分 对应通道C-HL3
pay.integral.merchant_id = 100532502191215
pay.integral.merchant.key = 781ed0d6-9657-404c-9f91-79eff2e0b782
pay.integral.merchant.secret = 0033fc8d-161b-4e97-87de-efed7a34bdea
## jfen 对应通道C-HL2
pay.jfen.merchant_id = 100532502198424
pay.jfen.merchant.key = 260a7539-6a2b-410d-aeec-9897ccee92a1
pay.jfen.merchant.secret = 9ad18861-24b3-4904-a2c3-c4401f6f60f3
## 短信相关 ## 短信相关
message.username = 710047 message.username = 710047
......
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