package com.nq.service.impl;
|
|
import cn.hutool.core.date.DateUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.google.gson.Gson;
|
import com.nq.common.CmcPayConfig;
|
import com.nq.common.ServerResponse;
|
import com.nq.dao.*;
|
import com.nq.enums.EStockType;
|
import com.nq.enums.EUserAssets;
|
import com.nq.pay.PayUtil;
|
import com.nq.pojo.*;
|
import com.nq.service.*;
|
import com.nq.utils.*;
|
import com.nq.utils.http.HttpClientUtil;
|
import com.nq.utils.pay.CmcPayOuterRequestUtil;
|
import com.nq.utils.pay.CmcPayTool;
|
import com.nq.utils.timeutil.DateTimeUtil;
|
import com.nq.utils.translate.GoogleTranslateUtil;
|
import com.nq.vo.pay.GuoPayVO;
|
|
import java.io.IOException;
|
import java.io.PrintWriter;
|
import java.io.UnsupportedEncodingException;
|
import java.math.BigDecimal;
|
import java.net.URLDecoder;
|
import java.nio.charset.StandardCharsets;
|
import java.security.Key;
|
import java.security.MessageDigest;
|
import java.security.NoSuchAlgorithmException;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.*;
|
import javax.annotation.Resource;
|
import javax.crypto.Cipher;
|
import javax.crypto.spec.IvParameterSpec;
|
import javax.crypto.spec.SecretKeySpec;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
|
import net.sf.json.JSON;
|
import net.sf.json.JSONObject;
|
import okhttp3.*;
|
import org.apache.commons.collections.map.HashedMap;
|
import org.apache.commons.collections.map.LinkedMap;
|
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.StringUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import static com.nq.utils.timeutil.DateTimeUtil.STANDARD_FORMAT;
|
|
|
@Service("iPayService")
|
public class PayServiceImpl implements IPayService {
|
private static final Logger log = LoggerFactory.getLogger(PayServiceImpl.class);
|
|
@Autowired
|
IUserService iUserService;
|
|
@Resource
|
UserRechargeMapper userRechargeMapper;
|
|
@Resource
|
UserMapper userMapper;
|
|
@Resource
|
SitePayMapper sitePayMapper;
|
|
|
@Resource
|
IUserService userService;
|
|
@Resource
|
IUserAssetsServices iUserAssetsServices;
|
|
@Resource
|
UserAssetsMapper userAssetsMapper;
|
|
@Resource
|
UserWithdrawMapper userWithdrawMapper;
|
|
@Autowired
|
ISiteInfoService siteInfoService;
|
|
@Autowired
|
PaymentRechargeService paymentRechargeService;
|
|
@Autowired
|
UserAssetsServices userAssetsServices;
|
|
private static final String KEY_ALGORITHM = "AES";
|
private static final String AES128CBC = "AES/CBC/PKCS5Padding";
|
|
public ServerResponse thirdPartyRecharge(HttpServletRequest request, String tradeAmount, Integer type) throws Exception {
|
// 支付1
|
String reqUrl = "https://api.watchglb.com/pay/web";
|
// 支付2
|
String uipReqRul = "https://v2.fastechservicepro.com/payin/unifiedorder";
|
// 支付3
|
String threeUrl = "https://www.copays.net/open-api/create-pay-order";
|
|
User user = userService.getCurrentRefreshUser(request);
|
if(ObjectUtils.isEmpty(user)){
|
GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil();
|
String lang = request.getHeader("lang");
|
return ServerResponse.createByErrorCodeMsg(401,googleTranslateUtil.translate("请登录",lang ));
|
}
|
|
if(type == 0){//支付1
|
return getPaymentOne(tradeAmount, reqUrl,user,request);
|
}else if(type == 2){//支付2
|
return getPaymentTwo(tradeAmount, uipReqRul, user,request);
|
} else if(type == 3){//支付2
|
return getPaymentThree(tradeAmount, threeUrl, user,request);
|
}else if(type == 1){
|
return getPaymentZero(tradeAmount, uipReqRul, user,request);
|
}
|
return ServerResponse.createByErrorMsg("获取支付方式失败",request);
|
}
|
|
private ServerResponse getPaymentZero(String tradeAmount, String uipReqRul, User user, HttpServletRequest request) throws Exception {
|
//int
|
String url = "https://gateway.kings-pays.com/gateway/payment/init";//正式地址
|
String merchantKey = "qqaC1DH/LeR9iPvm";//商户key 需替换
|
String aesKey = "ge6vK40fHNZPFJ4p";//商户aesKey 需替换
|
String aesIv = "6gJoHTEE1i2O3ovE";//商户aesIv 需替换
|
//请求参数
|
JSONObject dataObj = new JSONObject();
|
// 代收请求
|
dataObj.put("amount",tradeAmount);//需替换
|
dataObj.put("customerName",user.getPhone());//需替换
|
dataObj.put("customerEmail","123456@qq.com");//需替换
|
dataObj.put("customerPhone",user.getPhone());//需替换
|
dataObj.put("merchantOrderNo",generatePayOrderId());//自定义订单号
|
dataObj.put("notifyUrl", "https://api.durocaspitall.com/user/rechargeCallbackZero.do");//回调通知地址
|
JSONObject requestObj = new JSONObject();
|
// 加密数据
|
byte[] encryptedData = encrypt(dataObj.toString(), aesKey, aesIv);
|
String base64EncodedData = Base64.getEncoder().encodeToString(encryptedData);
|
requestObj.put("data", base64EncodedData);
|
//消息头
|
Headers headers = new Headers.Builder().add("merchant_key", merchantKey).build();//merchant_key需替换
|
//请求
|
String resp = doPost(url, requestObj.toString(), headers);
|
Gson gson = new Gson();
|
PaymentResponseZero paymentResponse = gson.fromJson(resp, PaymentResponseZero.class);
|
if(paymentResponse.getCode() != 0 && !paymentResponse.getMsg().equals("success")){
|
log.error("默认充值下单失败:"+resp);
|
return ServerResponse.createByErrorMsg("获取默认充值链接失败",request);
|
}
|
|
PaymentRecharge paymentRecharge = new PaymentRecharge();
|
paymentRecharge.setUserId(user.getId());
|
paymentRecharge.setOrderNo(dataObj.getString("merchantOrderNo"));
|
paymentRecharge.setMchOrderNo(paymentResponse.getData().getOrderNo());
|
paymentRecharge.setAmount(new BigDecimal(tradeAmount));
|
paymentRecharge.setStatus(1);
|
paymentRecharge.setPaymentTime(new Date());
|
paymentRecharge.setCreatedAt(new Date());
|
paymentRecharge.setNotifyUrl(getOrderTime());
|
paymentRecharge.setPayInfo(paymentResponse.toString());
|
paymentRechargeService.save(paymentRecharge);
|
|
UserRecharge userRecharge = new UserRecharge();
|
userRecharge.setUserId(user.getId());
|
userRecharge.setNickName(user.getRealName());
|
userRecharge.setAgentId(user.getAgentId());
|
userRecharge.setOrderSn(dataObj.getString("merchantOrderNo"));
|
userRecharge.setPayChannel("Payment 1");
|
userRecharge.setPayAmt(new BigDecimal(tradeAmount));
|
userRecharge.setAddTime(new Date());
|
userRecharge.setPayTime(new Date());
|
userRecharge.setOrderStatus(Integer.valueOf(0));
|
userRecharge.setPayId(1);
|
userRechargeMapper.insert(userRecharge);
|
return ServerResponse.createBySuccess(paymentResponse.getData().getPaymentLinkUrl());
|
}
|
|
public static String doPost(String url, String data, Headers headers) throws IOException {
|
OkHttpClient customClient = new OkHttpClient();
|
Request request = new Request.Builder()
|
.url(url)
|
.headers(headers)
|
.post(RequestBody.create(MediaType.parse("application/json;charset=UTF-8"), data))
|
.build();
|
Response response = customClient.newCall(request).execute();
|
String resp = response.body().string();
|
return resp;
|
}
|
|
|
public static byte[] encrypt(String data, String key, String iv) throws Exception {
|
return encrypt(data.getBytes(StandardCharsets.UTF_8), key.getBytes(StandardCharsets.UTF_8), iv.getBytes(StandardCharsets.UTF_8));
|
}
|
|
/**
|
* 加密
|
*
|
* @param data 待加密数据
|
* @param key 密钥
|
* @return byte[] 加密数据
|
* @throws Exception
|
*/
|
public static byte[] encrypt(byte[] data, byte[] key, byte[] iv) throws Exception {
|
Key k = new SecretKeySpec(key, KEY_ALGORITHM);
|
Cipher cipher = Cipher.getInstance(AES128CBC);
|
final IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
|
cipher.init(Cipher.ENCRYPT_MODE, k, ivParameterSpec);
|
return cipher.doFinal(data);
|
}
|
|
private ServerResponse getPaymentThree(String tradeAmount, String uipReqRul, User user, HttpServletRequest request) throws Exception {
|
|
// 配置参数(建议放到配置文件中)
|
String appId = "your_app_id_here"; // 从商户后台获取
|
String key = "your_key_here"; // 商户密钥
|
String payChannel = "INDIA_NATIVE"; // 支付通道,根据实际情况选择
|
|
// 生成商户订单号
|
String merchantOrderId = generatePayOrderId();
|
|
// 处理金额,保留两位小数
|
BigDecimal amount = new BigDecimal(tradeAmount);
|
amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
// 构建请求参数
|
Map<String, String> params = new HashMap<>();
|
params.put("app_id", appId);
|
params.put("merchant_order_id", merchantOrderId);
|
params.put("amount", amount.toString());
|
params.put("pay_channel", payChannel);
|
params.put("notify_url", "https://api.durocaspitall.com/user/rechargeCallbackTwo.do"); // 异步通知地址
|
params.put("page_return_url", "https://yourdomain.com/pay/return"); // 前端返回地址
|
|
// 可选参数
|
if (user != null) {
|
String customerName = UserNameUtil.formatCustomerName(user.getNickName());
|
if (StringUtils.isNotEmpty(customerName)) {
|
params.put("customer_name", customerName);
|
}
|
if (StringUtils.isNotEmpty(user.getPhone())) {
|
params.put("customer_phone", user.getPhone());
|
}
|
params.put("customer_email", "test@gmail.com"); // 根据实际情况获取用户邮箱
|
}
|
|
// 生成签名(注意:签名生成时不需要包含sign参数本身)
|
String sign = PaymentSignUtil.generateSign(params, key);
|
params.put("sign", sign);
|
|
log.info("支付请求参数:{}", params);
|
log.info("生成的签名:{}", sign);
|
|
// 发送请求
|
String result = HttpClientUtil.doPost(uipReqRul, params, "utf-8");
|
log.info("支付返回参数:{}", result);
|
|
// 解析响应
|
ObjectMapper objectMapper = new ObjectMapper();
|
PaymentApiResponse response = objectMapper.readValue(result, PaymentApiResponse.class);
|
|
// 检查响应
|
if (!Integer.valueOf(200).equals(response.getCode())) {
|
log.error("支付下单失败,返回码:{},消息:{},请求参数:{}",
|
response.getCode(), response.getMessage(), params);
|
return ServerResponse.createByErrorMsg("获取支付链接失败:" + response.getMessage(), request);
|
}
|
|
// 可选:验证返回签名
|
PaymentApiResponse.PaymentData responseData = response.getData();
|
Map<String, String> responseSignParams = new HashMap<>();
|
responseSignParams.put("merchant_id", responseData.getMerchantId());
|
responseSignParams.put("app_id", responseData.getAppId());
|
responseSignParams.put("system_order_id", responseData.getSystemOrderId());
|
responseSignParams.put("merchant_order_id", responseData.getMerchantOrderId());
|
responseSignParams.put("pay_url", responseData.getPayUrl());
|
|
boolean signValid = PaymentSignUtil.verifySign(responseSignParams, key, responseData.getSign());
|
if (!signValid) {
|
log.warn("返回签名验证失败,可能存在安全风险");
|
}
|
|
// 保存支付记录
|
PaymentRecharge paymentRecharge = new PaymentRecharge();
|
paymentRecharge.setUserId(user.getId());
|
paymentRecharge.setOrderNo(merchantOrderId); // 商户订单号
|
paymentRecharge.setMchOrderNo(responseData.getSystemOrderId()); // 平台订单号
|
paymentRecharge.setAmount(amount);
|
paymentRecharge.setStatus(1); // 1:已获取
|
paymentRecharge.setPaymentTime(new Date());
|
paymentRecharge.setCreatedAt(new Date());
|
paymentRecharge.setNotifyUrl(params.get("notify_url"));
|
paymentRecharge.setPayInfo(result);
|
paymentRechargeService.save(paymentRecharge);
|
|
// 保存用户充值记录
|
UserRecharge userRecharge = new UserRecharge();
|
userRecharge.setUserId(user.getId());
|
userRecharge.setNickName(user.getRealName());
|
userRecharge.setAgentId(user.getAgentId());
|
userRecharge.setOrderSn(merchantOrderId);
|
userRecharge.setPayChannel(payChannel); // 使用实际的支付通道
|
userRecharge.setPayAmt(amount);
|
userRecharge.setAddTime(new Date());
|
userRecharge.setPayTime(new Date());
|
userRecharge.setOrderStatus(0); // 审核中
|
userRecharge.setPayId(3); // 支付通道ID,根据实际情况设置
|
userRechargeMapper.insert(userRecharge);
|
|
// 返回支付URL
|
return ServerResponse.createBySuccess(responseData.getPayUrl());
|
}
|
|
//支付2
|
private ServerResponse getPaymentTwo(String tradeAmount, String uipReqRul, User user, HttpServletRequest request) throws UnsupportedEncodingException, NoSuchAlgorithmException, JsonProcessingException {
|
// 示例参数
|
Map<String, String> params = new HashMap<>();
|
params.put("merchantid", "T805673557385213"); // 商户号
|
params.put("out_trade_no", generatePayOrderId()); // 商户订单号
|
// 转换为 BigDecimal
|
BigDecimal amount = new BigDecimal(tradeAmount);
|
|
// 保留两位小数,四舍五入
|
amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
|
params.put("total_fee", String.valueOf(amount)); // 交易金额(保留两位小数)
|
params.put("notify_url", "https://api.durocaspitall.com/user/rechargeCallbackTwo.do"); // 异步通知地址
|
params.put("reply_type", "URL"); // 执行方式
|
params.put("timestamp", String.valueOf(System.currentTimeMillis())); // 时间戳
|
params.put("customer_name", StringUtils.isEmpty(UserNameUtil.formatCustomerName(user.getNickName())) ? "IsNotSet" : UserNameUtil.formatCustomerName(user.getNickName())); // 客户姓名
|
params.put("customer_mobile", user.getPhone()); // 客户手机号
|
params.put("customer_email", "test@gmail.com"); // 客户手机号
|
// 生成签名
|
String sign = SignatureGeneratorUtil.generateSign(params,"0cfc8e1a446a1e5214b4032f2d6007e2");
|
params.put("sign", sign); // 客户邮箱
|
// 打印生成的签名
|
System.out.println("Generated Sign: " + sign);
|
log.info("-------支付2-----:"+params.toString());
|
String result = HttpClientUtil.doPost(uipReqRul, params, "utf-8");
|
log.info("-------支付2返回参数-----"+result.toString());
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
ApiResponse payResponse = objectMapper.readValue(result, ApiResponse.class);
|
if(payResponse.getCode() != 0 && !payResponse.getMessage().equals("success")){
|
log.error("充值2下单失败:"+params);
|
return ServerResponse.createByErrorMsg("获取充值2链接失败",request);
|
}
|
|
PaymentRecharge paymentRecharge = new PaymentRecharge();
|
paymentRecharge.setUserId(user.getId());
|
paymentRecharge.setOrderNo(params.get("out_trade_no"));
|
paymentRecharge.setMchOrderNo(payResponse.getData().getOrder_number());
|
paymentRecharge.setAmount(new BigDecimal(payResponse.getData().getReal_fee()));
|
paymentRecharge.setStatus(1);
|
paymentRecharge.setPaymentTime(new Date());
|
paymentRecharge.setCreatedAt(new Date());
|
paymentRecharge.setNotifyUrl(getOrderTime());
|
paymentRecharge.setPayInfo(payResponse.toString());
|
paymentRechargeService.save(paymentRecharge);
|
|
UserRecharge userRecharge = new UserRecharge();
|
userRecharge.setUserId(user.getId());
|
userRecharge.setNickName(user.getRealName());
|
userRecharge.setAgentId(user.getAgentId());
|
userRecharge.setOrderSn(params.get("out_trade_no"));
|
userRecharge.setPayChannel("Payment 1");
|
userRecharge.setPayAmt(amount);
|
userRecharge.setAddTime(new Date());
|
userRecharge.setPayTime(new Date());
|
userRecharge.setOrderStatus(Integer.valueOf(0));
|
userRecharge.setPayId(1);
|
userRechargeMapper.insert(userRecharge);
|
return ServerResponse.createBySuccess(payResponse.getData().getUrl());
|
}
|
|
//支付1
|
private ServerResponse getPaymentOne(String tradeAmount, String reqUrl, User user, HttpServletRequest request) throws JsonProcessingException {
|
Map<String, String> params = new TreeMap<String, String>();
|
//版本号 需同步返回JSON 必填,固定值 1.0
|
params.put("version", "1.0");
|
//商品名称
|
// params.put("goods_name", "用户:"+user.getId()+",充值");
|
params.put("goods_name", "用户充值");
|
//商户号 平台分配唯一
|
params.put("mch_id", "100789033");
|
//商家订单号 保证每笔订单唯一
|
params.put("mch_order_no", generatePayOrderId());
|
//异步通知地址 不超过 200 字节,支付成功后发起,不能携带参数
|
params.put("notify_url", "https://api.durocaspitall.com/user/rechargeCallback.do");
|
// 订单时间 时间格式yyyy-MM-dd HH:mm:ss
|
params.put("order_date", getOrderTime());
|
//支付类型 请查阅商户后台通道编码
|
params.put("pay_type", "101");
|
//交易金额 以元为单位
|
params.put("trade_amount", tradeAmount);
|
|
//商户秘钥必填
|
String merchant_key = "6ef36aa4d88a47a9a177c33c7199fff6";
|
|
String signInfo = SignUtil.sortData(params);
|
// 签名 signInfo签名参数排序, merchant_key商户私钥
|
String sign = SignAPI.sign(signInfo, merchant_key);
|
params.put("sign", sign);
|
//固定值 MD5,不参与签名
|
params.put("sign_type", "MD5");
|
|
System.out.println("请求参数:" + params.toString());
|
String result = HttpClientUtil.doPost(reqUrl, params, "utf-8");
|
|
System.out.println("签名参数排序:" + signInfo.length() + " --> " + signInfo);
|
System.out.println("sign值:" + sign.length() + " --> " + sign);
|
|
System.out.println("result值:" + result);
|
|
// 创建 ObjectMapper 实例
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
// 将 JSON 字符串转换为实体类对象
|
PaymentResponse payResponse = objectMapper.readValue(result, PaymentResponse.class);
|
if(payResponse.getRespCode().equals("FAIL")){
|
log.error("充值下单失败:"+result);
|
return ServerResponse.createByErrorMsg("获取充值链接失败",request);
|
}
|
PaymentRecharge paymentRecharge = new PaymentRecharge();
|
paymentRecharge.setUserId(user.getId());
|
paymentRecharge.setOrderNo(payResponse.getOrderNo());
|
paymentRecharge.setMchOrderNo(payResponse.getMchOrderNo());
|
paymentRecharge.setAmount(new BigDecimal(payResponse.getOriAmount()));
|
paymentRecharge.setStatus(1);
|
paymentRecharge.setPaymentTime(DateUtil.parse(payResponse.getOrderDate(),"yyyy-MM-dd HH:mm:ss"));
|
paymentRecharge.setCreatedAt(new Date());
|
paymentRecharge.setNotifyUrl(payResponse.getPayInfo());
|
paymentRecharge.setPayInfo(payResponse.toString());
|
paymentRechargeService.save(paymentRecharge);
|
return ServerResponse.createBySuccess(payResponse.getPayInfo());
|
}
|
|
public String generatePayOrderId() {
|
// 获取当前时间戳(毫秒)
|
long timestamp = System.currentTimeMillis();
|
|
// 生成一个随机的UUID并截取前8位
|
String randomUUID = UUID.randomUUID().toString().replace("-", "").substring(0, 8);
|
|
// 将时间戳和随机UUID结合生成订单号
|
return timestamp + randomUUID;
|
}
|
|
public static String getOrderTime() {
|
// 获取当前时间
|
LocalDateTime now = LocalDateTime.now();
|
|
// 定义输出格式
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
// 格式化当前时间
|
return now.format(formatter);
|
}
|
|
|
public ServerResponse juhe1(String payType, String payAmt, HttpServletRequest request) {
|
if (StringUtils.isBlank(payType) || StringUtils.isBlank(payAmt)) {
|
return ServerResponse.createByErrorMsg("参数不能为空");
|
}
|
BigDecimal payAmtBig = new BigDecimal(payAmt);
|
if ((new BigDecimal("0")).compareTo(payAmtBig) != -1) {
|
return ServerResponse.createByErrorMsg("支付金额必须大于0");
|
}
|
|
User user = this.iUserService.getCurrentRefreshUser(request);
|
if (user == null){
|
return ServerResponse.createBySuccessMsg("請先登錄");
|
}
|
|
UserRecharge userRecharge = new UserRecharge();
|
|
userRecharge.setUserId(user.getId());
|
userRecharge.setNickName(user.getRealName());
|
userRecharge.setAgentId(user.getAgentId());
|
|
String ordersn = KeyUtils.getRechargeOrderSn();
|
userRecharge.setOrderSn(ordersn);
|
|
String saveChannel = "";
|
if ("902".equals(payType)) {
|
saveChannel = "微信-线上";
|
} else {
|
saveChannel = "支付宝-线上";
|
}
|
userRecharge.setPayChannel(saveChannel);
|
userRecharge.setPayAmt(new BigDecimal(payAmt));
|
userRecharge.setOrderStatus(Integer.valueOf(0));
|
userRecharge.setAddTime(new Date());
|
|
int insertCount = this.userRechargeMapper.insert(userRecharge);
|
if (insertCount > 0) {
|
log.info("线上支付,创建支付订单成功!");
|
} else {
|
log.info("线上支付,创建支付订单失败!");
|
}
|
|
|
String pay_bankcode = "";
|
if ("902".equals(payType)) {
|
pay_bankcode = payType;
|
} else if ("907".equals(payType)) {
|
pay_bankcode = payType;
|
} else {
|
|
pay_bankcode = "903";
|
}
|
String AuthorizationURL = "http://pay.ksunpay.com:8080/Pay_Index.html";
|
String merchantId = "10098";
|
String keyValue = "vd7omkkexkt7fvl6wm2jl9yan3g79y6i";
|
|
String pay_memberid = merchantId;
|
String pay_orderid = ordersn;
|
String pay_applydate = generateTime();
|
|
|
String pay_notifyurl = PropertiesUtil.getProperty("juhe1.pay.notifyurl");
|
|
String pay_callbackurl = PropertiesUtil.getProperty("juhe1.pay.callbackurl");
|
|
String pay_amount = payAmt;
|
String pay_attach = "";
|
String pay_productname = "100元话费充值";
|
String pay_productnum = "";
|
String pay_productdesc = "";
|
String pay_producturl = "";
|
String stringSignTemp = "pay_amount=" + pay_amount + "&pay_applydate=" + pay_applydate + "&pay_bankcode=" + pay_bankcode + "&pay_callbackurl=" + pay_callbackurl + "&pay_memberid=" + pay_memberid + "&pay_notifyurl=" + pay_notifyurl + "&pay_orderid=" + pay_orderid + "&key=" + keyValue + "";
|
|
|
String pay_md5sign = "";
|
try {
|
pay_md5sign = md5(stringSignTemp);
|
} catch (Exception e) {
|
log.error("加密md5出错 e= {}", e);
|
}
|
|
GuoPayVO guoPayVO = new GuoPayVO();
|
guoPayVO.setPostUrl(AuthorizationURL);
|
guoPayVO.setPay_memberid(merchantId);
|
guoPayVO.setPay_orderid(pay_orderid);
|
guoPayVO.setPay_applydate(pay_applydate);
|
guoPayVO.setPay_bankcode(pay_bankcode);
|
guoPayVO.setPay_notifyurl(pay_notifyurl);
|
guoPayVO.setPay_callbackurl(pay_callbackurl);
|
guoPayVO.setPay_amount(pay_amount);
|
guoPayVO.setPay_productname(pay_productname);
|
guoPayVO.setPay_productnum(pay_productnum);
|
guoPayVO.setPay_productdesc(pay_productdesc);
|
guoPayVO.setPay_producturl(pay_producturl);
|
guoPayVO.setPay_md5sign(pay_md5sign);
|
|
return ServerResponse.createBySuccess(guoPayVO);
|
}
|
|
|
|
|
public ServerResponse juhe1Notify(HttpServletRequest request) {
|
String memberid = request.getParameter("memberid");
|
String orderid = request.getParameter("orderid");
|
String amount = request.getParameter("amount");
|
String datetime = request.getParameter("datetime");
|
String returncode = request.getParameter("returncode");
|
String transaction_id = request.getParameter("transaction_id");
|
String attach = request.getParameter("attach");
|
String sign = request.getParameter("sign");
|
|
log.info("支付通知的 orderid = {}", orderid);
|
log.info("支付通知的 transaction_id = {}", transaction_id);
|
log.info("支付通知的 amount = {}", amount);
|
log.info("支付通知的 returncode = {}", returncode);
|
|
String keyValue = "vd7omkkexkt7fvl6wm2jl9yan3g79y6i";
|
String SignTemp = "amount=" + amount + "&datetime=" + datetime + "&memberid=" + memberid + "&orderid=" + orderid + "&returncode=" + returncode + "&transaction_id=" + transaction_id + "&key=" + keyValue + "";
|
|
|
log.info("signtemp : {}", SignTemp);
|
|
|
String md5sign = "";
|
try {
|
md5sign = md5(SignTemp);
|
} catch (Exception e) {
|
log.info("线上支付后台通知 生成md5sign出错,e = {}", e);
|
}
|
log.info("支付通知的sign = {}", sign);
|
log.info("自己加密的sign = {}", md5sign);
|
|
|
ServerResponse serverResponse = ServerResponse.createByError();
|
if (sign.equals(md5sign)) {
|
log.info("后台通知校验签名 通过");
|
if (returncode.equals("00")) {
|
|
log.info("后台通知成功,开始修改订单 {}", orderid);
|
serverResponse = doSuccess(orderid, amount);
|
} else {
|
log.error("后台通知 returncode 不为 00 , 支付不成功");
|
}
|
} else {
|
log.info("后台通知校验签名 不通过");
|
}
|
|
return serverResponse;
|
}
|
|
|
@Transactional
|
public ServerResponse flyPay(Integer payType, String payAmt, String currency, HttpServletRequest request) {
|
User user = iUserService.getCurrentUser(request);
|
SitePay sitePay = sitePayMapper.selectById(payType);
|
UserRecharge userRecharge = new UserRecharge();
|
userRecharge.setUserId(user.getId());
|
userRecharge.setNickName(user.getRealName());
|
userRecharge.setAgentId(user.getAgentId());
|
String ordersn = KeyUtils.getRechargeOrderSn();
|
userRecharge.setOrderSn(ordersn);
|
userRecharge.setPayChannel(sitePay.getChannelName());
|
userRecharge.setPayAmt(new BigDecimal(payAmt));
|
userRecharge.setOrderStatus(Integer.valueOf(0));
|
userRecharge.setAddTime(new Date());
|
userRecharge.setPayId(payType);
|
userRecharge.setImg(currency);
|
userRechargeMapper.insert(userRecharge);
|
return ServerResponse.createBySuccess( ((SiteInfo)siteInfoService.getInfo(request).getData()).getOnlineService());
|
}
|
|
|
/**
|
* 充值方式一
|
* */
|
public ServerResponse rechargMethodGe(String ordersn,String payAmt){
|
Map<String,String> map = new HashedMap();
|
map.put("version","1.0");
|
map.put("mch_id",PayUtil.MCH_ID_TOP1);
|
map.put("notify_url","http://www.jumptalk.net:8091/api/pay/flyNotify.do");
|
map.put("mch_order_no",ordersn);
|
map.put("pay_type","122");
|
map.put("trade_amount",payAmt);
|
map.put("order_date", DateTimeUtil.getCurrentDate(STANDARD_FORMAT));
|
map.put("goods_name","充值");
|
String signStr = SignUtil.sortData(map);
|
map.put("sign_type","MD5");
|
try {
|
map.put("sign", SignAPI.sign(signStr,PayUtil.DOWN_TOKEN_TPO1));
|
String reponse = HttpClientUtil.doPost(PayUtil.PAY_DOWN_ORDER_TOP1, map, "utf-8");
|
log.info("下单支付返回数据 TOP1 {}" ,reponse);
|
com.alibaba.fastjson.JSONObject object = com.alibaba.fastjson.JSONObject.parseObject(reponse);
|
if(object.getString("respCode").equals("SUCCESS")){
|
return ServerResponse.createBySuccess(object.getString("payInfo"));
|
}else {
|
return ServerResponse.createBySuccessMsg("Contact customer service");
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
return ServerResponse.createByError();
|
}
|
|
/**
|
* 充值方式二 富达科技
|
* */
|
public ServerResponse rechargMethodTop4(String ordersn,String payAmt){
|
Map<String,String> map = new HashedMap();
|
map.put("merchant","3l001038");
|
map.put("payCode","101");
|
map.put("amount",payAmt);
|
map.put("orderId",ordersn);
|
map.put("notifyUrl","122");
|
String signStr = SignUtil.sortData(map);
|
try {
|
log.info("签名数据 TOP2 {}" ,signStr);
|
String signatureString = SignAPI.sign(signStr,PayUtil.DOWN_TOKEN_TPO4).toLowerCase();
|
map.put("sign",signatureString);
|
log.info("签完名数据 TOP2 {}" ,signatureString);
|
String reponse = HttpClientUtil.doPost(PayUtil.PAY_DOWN_ORDER_TOP4, map, "utf-8");
|
log.info("下单支付返回数据 TOP2 {}" ,reponse);
|
com.alibaba.fastjson.JSONObject object = com.alibaba.fastjson.JSONObject.parseObject(reponse);
|
if(object.getString("respCode").equals("SUCCESS")){
|
return ServerResponse.createBySuccess(object.getString("payInfo"));
|
}else {
|
return ServerResponse.createBySuccessMsg("Contact customer service");
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
return ServerResponse.createByError();
|
}
|
|
|
/**
|
* 充值方式3 wow
|
* */
|
public ServerResponse rechargMethodWow(String ordersn,String payAmt){
|
Map<String,String> map = new HashedMap();
|
map.put("version","1.0");
|
map.put("mch_id",PayUtil.MCH_ID_TOP2);
|
|
// map.put("mch_id","222887002");
|
map.put("notify_url","http://www.jumptalk.net:8091/api/pay/flyNotify2.do");
|
map.put("mch_order_no",ordersn);
|
map.put("pay_type","101");
|
// map.put("pay_type","105");
|
map.put("trade_amount",payAmt);
|
map.put("order_date",DateTimeUtil.getCurrentDate(STANDARD_FORMAT));
|
map.put("goods_name","充值");
|
String signStr = SignUtil.sortData(map);
|
map.put("sign_type","MD5");
|
try {
|
|
map.put("sign", SignAPI.sign(signStr,PayUtil.DOWN_TOKEN_TPO2));
|
log.info("下单数据 {}",new Gson().toJson(map));
|
String reponse = HttpClientUtil.doPost(PayUtil.PAY_DOWN_ORDER_TOP2, map, "utf-8");
|
log.info("下单支付返回数据 {}" ,reponse);
|
com.alibaba.fastjson.JSONObject object = com.alibaba.fastjson.JSONObject.parseObject(reponse);
|
if(object.getString("respCode").equals("SUCCESS")){
|
return ServerResponse.createBySuccess(object.getString("payInfo"));
|
}else {
|
return ServerResponse.createBySuccessMsg("Contact customer service");
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
return ServerResponse.createByError();
|
}
|
|
|
|
|
/**
|
* 充值方式一
|
* */
|
public ServerResponse rechargMethodDz(String ordersn,String payAmt){
|
Map<String,String> map = new HashedMap();
|
map.put("version","1.0");
|
// map.put("mch_id","");
|
map.put("mch_id",PayUtil.MCH_ID_TOP3);
|
map.put("notify_url","http://www.jumptalk.net:8091/api/pay/flyNotify3.do");
|
map.put("mch_order_no",ordersn);
|
map.put("pay_type","121");
|
map.put("trade_amount",payAmt);
|
map.put("order_date",DateTimeUtil.getCurrentDate(STANDARD_FORMAT));
|
map.put("goods_name","充值");
|
String signStr = SignUtil.sortData(map);
|
map.put("sign_type","MD5");
|
try {
|
map.put("sign", SignAPI.sign(signStr,PayUtil.DOWN_TOKEN_TPO3));
|
log.info("下单数据 {}",new Gson().toJson(map));
|
String reponse = HttpClientUtil.doPost(PayUtil.PAY_DOWN_ORDER_TOP3, map, "utf-8");
|
log.info("下单支付返回数据 {}" ,reponse);
|
com.alibaba.fastjson.JSONObject object = com.alibaba.fastjson.JSONObject.parseObject(reponse);
|
if(object.getString("respCode").equals("SUCCESS")){
|
return ServerResponse.createBySuccess(object.getString("payInfo"));
|
}else {
|
return ServerResponse.createBySuccessMsg("Contact customer service");
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
return ServerResponse.createByError();
|
}
|
|
|
|
|
|
|
public void inrEpayMethod(String orderNo){
|
Map<String,String> map = new HashedMap();
|
map.put("trade_no","1166");
|
map.put("app_id","188");
|
map.put("pay_code","2063");
|
map.put("price","10000");
|
map.put("order_no",orderNo);
|
map.put("pay_notice_url ","http://61.4.121.99:8091/api/pay/flyNotify.do");
|
|
// String sign = PayUtil.ascii(map, PayUtil.token, "&", false, "secret");
|
}
|
|
|
|
public ServerResponse flyNotify(HttpServletRequest request) throws IOException {
|
Map<String,String> map = SignUtil.convertRequestParamsToMap(request);
|
log.info("支付通知的 回调参数11111 {}", new Gson().toJson(map));
|
|
String tradeResult = map.get("tradeResult");
|
String mchId = map.get("mchId");
|
String mchOrderNo = map.get("mchOrderNo");
|
String oriAmount = map.get("oriAmount");
|
String amount = map.get("amount");
|
String orderDate = map.get("orderDate");
|
String orderNo = map.get("orderNo");
|
String sign = map.get("sign");
|
String signType = map.get("signType");
|
|
Map<String,String> params = new HashedMap();
|
params.put("tradeResult", tradeResult);
|
params.put("mchId", mchId);
|
params.put("mchOrderNo", mchOrderNo);
|
params.put("oriAmount", oriAmount);
|
params.put("amount", amount);
|
params.put("orderDate", orderDate);
|
params.put("orderNo", orderNo);
|
params.put("amount", amount);
|
String signStr = SignUtil.sortData(params);
|
String signInfo =signStr.toString();
|
boolean result = false;
|
if("MD5".equals(signType)){
|
result = SignAPI.validateSignByKey(signInfo, PayUtil.DOWN_TOKEN_TPO1, sign);
|
}
|
if(result){
|
if(tradeResult.equals("1")){
|
doSuccess(mchOrderNo,oriAmount);
|
}
|
System.out.println("验签结果result的值:" + result + " -->success");
|
return ServerResponse.createBySuccess();
|
}else{
|
System.out.println("验签结果result的值:" + result + " -->Signature Error");
|
return ServerResponse.createByError();
|
|
}
|
}
|
|
|
public ServerResponse flyNotify(HttpServletRequest request,String key) throws IOException {
|
Map<String,String> map = SignUtil.convertRequestParamsToMap(request);
|
log.info("支付通知的 回调参数11111 {}", new Gson().toJson(map));
|
|
String tradeResult = map.get("tradeResult");
|
String mchId = map.get("mchId");
|
String mchOrderNo = map.get("mchOrderNo");
|
String oriAmount = map.get("oriAmount");
|
String amount = map.get("amount");
|
String orderDate = map.get("orderDate");
|
String orderNo = map.get("orderNo");
|
String sign = map.get("sign");
|
String signType = map.get("signType");
|
|
Map<String,String> params = new HashedMap();
|
params.put("tradeResult", tradeResult);
|
params.put("mchId", mchId);
|
params.put("mchOrderNo", mchOrderNo);
|
params.put("oriAmount", oriAmount);
|
params.put("amount", amount);
|
params.put("orderDate", orderDate);
|
params.put("orderNo", orderNo);
|
params.put("amount", amount);
|
String signStr = SignUtil.sortData(params);
|
String signInfo =signStr.toString();
|
boolean result = false;
|
if("MD5".equals(signType)){
|
result = SignAPI.validateSignByKey(signInfo, key, sign);
|
}
|
if(result){
|
if(tradeResult.equals("1")){
|
doSuccess(mchOrderNo,oriAmount);
|
}
|
System.out.println("验签结果result的值:" + result + " -->success");
|
return ServerResponse.createBySuccess();
|
}else{
|
System.out.println("验签结果result的值:" + result + " -->Signature Error");
|
return ServerResponse.createByError();
|
|
}
|
}
|
|
|
public ServerResponse withdrawNotify(HttpServletRequest request,String key) throws IOException {
|
Map<String,String> map = SignUtil.convertRequestParamsToMap(request);
|
|
String tradeResult = map.get("tradeResult");
|
String merTransferId = map.get("merTransferId");
|
String merNo = map.get("merNo");
|
String tradeNo = map.get("tradeNo");
|
String transferAmount = map.get("transferAmount");
|
String sign = map.get("sign");
|
String signType =map.get("signType");
|
String applyDate = map.get("applyDate");
|
String version = map.get("version");
|
String respCode = map.get("respCode");
|
|
Map<String, String> signStr = new LinkedHashMap<String, String>();
|
signStr.put("tradeResult", tradeResult);
|
signStr.put("merTransferId", merTransferId);
|
signStr.put("merNo", merNo);
|
signStr.put("tradeNo", tradeNo);
|
signStr.put("transferAmount", transferAmount);
|
signStr.put("applyDate", applyDate);
|
signStr.put("version", version);
|
signStr.put("respCode", respCode);
|
|
String signInfo = SignUtil.sortData(signStr);
|
System.out.println(signInfo.length() + " -->" + signInfo);
|
System.out.println(sign.length() + " -->" + sign);
|
boolean result = false;
|
|
if ("MD5".equals(signType)) {
|
result = SignAPI.validateSignByKey(signInfo, key, sign);
|
}
|
if(result){
|
UserWithdraw userWithdraw = userWithdrawMapper.selectByPrimaryKey(Integer.parseInt(merTransferId));
|
if(userWithdraw != null){
|
if(tradeResult.equals("1")){
|
userWithdraw.setWithStatus(2);
|
userWithdrawMapper.updateByPrimaryKey(userWithdraw);
|
|
}
|
}
|
return ServerResponse.createBySuccess();
|
}
|
return ServerResponse.createByError();
|
}
|
|
@Override
|
public void rechargeCallback(PaymentResponse vo,HttpServletResponse response) throws IOException {
|
log.info("充值回调进来了:"+vo.toString());
|
synchronized (vo.getOrderNo()){
|
PrintWriter pw = response.getWriter();
|
|
PaymentRecharge paymentRecharge = paymentRechargeService.getOne(new LambdaQueryWrapper<>(PaymentRecharge.class)
|
.eq(PaymentRecharge::getOrderNo, vo.getOrderNo())
|
.eq(PaymentRecharge::getMchOrderNo, vo.getMchOrderNo())
|
.eq(PaymentRecharge::getStatus,1)
|
.last("limit 1")
|
);
|
|
if(!vo.getTradeResult().equals("1")){
|
paymentRecharge.setStatus(2);
|
paymentRecharge.setAmount(new BigDecimal(vo.getOriAmount()));
|
paymentRecharge.setPayInfo(vo.toString());
|
paymentRechargeService.updateById(paymentRecharge);
|
log.error("充值回调失败:"+vo.toString());
|
return;
|
}
|
|
if(ObjectUtils.isEmpty(paymentRecharge)){
|
log.info("未找到充值订单");
|
pw.print("error 未找到充值订单");
|
return;
|
}
|
UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<>(UserAssets.class)
|
.eq(UserAssets::getUserId, paymentRecharge.getUserId())
|
.eq(UserAssets::getAccectType, "IN")
|
);
|
ServerResponse serverResponse = iUserAssetsServices.updateUserAssets(userAssets.getId(), vo.getOriAmount().toString(), "2");
|
if(serverResponse.getStatus() == 0){
|
paymentRecharge.setStatus(2);
|
paymentRecharge.setAmount(new BigDecimal(vo.getOriAmount()));
|
paymentRecharge.setPayInfo(vo.toString());
|
paymentRechargeService.updateById(paymentRecharge);
|
}
|
log.info("充值回调----完成");
|
pw.print("success");
|
pw.flush();
|
pw.close();
|
}
|
}
|
|
|
private ServerResponse doSuccess(String orderId, String amount) {
|
UserRecharge userRecharge = this.userRechargeMapper.findUserRechargeByOrderSn(orderId);
|
if (userRecharge == null) {
|
return ServerResponse.createByErrorMsg("后台通知,查不到订单");
|
}
|
|
User user = this.userMapper.selectById(userRecharge.getUserId());
|
if (user == null) {
|
return ServerResponse.createByErrorMsg("后台通知,查不到用户");
|
}
|
|
|
// if (userRecharge.getPayAmt().compareTo(new BigDecimal(amount)) != 0) {
|
// return ServerResponse.createByErrorMsg("处理失败,后台通知金额和订单金额不一致");
|
// }
|
|
if(userRecharge.getOrderStatus() == 1){
|
return ServerResponse.createBySuccess();
|
}
|
userRecharge.setPayTime(new Date());
|
userRecharge.setOrderStatus(Integer.valueOf(1));
|
int updateCount = this.userRechargeMapper.updateByPrimaryKeySelective(userRecharge);
|
if (updateCount > 0) {
|
log.info("后台通知,修改订单状态成功");
|
int updateUserCount = this.userMapper.updateById(user);
|
if (updateUserCount > 0) {
|
return ServerResponse.createBySuccessMsg("后台通知 处理成功");
|
}
|
return ServerResponse.createByErrorMsg("后台通知 处理失败 修改用户资金不成功");
|
}
|
|
log.error("后台通知,修改订单状态失败");
|
return ServerResponse.createByErrorMsg("后台通知修改订单的状态失败");
|
}
|
|
|
public String generateOrderId() {
|
String keyup_prefix = (new SimpleDateFormat("yyyyMMddHHmmss")).format(new Date());
|
String keyup_append = String.valueOf((new Random()).nextInt(899999) + 100000);
|
return keyup_prefix + keyup_append;
|
}
|
|
|
public String generateTime() {
|
return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date());
|
}
|
|
|
public String md5(String str) throws NoSuchAlgorithmException {
|
try {
|
MessageDigest md = MessageDigest.getInstance("MD5");
|
md.update(str.getBytes());
|
byte[] byteDigest = md.digest();
|
|
|
StringBuffer buf = new StringBuffer("");
|
for (int offset = 0; offset < byteDigest.length; offset++) {
|
int i = byteDigest[offset];
|
if (i < 0)
|
i += 256;
|
if (i < 16)
|
buf.append("0");
|
buf.append(Integer.toHexString(i));
|
}
|
|
return buf.toString().toUpperCase();
|
|
} catch (NoSuchAlgorithmException e) {
|
e.printStackTrace();
|
return null;
|
}
|
}
|
|
|
public static void main(String[] args) {
|
BigDecimal a = new BigDecimal("0.011");
|
BigDecimal b = new BigDecimal("0.010");
|
System.out.println(a.compareTo(b));
|
}
|
|
|
@Override
|
public ServerResponse juhenewpay(String paramString1, String paramString2, HttpServletRequest request) throws Exception {
|
User user = iUserService.getCurrentRefreshUser(request);
|
if (user == null){
|
return ServerResponse.createBySuccessMsg("請先登錄");
|
}
|
String orderid = user.getId() + "_" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
|
String repson = CmcPayTool.submitOrder(paramString2, orderid, paramString1, request);
|
JSONObject json = JSONObject.fromObject(repson);
|
//JSONObject data = (JSONObject) json.get("data");
|
return ServerResponse.createBySuccess(json);
|
}
|
|
@Override
|
public ServerResponse juheh5pay(String paramString1, String paramString2, HttpServletRequest request) throws Exception {
|
User user = iUserService.getCurrentRefreshUser(request);
|
if (user == null){
|
return ServerResponse.createBySuccessMsg("請先登錄");
|
}
|
String orderid = user.getId() + "_" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
|
String repson = CmcPayTool.submitOrderH5(paramString2, orderid, paramString1);
|
JSONObject json = JSONObject.fromObject(repson);
|
return ServerResponse.createBySuccess(json);
|
}
|
|
@Override
|
public ServerResponse juhenewpayNotify(HttpServletRequest request) throws UnsupportedEncodingException {
|
LinkedMap map = new LinkedMap();
|
String out_trade_no = request.getParameter("out_trade_no");
|
String[] arr = out_trade_no.split("_");
|
map.put("amount", (String) request.getParameter("amount"));
|
map.put("appid", (String) request.getParameter("appid"));
|
map.put("currency_type", (String) request.getParameter("currency_type"));
|
map.put("goods_name", (String) request.getParameter("goods_name"));
|
map.put("out_trade_no", out_trade_no);
|
map.put("pay_id", (String) request.getParameter("pay_id"));
|
map.put("pay_no", (String) request.getParameter("pay_no"));
|
map.put("payment", (String) request.getParameter("payment"));
|
map.put("resp_code", (String) request.getParameter("resp_code"));
|
map.put("resp_desc", URLDecoder.decode((String) request.getParameter("resp_desc"), "UTF-8"));
|
map.put("sign_type", (String) request.getParameter("sign_type"));
|
map.put("tran_amount", (String) request.getParameter("tran_amount"));
|
map.put("version", (String) request.getParameter("version"));
|
String _sign = CmcPayOuterRequestUtil.getSign(map, CmcPayConfig.KEY);
|
if ("00".equals((String) request.getParameter("resp_code")) && _sign.equals((String) request.getParameter("sign"))) {
|
iUserService.updateUserAmt((Double) map.get("amount"), new Integer(arr[0]));
|
// response.getWriter().println("success");
|
} else {
|
// response.getWriter().println("error");
|
}
|
return null;
|
}
|
|
|
|
public static Map<String, String> convertRequestParamsToMap(HttpServletRequest request) {
|
Map<String, String> retMap = new HashMap<String, String>();
|
|
Set<Map.Entry<String, String[]>> entrySet = request.getParameterMap().entrySet();
|
|
for (Map.Entry<String, String[]> entry : entrySet) {
|
String name = entry.getKey();
|
String[] values = entry.getValue();
|
int valLen = values.length;
|
|
if (valLen == 1) {
|
retMap.put(name, values[0]);
|
} else if (valLen > 1) {
|
StringBuilder sb = new StringBuilder();
|
for (String val : values) {
|
sb.append(",").append(val);
|
}
|
retMap.put(name, sb.toString().substring(1));
|
} else {
|
retMap.put(name, "");
|
}
|
}
|
|
return retMap;
|
}
|
|
public void rechargeCallbackTwo(TransactionStatusVo vo, HttpServletResponse response) throws IOException {
|
|
log.info("充值回调进来了:"+vo.toString());
|
synchronized (vo.getOut_trade_no()){
|
PrintWriter pw = response.getWriter();
|
|
PaymentRecharge paymentRecharge = paymentRechargeService.getOne(new LambdaQueryWrapper<>(PaymentRecharge.class)
|
.eq(PaymentRecharge::getOrderNo,vo.getOut_trade_no())
|
.eq(PaymentRecharge::getStatus,1)
|
.last("limit 1")
|
);
|
if(ObjectUtils.isEmpty(paymentRecharge)){
|
log.info("未找到充值订单");
|
pw.print("error 未找到充值订单");
|
return;
|
}
|
UserRecharge userRecharge = userRechargeMapper.selectOne(new LambdaQueryWrapper<>(UserRecharge.class)
|
.eq(UserRecharge::getOrderSn, paymentRecharge.getOrderNo())
|
.eq(UserRecharge::getOrderStatus, 0).last(" limit 1"));
|
if(ObjectUtils.isEmpty(userRecharge)){
|
log.info("未找到充值记录订单");
|
pw.print("error 未找到充值订单");
|
return;
|
}
|
|
if(vo.getStatus().equals("payin_ing")){
|
log.error("充值2回调交易中:"+vo.toString());
|
return;
|
}else if(vo.getStatus().equals("payin_fail")){
|
paymentRecharge.setStatus(2);
|
paymentRecharge.setAmount(new BigDecimal(vo.getTotal_fee()));
|
paymentRecharge.setPayInfo(vo.toString());
|
paymentRechargeService.updateById(paymentRecharge);
|
userRecharge.setOrderStatus(2);
|
userRechargeMapper.updateById(userRecharge);
|
log.error("充值回调失败:"+vo.toString());
|
return;
|
}else if(!vo.getStatus().equals("payin_fail") && !vo.getStatus().equals("payin_ing") && !vo.getStatus().equals("payin_success")){
|
log.error("充值回调失败----未知状态:"+vo.toString());
|
return;
|
}
|
|
UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<>(UserAssets.class)
|
.eq(UserAssets::getUserId, paymentRecharge.getUserId())
|
.eq(UserAssets::getAccectType, "IN")
|
);
|
// ServerResponse serverResponse = iUserAssetsServices.updateUserAssets(userAssets.getId(), vo.getTotal_fee().toString(), "2");
|
userAssetsServices.availablebalanceChange(EStockType.IN.getCode(),
|
paymentRecharge.getUserId(), EUserAssets.TOP_UP,new BigDecimal(vo.getTotal_fee().toString()),"","");
|
|
paymentRecharge.setStatus(2);
|
paymentRecharge.setAmount(new BigDecimal(vo.getTotal_fee()));
|
paymentRecharge.setPayInfo(vo.toString());
|
paymentRechargeService.updateById(paymentRecharge);
|
|
userRecharge.setOrderStatus(1);
|
userRechargeMapper.updateById(userRecharge);
|
|
log.info("充值回调----完成");
|
pw.print("success");
|
pw.flush();
|
pw.close();
|
}
|
|
}
|
|
public void rechargeCallbackZero(PaymentNotifyResponse vo, HttpServletResponse response) throws IOException {
|
|
log.info("充值回调进来了:"+vo.toString());
|
synchronized (vo.getData().getOrderNo()){
|
PrintWriter pw = response.getWriter();
|
|
PaymentRecharge paymentRecharge = paymentRechargeService.getOne(new LambdaQueryWrapper<>(PaymentRecharge.class)
|
.eq(PaymentRecharge::getOrderNo,vo.getData().getMerchantOrderNo())
|
.eq(PaymentRecharge::getStatus,1)
|
.last("limit 1")
|
);
|
if(ObjectUtils.isEmpty(paymentRecharge)){
|
log.info("未找到充值订单");
|
pw.print("error 未找到充值订单");
|
return;
|
}
|
UserRecharge userRecharge = userRechargeMapper.selectOne(new LambdaQueryWrapper<>(UserRecharge.class)
|
.eq(UserRecharge::getOrderSn, paymentRecharge.getOrderNo())
|
.eq(UserRecharge::getOrderStatus, 0).last(" limit 1"));
|
if(ObjectUtils.isEmpty(userRecharge)){
|
log.info("未找到充值记录订单");
|
pw.print("error 未找到充值订单");
|
return;
|
}
|
|
if(vo.getData().getStatus().equals("PENDING")){
|
log.error("充值2回调交易中:"+vo.toString());
|
pw.print("{code: 200}");
|
pw.flush();
|
pw.close();
|
return;
|
}else if(vo.getData().getStatus().equals("FAILURE")){
|
paymentRecharge.setStatus(2);
|
paymentRecharge.setAmount(new BigDecimal(vo.getData().getAmount()));
|
paymentRecharge.setPayInfo(vo.toString());
|
paymentRechargeService.updateById(paymentRecharge);
|
userRecharge.setOrderStatus(2);
|
userRechargeMapper.updateById(userRecharge);
|
log.error("充值回调失败:"+vo.toString());
|
pw.print("{code: 200}");
|
pw.flush();
|
pw.close();
|
return;
|
}else if(vo.getData().getStatus().equals("REFUND")){
|
paymentRecharge.setStatus(2);
|
paymentRecharge.setAmount(new BigDecimal(vo.getData().getAmount()));
|
paymentRecharge.setPayInfo(vo.toString());
|
paymentRechargeService.updateById(paymentRecharge);
|
userRecharge.setOrderStatus(2);
|
userRecharge.setOrderDesc("REFUND");
|
userRechargeMapper.updateById(userRecharge);
|
log.error("充值回调失败(已退款):"+vo.toString());
|
pw.print("{code: 200}");
|
pw.flush();
|
pw.close();
|
return;
|
}else if(!vo.getData().getStatus().equals("PENDING") && !vo.getData().getStatus().equals("FAILURE") && !vo.getData().getStatus().equals("SUCCESS") && !vo.getData().getStatus().equals("REFUND")){
|
log.error("充值回调失败----未知状态:"+vo.toString());
|
pw.print("error 未找到充值订单");
|
return;
|
}
|
|
userAssetsServices.availablebalanceChange(EStockType.IN.getCode(),
|
paymentRecharge.getUserId(), EUserAssets.TOP_UP,new BigDecimal(vo.getData().getAmount().toString()),"","");
|
|
paymentRecharge.setStatus(2);
|
paymentRecharge.setAmount(new BigDecimal(vo.getData().getAmount()));
|
paymentRecharge.setPayInfo(vo.toString());
|
paymentRechargeService.updateById(paymentRecharge);
|
|
userRecharge.setOrderStatus(1);
|
userRechargeMapper.updateById(userRecharge);
|
|
log.info("充值回调----完成");
|
pw.print("{code: 200}");
|
pw.flush();
|
pw.close();
|
}
|
}
|
}
|