/*** 支付成功后的微信支付异步通知*/
@RequestMapping(value="/wxpay")
public void wxpay(HttpServletRequest request, HttpServletResponse response) throws Exception {log.info("支付成功后的微信支付异步通知");// 获取微信支付结果PayResult payResult = wxOrderService.getWxPayResult(request.getInputStream());boolean isPaid = payResult.getReturn_code().equals("SUCCESS") ? true : false;// 查询该笔订单在微信那边是否成功支付// 支付成功,商户处理后同步返回给微信参数PrintWriter writer = response.getWriter();if (isPaid) {String merchantOrderId = payResult.getOut_trade_no(); // 商户订单号String wxFlowId = payResult.getTransaction_id();Integer paidAmount = payResult.getTotal_fee();// System.out.println("================================= 支付成功 =================================");// ====================== 操作商户自己的业务,比如修改订单状态等 start ==========================String merchantReturnUrl = paymentOrderService.updateOrderPaid(merchantOrderId, paidAmount);// ============================================ 业务结束, end ==================================log.info("************* 支付成功(微信支付异步通知) - 时间: {} *************", DateUtil.getCurrentDateString(DateUtil.DATETIME_PATTERN));log.info("* 商户订单号: {}", merchantOrderId);log.info("* 微信订单号: {}", wxFlowId);log.info("* 实际支付金额: {}", paidAmount);log.info("*****************************************************************************");// 通知天天吃货服务端订单已支付
// String url = "http://192.168.1.2:8088/orders/notifyMerchantOrderPaid";MultiValueMap requestEntity = new LinkedMultiValueMap<>();requestEntity.add("merchantOrderId", merchantOrderId);String httpStatus = restTemplate.postForObject(merchantReturnUrl, requestEntity, String.class);log.info("*** 通知天天吃货后返回的状态码 httpStatus: {} ***", httpStatus);// 通知微信已经收到消息,不要再给我发消息了,否则微信会10连击调用本接口String noticeStr = setXML("SUCCESS", "");writer.write(noticeStr);writer.flush();} else {System.out.println("================================= 支付失败 =================================");// 支付失败String noticeStr = setXML("FAIL", "");writer.write(noticeStr);writer.flush();}}
/*** @Description: 支付结果封装类*/
public class PayResult {private String return_code; // 返回状态码private String appid; // 公众账号IDprivate String mch_id; // 商户号private String nonce_str; // 随机字符串private String sign; // 签名private String result_code; // 业务结果private String openid; // 用户标识private String trade_type; // 交易类型private String bank_type; // 付款银行private int total_fee; // 总金额private int cash_fee; // 现金支付金额private String transaction_id; // 微信支付订单号private String out_trade_no; // 商户订单号private String time_end; // 支付完成时间private String return_msg; // 返回信息private String device_info; // 设备号private String err_code; // 错误代码private String err_code_des; // 错误代码描述private String is_subscribe; // 是否关注公众账号private String fee_type; // 货币种类private String cash_fee_type; // 现金支付货币类型private String coupon_fee; // 代金券或立减优惠金额private String coupon_count; // 代金券或立减优惠使用数量private String coupon_id_$n; // 代金券或立减优惠IDprivate String coupon_fee_$n; // 单个代金券或立减优惠支付金额private String attach; // 商家数据包
}
@Transactional(propagation=Propagation.REQUIRED)
@Override
public String updateOrderPaid(String merchantOrderId, Integer paidAmount) {Example example = new Example(Orders.class);Example.Criteria criteria = example.createCriteria();criteria.andEqualTo("merchantOrderId", merchantOrderId);Orders paidOrder = new Orders();paidOrder.setPayStatus(PaymentStatus.PAID.type);paidOrder.setAmount(paidAmount);int result = ordersMapper.updateByExampleSelective(paidOrder, example);return queryMerchantReturnUrl(merchantOrderId);
}
/*** @Description: 支付中心的支付状态 10:未支付 20:已支付 30:支付失败 40:已退款*/
public enum PaymentStatus {WAIT_PAY(10, "未支付"),PAID(20, "已支付"),PAY_FAILED(30, "支付失败"),SUCCESS(40, "已退款");public final Integer type;public final String value;PaymentStatus(Integer type, String value){this.type = type;this.value = value;}}
@PostMapping("notifyMerchantOrderPaid")
public Integer notifyMerchantOrderPaid(String merchantOrderId) {orderService.updateOrderStatus(merchantOrderId, OrderStatusEnum.WAIT_DELIVER.type);return HttpStatus.OK.value();
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!