提交 8daf516a authored 作者: liupengfei's avatar liupengfei

--no commit message

上级 c7e8c0f0
......@@ -3,6 +3,7 @@ package com.zrqx.third.pay.controller;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
......@@ -24,8 +25,13 @@ import org.springframework.web.bind.annotation.ResponseBody;
import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
import com.zrqx.core.client.form.third.pay.PayResultForm;
import com.zrqx.core.client.member.fg.FgPersonalMemberClient;
import com.zrqx.core.client.order.fg.FgOrderClient;
import com.zrqx.core.client.third.PayClient;
import com.zrqx.core.client.vo.order.OrderPayVo;
import com.zrqx.core.enums.order.OrderTypeEnum;
import com.zrqx.core.enums.third.pay.PayTypeEnum;
import com.zrqx.core.exception.BaseException;
import com.zrqx.core.util.response.CallBack;
import com.zrqx.third.pay.config.WXPay;
import com.zrqx.third.pay.config.WXPayConfig;
......@@ -60,6 +66,15 @@ public class ReceiveController {
@Autowired
private PayClient payClient;
@Autowired
private FgOrderClient orderClient;
@Autowired
private WXPayConfig config;
@Autowired
private FgPersonalMemberClient personalMemberClient;
private final static Logger logger = LoggerFactory.getLogger(ReceiveController.class);
@ApiOperation(value = "支付宝服务器异步通知页面", notes = "支付宝服务器异步通知页面")
......@@ -107,6 +122,8 @@ public class ReceiveController {
String trade_no = request.getParameter("trade_no");
// 交易状态
String trade_status = request.getParameter("trade_status");
// 付款金额
String total_amount = request.getParameter("total_amount");
if (trade_status.equals("TRADE_FINISHED")) {
// 判断该笔订单是否在商户网站中已经做过处理
// 如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
......@@ -121,11 +138,46 @@ public class ReceiveController {
// 注意:
// 付款完成后,支付宝系统发送该交易状态通知
logger.info(request.getParameter("out_trade_no") + "支付宝支付成功------开始调用pay--------------");
CallBack<Boolean> result = payClient.returnPayResult(new PayResultForm(out_trade_no,
String.valueOf(PayTypeEnum.ALIPAY.getCode())));
logger.info(request.getParameter("out_trade_no") + "支付宝回调远程调用pay结束:" + (result == null ? false : result.getData()));
//logger.info(request.getParameter("out_trade_no") + "支付宝支付成功------开始调用pay--------------");
//CallBack<Boolean> result = payClient.returnPayResult(new PayResultForm(out_trade_no,
// String.valueOf(PayTypeEnum.ALIPAY.getCode())));
//logger.info(request.getParameter("out_trade_no") + "支付宝回调远程调用pay结束:" + (result == null ? false : result.getData()));
// 修改订单状态
logger.info(out_trade_no + "开始查询订单详情-------------------");
CallBack<OrderPayVo> orderPayVoResult = orderClient.getOrderPayVo(out_trade_no);
if(orderPayVoResult == null || orderPayVoResult.getData() == null) {
logger.error("订单:" + out_trade_no + "获取订单详情失败");
throw new BaseException(-3, "获取订单详情失败");
}
OrderPayVo orderPayVo = orderPayVoResult.getData();
logger.info(out_trade_no + "获取订单详情成功:\n" + orderPayVo);
if(!orderPayVo.getPayment().equals(total_amount)){
// TODO 支付金额和订单金额不一致 处理流程
logger.warn("订单金额与支付金额不一致; ");
}
logger.info(out_trade_no + "开始修改订单状态-------------------");
PayResultForm form = new PayResultForm();
form.setOut_trade_no(out_trade_no);
form.setPayType(PayTypeEnum.ALIPAY.getCode());
CallBack<Boolean> result = orderClient.updateOrderStatus(form);
if(result == null || !result.getData()) {
logger.error("订单:" + out_trade_no + "订单状态修改失败");
throw new BaseException(-3, "订单状态修改失败");
}
logger.info(form.getOut_trade_no() + "修改订单状态成功-------------------");
if(orderPayVo.getOrderType().equals(OrderTypeEnum.VIP.getCode())){
//如果是开通vip订单,修改用户信息
logger.info("third1服务:开始修改用户信息-------------------");
CallBack<Boolean> re = personalMemberClient.addVipMember(out_trade_no);
if(re.hasEntity()){
if(re.getData() == true){
logger.info("-----修改用户信息成功-------------------");
}else{
logger.error("修改用户信息失败");
}
}
}
}
mark = "success";
} else {// 验证失败
......@@ -194,7 +246,7 @@ public class ReceiveController {
@ApiOperation("微信回调")
@PostMapping("/notify_wechat")
public void weChatNotify(HttpServletRequest request,HttpServletResponse response){
public String weChatNotify(HttpServletRequest request,HttpServletResponse response){
logger.info("微信支付回调开始--------------------");
DataInputStream in;
String wxNotifyXml = "";
......@@ -210,7 +262,6 @@ public class ReceiveController {
} catch (IOException e) {
e.printStackTrace();
}
WXPayConfig config = new WXPayConfig();
WXPay wxpay;
try {
wxpay = new WXPay(config);
......@@ -228,9 +279,52 @@ public class ReceiveController {
String out_trade_no = notifyMap.get("out_trade_no");
// 微信支付订单号
String transaction_id =notifyMap.get("transaction_id");
// 付款金额 分
String total_amount = notifyMap.get("total_fee");
// 修改订单状态
logger.info(out_trade_no + "开始查询订单详情-------------------");
CallBack<OrderPayVo> orderPayVoResult = orderClient.getOrderPayVo(out_trade_no);
if(orderPayVoResult == null || orderPayVoResult.getData() == null) {
logger.error("订单:" + out_trade_no + "获取订单详情失败");
throw new BaseException(-3, "获取订单详情失败");
}
OrderPayVo orderPayVo = orderPayVoResult.getData();
logger.info(out_trade_no + "获取订单详情成功:\n" + orderPayVo);
BigDecimal tempDataBig = new BigDecimal(orderPayVo.getPayment());
// 元换算为 分
String amount = tempDataBig.multiply(new BigDecimal(100d)).intValue() + "";
if(!amount.equals(total_amount)){
// TODO 支付金额和订单金额不一致 处理流程
logger.warn("订单金额与支付金额不一致; ");
}
logger.info(out_trade_no + "开始修改订单状态-------------------");
PayResultForm form = new PayResultForm();
form.setOut_trade_no(out_trade_no);
form.setPayType(PayTypeEnum.WECHAT.getCode());
CallBack<Boolean> result = orderClient.updateOrderStatus(form);
if(result == null || !result.getData()) {
logger.error("订单:" + out_trade_no + "订单状态修改失败");
throw new BaseException(-3, "订单状态修改失败");
}
logger.info(form.getOut_trade_no() + "修改订单状态成功-------------------");
if(orderPayVo.getOrderType().equals(OrderTypeEnum.VIP.getCode())){
//如果是开通vip订单,修改用户信息
logger.info("third1服务:开始修改用户信息-------------------");
CallBack<Boolean> re = personalMemberClient.addVipMember(out_trade_no);
if(re.hasEntity()){
if(re.getData() == true){
logger.info("-----修改用户信息成功-------------------");
}else{
logger.error("修改用户信息失败");
}
}
}
// 订单金额、单位为分
String total_fee =notifyMap.get("total_fee");
/*String total_fee =notifyMap.get("total_fee");
logger.info(notifyMap.get("out_trade_no") + "微信支付成功调用order修改状态--------------------");
CallBack<Boolean> result = payClient.returnPayResult(new PayResultForm(PayTypeEnum.WECHAT.getCode(), out_trade_no));
logger.info(notifyMap.get("out_trade_no") + "微信回调远程调用order完成:" + (result == null ? false : result.getData()));
......@@ -241,11 +335,13 @@ public class ReceiveController {
} else {
logger.error(notifyMap.get("out_trade_no") + "响应微信回调失败:" + notifyMap);
}
logger.info(notifyMap.get("out_trade_no") + "微信支付回调结束--------------------");
logger.info(notifyMap.get("out_trade_no") + "微信支付回调结束--------------------");*/
}
} catch (Exception e) {
logger.error(e.getMessage());
}
logger.info("微信支付成功,开始跳转页面");
return "index";
}
......@@ -253,6 +349,7 @@ public class ReceiveController {
@GetMapping("/returnUrl")
public String aliReturnUrl(ServletRequest request)
throws UnsupportedEncodingException, AlipayApiException {
logger.info(request.getParameter("out_trade_no") + "支付宝支付回调开始--------------------returnUrl");
// String mark = "";
Map<String, String> params = new HashMap<String, String>();
Map<String, String[]> requestParams = request.getParameterMap();
......@@ -270,7 +367,6 @@ public class ReceiveController {
boolean signVerified = AlipaySignature.rsaCheckV1(params,
alipay_public_key, charset,
sign_type); // 调用SDK验证签名
if (signVerified) {
// 商户订单号
String out_trade_no = request.getParameter("out_trade_no");
......@@ -280,6 +376,7 @@ public class ReceiveController {
// 付款金额
String total_amount = request.getParameter("total_amount");
// 收款支付宝账号对应的支付宝唯一用户号
// String seller_id =request.getParameter("seller_id");
......
......@@ -4,6 +4,7 @@ import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
......@@ -186,12 +187,14 @@ public class WeChatPayImpl extends PayTypeAdapter{
return null;
WecartQueryReturn wecartQueryReturn = new WecartQueryReturn(); // 创建 JavaBean 对象
BeanUtils.populate(wecartQueryReturn, resp);
if(wecartQueryReturn != null && "SUCCESS".equals(wecartQueryReturn.getReturn_code())){
if(!"SUCCESS".equals(wecartQueryReturn.getReturn_code())){
return CallBack.fail();
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
Date dateTime = simpleDateFormat.parse(wecartQueryReturn.getTime_end());
boolean isPay = "SUCCESS".equals(wecartQueryReturn.getResult_code()) && "SUCCESS".equals(wecartQueryReturn.getTrade_state());
PayQueryReturnVo PayQueryReturnVo = new PayQueryReturnVo(PayTypeEnum.WECHAT.getCode(), isPay,
wecartQueryReturn.getTransaction_id(), new Date(wecartQueryReturn.getTime_end()), wecartQueryReturn.getTotal_fee(),
wecartQueryReturn.getTransaction_id(), dateTime, wecartQueryReturn.getTotal_fee(),
wecartQueryReturn.getOut_trade_no(), wecartQueryReturn.getReturn_msg());
return CallBack.success(PayQueryReturnVo);
} catch (Exception e) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论