java版聚合支付源码Spring Cloud+Spring Boot+mybatis+security+uniapp+Redis+MQ+VR全景+b2b2c多商家入驻前后端分离商城源码

@源码地址来源: https://minglisoft.cn/honghu/business.html

电商微信支付、支付宝支付、余额支付代码 

package com.honghu.cloud.controller;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.honghu.cloud.bean.GoldLog;
import com.honghu.cloud.bean.GoldRecord;
import com.honghu.cloud.bean.Payment;
import com.honghu.cloud.bean.PlatformPay;
import com.honghu.cloud.bean.PlatformPayFlow;
import com.honghu.cloud.code.ResponseCode;
import com.honghu.cloud.dto.CloudPurchaseOrderDto;
import com.honghu.cloud.dto.DistributionSettingDto;
import com.honghu.cloud.dto.IntegralGoodsDto;
import com.honghu.cloud.dto.IntegralGoodsOrderDto;
import com.honghu.cloud.dto.MessageDto;
import com.honghu.cloud.dto.OrderFormDto;
import com.honghu.cloud.dto.PredepositDto;
import com.honghu.cloud.dto.PredepositLogDto;
import com.honghu.cloud.dto.RushOrderformDto;
import com.honghu.cloud.dto.StoreDto;
import com.honghu.cloud.dto.SysConfigDto;
import com.honghu.cloud.dto.SysConfigExtendDto;
import com.honghu.cloud.dto.UserDto;
import com.honghu.cloud.feign.AgentProfitFeignClient;
import com.honghu.cloud.feign.CloudPurchaseOrderFeignClient;
import com.honghu.cloud.feign.DistributionOrderFeignClient;
import com.honghu.cloud.feign.DistributionProfitFeignClient;
import com.honghu.cloud.feign.DistributionSettingFeignClient;
import com.honghu.cloud.feign.HandleOrderFormFeignClient;
import com.honghu.cloud.feign.IntegralGoodsFeignClient;
import com.honghu.cloud.feign.IntegralGoodsOrderFeignClient;
import com.honghu.cloud.feign.JiguangPushFeignClient;
import com.honghu.cloud.feign.LiveOrderFeignClient;
import com.honghu.cloud.feign.MessageFeignClient;
import com.honghu.cloud.feign.OrderFormFeignClient;
import com.honghu.cloud.feign.OrderFormToolsFeignClient;
import com.honghu.cloud.feign.PinPayRecordFeignClient;
import com.honghu.cloud.feign.PredepositFeignClient;
import com.honghu.cloud.feign.PredepositLogFeignClient;
import com.honghu.cloud.feign.RushOrderFormFeignClient;
import com.honghu.cloud.feign.StoreFeignClient;
import com.honghu.cloud.feign.SysConfigFeignClient;
import com.honghu.cloud.feign.SysconrigExtendFeignClient;
import com.honghu.cloud.feign.TXTemplateFeignClient;
import com.honghu.cloud.feign.UserFeignClient;
import com.honghu.cloud.pay.alipay.services.AlipayService;
import com.honghu.cloud.pay.alipay.util.AlipayUtil;
import com.honghu.cloud.pay.bill.util.MD5Util;
import com.honghu.cloud.pay.tenpay.RequestHandler;
import com.honghu.cloud.pay.tenpay.ResponseHandler;
import com.honghu.cloud.pay.tenpay.util.Sha1Util;
import com.honghu.cloud.pay.tenpay.util.TenpayUtil;
import com.honghu.cloud.pay.unionpay.acp.sdk.SDKUtil;
import com.honghu.cloud.service.IGoldLogService;
import com.honghu.cloud.service.IGoldRecordService;
import com.honghu.cloud.service.IPaymentService;
import com.honghu.cloud.service.IPlatformPayFlowService;
import com.honghu.cloud.service.IPlatformPayService;
import com.honghu.cloud.tools.AccessTokenTools;
import com.honghu.cloud.tools.SecurityUserHolder;
import com.honghu.cloud.tools.qrcode.QRCodeUtil;
import com.honghu.cloud.utils.CommUtil;
import com.honghu.cloud.utils.tools.Md5Encrypt;

import lombok.extern.log4j.Log4j;
import net.sf.json.JSONObject;

/**
 * 
 * <p>
 * Title: HongHuPayViewAction.java
 * </p>
 * 
 * <p>
 * Description:在线支付回调控制器,处理系统支持的所有支付方式回调业务处理,包括支付宝、财付通、快钱、paypal、网银在线
 * </p>
 * 
 * <p>
 * Copyright: Copyright (c) 2015
 * </p>
 * 
 * <p>
 * Company: www.minglisoft.cn
 * </p>
 * 
 * @author honghu
 * 
 * @date 2014-5-25
 * 
 * @version honghu_b2b2c v8.0 2016版
 */
@SuppressWarnings({ "unchecked", "rawtypes", "unused" })
@RestController
@Log4j
@RequestMapping(value = "/pay")
public class PayController {

	private static final Logger logger = LoggerFactory.getLogger(PayController.class);
	
	@Autowired
	private SysConfigFeignClient sysConfigFeignClient;
	@Autowired
	private OrderFormFeignClient orderFormFeignClient;
	@Autowired
	private PredepositLogFeignClient predepositLogFeignClient;
	@Autowired
	private PredepositFeignClient predepositFeignClient;
	@Autowired
	private IPaymentService paymentService;
	@Autowired
	private CloudPurchaseOrderFeignClient cloudPurchaseOrderFeignClient;
	@Autowired
	private IntegralGoodsOrderFeignClient integralGoodsOrderFeignClient;
	@Autowired
	private RushOrderFormFeignClient rushOrderFormFeignClient;

	@Autowired
	private UserFeignClient userFeignClient;
	@Autowired
	private IGoldRecordService goldRecordService;
	@Autowired
	private IGoldLogService goldLogService;
	@Autowired
	private HandleOrderFormFeignClient handleOrderFormFeignClient;
	@Autowired
	private OrderFormToolsFeignClient orderFormToolsFeignClient;
	@Autowired
	private IntegralGoodsFeignClient integralGoodsFeignClient;
	@Autowired
	private PinPayRecordFeignClient pinPayRecordFeignClient;
	@Autowired
	private DistributionOrderFeignClient distributionOrderFeignClient;
	@Autowired
	private SysconrigExtendFeignClient sysconrigExtendFeignClient;
	@Autowired
	private IPlatformPayService platformPayService;
	@Autowired
	private IPlatformPayFlowService platformPayFlowService;
	@Autowired
	private StoreFeignClient storeFeignClient;
	@Autowired
	private LiveOrderFeignClient liveOrderFeignClient;
	@Autowired
	private MessageFeignClient messageFeignClient;
	@Autowired
	private DistributionProfitFeignClient distributionProfitFeignClient;
	@Autowired
	private DistributionSettingFeignClient distributionSettingFeignClient;
	@Autowired
	private AgentProfitFeignClient agentProfitFeignClient;
	@Autowired
	private TXTemplateFeignClient tXTemplateFeignClient;
	@Autowired
	private JiguangPushFeignClient jiguangPushFeignClient;
	@Autowired
	private AccessTokenTools accessTokenTools;

	@Autowired
	private AlipayService alipayService;

/*	@Value("${notify.url}")
	private String notify_url;
	*/
	/**
	 * 移动端订单支付详情
	 * 
	 * @param request
	 * @param response
	 * @param payType
	 * @param order_id
	 * @param order_type
	 * @param pay_password
	 * @return
	 */
	@RequestMapping(value = "/order_pay", method = RequestMethod.POST)
	public Map<String, Object> order_pay(HttpServletRequest request, HttpServletResponse response,@RequestBody JSONObject json) {
		String order_type = json.optString("order_type");
		String payType = json.optString("payType");
		Long order_id = json.optLong("order_id");
		
		UserDto user = SecurityUserHolder.getCurrentUser(request);

		Map<String, Object> result = new HashMap<String, Object>();
		if ("cloudpurchase".equals(order_type)) {
			CloudPurchaseOrderDto order = cloudPurchaseOrderFeignClient
					.selectByPrimaryKey(CommUtil.null2Long(order_id));
			if (order != null) {
				if ((order.getUser_id().equals(user.getId())) && (order.getStatus() == 0)) {
					if ("wx_pay".equals(payType)) {
						try {
							// TODO
							// 微信支付
							return ResponseCode
									.buildSuccessMap(wx_pay1(request, response, order_id, payType, order_type));
						} catch (Exception e) {
							log.error(e.toString());
							return ResponseCode.buildCodeMap("20008", "支付方式错误!", null);
						}
					}
					if ("wxh5_pay".equals(payType)) {
						try {
							// TODO
							// 微信支付
							return ResponseCode
									.buildSuccessMap(wxh5_pay(request, response, order_id, payType, order_type));
						} catch (Exception e) {
							log.error(e.toString());
							return ResponseCode.buildCodeMap("20008", "支付方式错误!", null);
						}
					}
					if (payType.equals("balance")) {
						double order_total_price = CommUtil.null2Double(Integer.valueOf(order.getPrice()));
						result.put("order_total_price", Double.valueOf(order_total_price));
						result.put("type", order_type);
						result.put("order_id", order_id);
						return ResponseCode.buildCodeMap("20009", "余额支付!", null);
					}
					result.put("type", "cloudpurchase");
					result.put("order_id", order.getId());
					result.put("url", CommUtil.getURL(request));

					Map<String, Object> params = Maps.newHashMap();
					params.put("mark", payType);
					List<Payment> payments = paymentService.queryPageList(params);

					if (payments.size() > 0) {
						Payment payment = payments.get(0);
						result.put("payment_id", payment.getId());
					}
					return ResponseCode.buildSuccessMap(result);
				}
			}
			return ResponseCode.buildCodeMap("20010", "订单中商品已被删除,请重新下单", null);
		}
		OrderFormDto order = orderFormFeignClient.selectByPrimaryKey(CommUtil.null2Long(order_id));

		Map<Boolean, Object> map_verify = orderFormToolsFeignClient.orderForm_verify(order, user.getId());
		Iterator iterator = map_verify.keySet().iterator();
		while (iterator.hasNext()) {
			Boolean verify_result = (Boolean) iterator.next();
			if (!verify_result.booleanValue()) {
				return ResponseCode.buildFailMap("", map_verify.get(verify_result));
			}
		}

		int order_status = orderFormToolsFeignClient.query_order_status(CommUtil.null2String(order_id));
		if (order_status == 10) {
			if ((payType == null) || ("".equals(CommUtil.null2String(payType)))) {
				return ResponseCode.buildCodeMap("20011", "支付方式错误", null);
			}

			Map<String, Object> params = Maps.newHashMap();
			params.put("mark", payType);

			List<Payment> payments = paymentService.queryPageList(params);

			if (payments.size() > 0) {
				Payment payment = payments.get(0);
				order.setPayment_id(payment.getId());
				order.setPayment_mark(payment.getMark());
				order.setPayment_name(payment.getName());
			}
			order.setPayType("online");
			orderFormFeignClient.updateById(order);

			if (payType.equals("balance")) {
				double order_total_price = orderFormToolsFeignClient
						.query_order_pay_price(CommUtil.null2String(order_id));
				result.put("order_total_price", order_total_price);
				result.put("user", user);
			} else {
				result.put("payType", payType);
				result.put("url", CommUtil.getURL(request));
				// mv.addObject("payTools", this.payTools);
				String type = "goods";
				if (order.getOrder_cat() == 2) {
					type = "group";
				}
				result.put("type", type);
				result.put("payment_id", order.getPayment_id());
				if ("wx_pay".equals(payType)) {
					try {
						// TODO
						// 微信支付
						return ResponseCode.buildSuccessMap(wx_pay1(request, response, order_id, payType, order_type));
					} catch (Exception e) {
						log.error(e.toString());
						return ResponseCode.buildCodeMap("20011", "支付方式错误", null);
					}
				}
			}
			result.put("order", order);
			result.put("order_id", order.getId());
			result.put("user", user);
		}
		if (order_status == 11) {
			if (payType.equals("balance")) {
				double order_total_price = orderFormToolsFeignClient
						.query_order_pay_price(CommUtil.null2String(order_id));
				result.put("order_total_price", order_total_price);
				result.put("user", user);
			} else {
				result.put("payType", payType);
				result.put("url", CommUtil.getURL(request));
				// mv.addObject("payTools", this.payTools);
				String type = "goods";
				result.put("type", type);
				result.put("payment_id", order.getPayment_id());
				if ("wx_pay".equals(payType)) {
					try {
						// TODO
						// 微信支付
						return ResponseCode.buildSuccessMap(wx_pay1(request, response, order_id, payType, order_type));
					} catch (Exception e) {
						log.error(e.toString());
						return ResponseCode.buildCodeMap("20011", "支付方式错误", null);
					}
				}
			}
			result.put("order", order);
			result.put("order_id", order.getId());
			result.put("user", user);
		}
		return ResponseCode.buildSuccessMap(result);
	}

	/**
	 * 手机订单货到付款
	 * 
	 * @param request
	 * @param response
	 * @param order_id
	 * @param pay_msg
	 * @param pay_session
	 * @return
	 * @throws Exception
	 */
	@RequestMapping({ "/order_pay_payafter" })
	public Map<String, Object> order_pay_payafter(HttpServletRequest request, HttpServletResponse response,
			 @RequestBody JSONObject json) throws Exception {
		String pay_session = json.optString("pay_session");
		String pay_msg = json.optString("pay_msg");
		String order_id = json.optString("order_id");
		
		Map<String, Object> result = new HashMap<String, Object>();
		String pay_session1 = CommUtil.null2String(request.getSession(false).getAttribute("pay_session"));
		if (pay_session1.equals(pay_session)) {
			OrderFormDto order = this.orderFormFeignClient.selectByPrimaryKey(CommUtil.null2Long(order_id));
			boolean exist = orderFormToolsFeignClient.verify_goods_exist(order);
			if (!exist) {
				return ResponseCode.buildFailMap("订单中商品已被删除,请重新下单", null);
			}
			boolean inventory_very = orderFormToolsFeignClient.verify_goods_Inventory(order);
			if (!inventory_very) {
				return ResponseCode.buildFailMap("订单中商品库存不足,请重新下单", null);
			}
			boolean ret = handleOrderFormFeignClient.payByPayafter(order, CommUtil.getURL(request), pay_msg);
			if (ret) {
				orderFormToolsFeignClient.updateGoodsInventory(order);
			}
			request.getSession(false).removeAttribute("pay_session");
			result.put("op_title", "货到付款提交成功,等待发货");
			result.put("url", CommUtil.getURL(request) + "/buyer/order_list");
		} else {
			return ResponseCode.buildFailMap("订单已经支付,禁止重复支付", null);
		}
		return ResponseCode.buildSuccessMap(result);
	}

	/**
	 * 支付宝在线支付成功回调控制
	 * 
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 *//*
	@RequestMapping({ "/aplipay_return" })
	public Map<String, Object> aplipay_return(HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		Map<String, Object> resultMap = new HashMap<String, Object>();

		System.out.println("pc_alipay_return");

		String trade_no = request.getParameter("trade_no");
		String[] order_nos = request.getParameter("out_trade_no").split("-");
		String total_fee = request.getParameter("price");
		String subject = request.getParameter("subject");

		String order_no = order_nos[2];
		String type = CommUtil.null2String(request.getParameter("body")).trim();
		String trade_status = request.getParameter("trade_status");
		OrderFormDto main_order = null;
		PredepositDto obj = null;
		GoldRecord gold = null;
		IntegralGoodsOrderDto ig_order = null;
		CloudPurchaseOrderDto cp_order = null;

		if (type.equals("goods")) {
			main_order = this.orderFormFeignClient.selectByPrimaryKey(CommUtil.null2Long(order_no));
		}
		if (type.equals("cash")) {
			obj = predepositFeignClient.selectByPrimaryKey(CommUtil.null2Long(order_no));
		}
		if (type.equals("gold")) {
			gold = this.goldRecordService.selectByPrimaryKey(CommUtil.null2Long(order_no));
		}
		if (type.equals("integral")) {
			ig_order = this.integralGoodsOrderFeignClient.selectByPrimaryKey(CommUtil.null2Long(order_no));
		}
		if (type.equals("group")) {
			main_order = orderFormFeignClient.selectByPrimaryKey(CommUtil.null2Long(order_no));
		}
		if (type.equals("cloudpurchase")) {
			cp_order = this.cloudPurchaseOrderFeignClient.selectByPrimaryKey(CommUtil.null2Long(order_no));
		}

		Map<String, String> params = Maps.newHashMap();
		Map requestParams = request.getParameterMap();
		for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
			String name = (String) iter.next();
			String[] values = (String[]) requestParams.get(name);
			String valueStr = "";
			for (int i = 0; i < values.length; i++) {
				valueStr = valueStr + values[i] + ",";
			}
			params.put(name, valueStr);
		}
		AlipayConfig config = new AlipayConfig();
		Payment payment = null;
		if ((type.equals("goods")) || (type.equals("group"))) {
			payment = this.paymentService.selectByPrimaryKey(main_order.getPayment_id());
			config.setKey(payment.getSafeKey());
			config.setPartner(payment.getPartner());
			config.setSeller_email(payment.getSeller_email());
		}
		if ((type.equals("cash")) || (type.equals("gold")) || (type.equals("integral"))
				|| (type.equals("cloudpurchase"))) {
			Map q_params = Maps.newHashMap();
			q_params.put("install", Boolean.valueOf(true));
			if (type.equals("cash")) {
				q_params.put("mark", obj.getPd_payment());
			}
			if (type.equals("gold")) {
				q_params.put("mark", gold.getGold_payment());
			}
			if (type.equals("integral")) {
				q_params.put("mark", ig_order.getIgo_payment());
			}
			if (type.equals("cloudpurchase")) {
				q_params.put("mark", cp_order.getPayment());
			}

			List<Payment> payments = this.paymentService.queryPageList(q_params);

			config.setKey(((Payment) payments.get(0)).getSafeKey());
			config.setPartner(((Payment) payments.get(0)).getPartner());
			config.setSeller_email(((Payment) payments.get(0)).getSeller_email());
		}
		config.setNotify_url(CommUtil.getURL(request) + "/alipay_notify");
		config.setReturn_url(CommUtil.getURL(request) + "/aplipay_return");
		boolean verify_result = AlipayNotify.verify(config, params);
		if (verify_result) {
			if (((type.equals("goods")) || (type.equals("group"))) && ((trade_status.equals("WAIT_SELLER_SEND_GOODS"))
					|| (trade_status.equals("TRADE_FINISHED")) || (trade_status.equals("TRADE_SUCCESS")))) {
				boolean flag = this.handleOrderFormFeignClient.payByOnline(main_order, trade_no,
						CommUtil.getURL(request));
				if (flag) {
					this.orderFormToolsFeignClient.updateGoodsInventory(main_order);
				}
				this.orderFormToolsFeignClient.sendMsgWhenHandleOrder(CommUtil.getURL(request), main_order,
						"tobuyer_online_pay_ok_notify", "toseller_online_pay_ok_notify");
				resultMap.put("all_price", Double.valueOf(this.orderFormToolsFeignClient
						.query_order_pay_price(CommUtil.null2String(main_order.getId()))));
				resultMap.put("obj", main_order);
			}
			if ((type.equals("cash")) && ((trade_status.equals("WAIT_SELLER_SEND_GOODS"))
					|| (trade_status.equals("TRADE_FINISHED")) || (trade_status.equals("TRADE_SUCCESS")))) {
				if (obj.getPd_pay_status() != 2) {
					obj.setPd_status(1);
					obj.setPd_pay_status(2);
					this.predepositFeignClient.updateById(obj);
					UserDto user = userFeignClient.selectByPrimaryKey(obj.getPd_user().getId());
					user.setAvailableBalance(
							BigDecimal.valueOf(CommUtil.add(user.getAvailableBalance(), obj.getPd_amount())));
					userFeignClient.updateById(user);
					PredepositLogDto log = new PredepositLogDto();
					log.setAddTime(new Date());
					log.setPd_log_amount(obj.getPd_amount());
					log.setPd_log_user(obj.getPd_user());
					log.setPd_op_type("充值");
					log.setPd_type("可用预存款");
					log.setPd_log_info("支付宝在线支付");
					this.predepositLogFeignClient.saveEntity(log);
				}

				resultMap.put("op_title", "恭喜您,成功充值" + obj.getPd_amount() + "元");
				resultMap.put("url", CommUtil.getURL(request) + "/buyer/predeposit_list");
			}
			if ((type.equals("gold")) && ((trade_status.equals("WAIT_SELLER_SEND_GOODS"))
					|| (trade_status.equals("TRADE_FINISHED")) || (trade_status.equals("TRADE_SUCCESS")))) {
				if (gold.getGold_pay_status() != 2) {
					gold.setGold_status(1);
					gold.setGold_pay_status(2);
					this.goldRecordService.updateById(gold);
					UserDto user = this.userFeignClient.selectByPrimaryKey(gold.getGold_user().getId());
					user.setGold(user.getGold() + gold.getGold_count());
					this.userFeignClient.updateById(user);
					GoldLog log = new GoldLog();
					log.setAddTime(new Date());
					log.setGl_payment(gold.getGold_payment());
					log.setGl_content("支付宝在线支付");
					log.setGl_money(gold.getGold_money());
					log.setGl_count(gold.getGold_count());
					log.setGl_type(0);
					log.setGl_user(gold.getGold_user());
					log.setGr(gold);
					this.goldLogService.saveEntity(log);
				}

				resultMap.put("op_title", "兑换" + gold.getGold_count() + "金币成功");
				resultMap.put("url", CommUtil.getURL(request) + "/seller/gold_record_list");
			}
			if ((type.equals("integral")) && ((trade_status.equals("WAIT_SELLER_SEND_GOODS"))
					|| (trade_status.equals("TRADE_FINISHED")) || (trade_status.equals("TRADE_SUCCESS")))) {
				if (ig_order.getIgo_status() < 20) {
					ig_order.setIgo_status(20);
					ig_order.setIgo_pay_time(new Date());
					ig_order.setIgo_payment("alipay");
					this.integralGoodsOrderFeignClient.updateById(ig_order);
					List<Map> ig_maps = this.orderFormToolsFeignClient
							.query_integral_goodsinfo(ig_order.getGoods_info());
					for (Map map : ig_maps) {
						IntegralGoodsDto goods = this.integralGoodsFeignClient
								.selectByPrimaryKey(CommUtil.null2Long(map.get("id")));
						goods.setIg_goods_count(
								goods.getIg_goods_count() - CommUtil.null2Int(map.get("ig_goods_count")));
						goods.setIg_exchange_count(
								goods.getIg_exchange_count() + CommUtil.null2Int(map.get("ig_goods_count")));
						this.integralGoodsFeignClient.updateById(goods);
					}
				}

				resultMap.put("obj", ig_order);
			}
			if (type.equals("cloudpurchase")) {
				if (cp_order.getStatus() < 5) {
					cp_order.setStatus(5);
					cp_order.setPayTime(new Date());
					this.cloudPurchaseOrderFeignClient.updateById(cp_order);
					this.cloudPurchaseOrderFeignClient.reduce_inventory(cp_order, request);
				}

				resultMap.put("op_title", "预付款支付成功!");
				resultMap.put("url", CommUtil.getURL(request) + "/buyer/cloudbuy_order");
			}
		} else {

			resultMap.put("op_title", "支付回调失败");
			resultMap.put("url", CommUtil.getURL(request) + "/index");
		}
		return resultMap;
	}*/

	/**
	 * 支付宝异步通知
	 * 
	 * @param request
	 * @param response
	 * @throws Exception
	 */
	@RequestMapping({ "/alipay_notify" })
	public void alipay_notify(HttpServletRequest request, HttpServletResponse response) throws Exception {
		 /*
        https://xx/receive_notify.htm?notify_type=trade_status_sync&notify_id=91722adff935e8cfa58b3aabf4dead6ibe
        &notify_time=2017-02-16 21:46:15&sign_type=RSA2
        &sign=xxxxxxxxxxxxxxx&app_id=2088102146225135&trade_no=2013112011001004330000121536&out_trade_no=6823789339978248&out_biz_no=85478536823789339978248
        &buyer_logon_id=159****5620&seller_id=2088102146225135&trans_currency=USD&seller_email=aa@mail.sa.com&total_amount=120.88
        &buyer_id=2088202954065786&settle_currency=USD&settle_amount=88.88&pay_currency=CNY&pay_amount=580.04&settle_trans_rate=1
        &trans_pay_rate=6.5261&trade_status=TRADE_SUCCESS&invoice_amount=88.88&receipt_amount=88.88&point_amount=88.88&refund_fee=10.23
        &buyer_pay_amount=88.88&subject=Iphone6 16G&body=Iphone6 16G&gmt_create=2014-11-27 15:45:57&gmt_payment=2014-11-27 15:45:57
        &gmt_refund=2014-11-27 14:15:57&gmt_close=2014-11-27 17:45:57&fund_bill_list="[{\"amount\":\"10000.00\",\"fundChannel\":\"ALIPAYACCOUNT\"}]"&voucher_detail_list="[{\"id\":\"20170307000730026487005X1M6V\",\"name\":\"全仓5折优惠券\"}]"
        &discount_goods_detail="[{\"goodsId\":\"STANDARD1026181538\",\"goodsName\":\"雪碧\",\"discountAmount\":\"10.00\"}]"
        &refund_preset_paytool_list=[{"amount":"1.00","assert_type_code":"HEMA"}]&charge_amount=8.88&charge_flags=bluesea_1
        &settlement_id=2018101610032004620239146945&advance_amount=11.11&current_seller_received_amount=88.88&seller_received_total_amount=88.88
        &total_from_seller_fee=88.88&ff_current_period=1&notify_action_type=payByAccountAction/closeTradeAction/reverseAction/finishFPAction/confirmDisburseAction/financingReceiptAction
        &discount_amount=88.88&mdiscount_amount=88.88&unfreeze_amount=18.18&auth_trade_pay_mode=CREDIT_PREAUTH_PAY
        &passback_params=merchantBizType%3d3C%26merchantBizNo%3d2016010101111&hb_fq_pay_info={"USER_INSTALL_NUM":"3"}&receipt_currency_type=DC
         */


		//获取支付宝POST过来反馈信息
		Map<String, String> params = new HashMap<String, String>();
		Map requestParams = request.getParameterMap();
		for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
			String name = (String) iter.next();
			String[] values = (String[]) requestParams.get(name);
			String valueStr = "";
			for (int i = 0; i < values.length; i++) {
				valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
			}
			//乱码解决,这段代码在出现乱码时使用。
			//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
			params.put(name, valueStr);
		}


		//String sign = request.getParameter("sign");
		String passbackParamsUnCode = request.getParameter("passback_params");
		String passbackParams = java.net.URLDecoder.decode(passbackParamsUnCode);

		String[] attachs = passbackParams.split("_");
		String type = attachs[3];
		//支付方式  因为付方式是"alipay_app" 形式 故pay_type为attachs[4]+"_"+attachs[5]
		String pay_type = attachs[4] + "_" + attachs[5];
		System.out.println("返回的pay_type:" + pay_type);



		Map<String, Object> pay_type_params = Maps.newHashMap();
		pay_type_params.put("mark", pay_type);
		List<Payment> payments =   this.paymentService.queryPageList(pay_type_params);

		log.info("----异步通知参数 开始 ------");
		log.info(params.toString());
		log.info("----异步通知参数 结束 ------");
		if (null == payments || payments.size() < 1) {
			log.error("支付异步通知失败");

			response.setContentType("text/plain");
			response.setHeader("Cache-Control", "no-cache");
			response.setCharacterEncoding("UTF-8");
			try {
				PrintWriter writer = response.getWriter();
				writer.print("fail");
			} catch (IOException e) {
				log.error(e.toString());
			}

			return;
		}
		Payment payment = payments.get(0);

		//
		if (AlipayUtil.validateSign(params, payment.getApp_public_key())) {
			log.info("回調验签成功");
			afterNotifyOrderHandling_alipay(request, payment, type, attachs);

			response.setContentType("text/plain");
			response.setHeader("Cache-Control", "no-cache");
			response.setCharacterEncoding("UTF-8");
			try {
				PrintWriter writer = response.getWriter();
				writer.print("success");
			} catch (IOException e) {
				log.error(e.toString());
			}

		} else {
			log.info("回調验签失败");
			response.setContentType("text/plain");
			response.setHeader("Cache-Control", "no-cache");
			response.setCharacterEncoding("UTF-8");
			try {
				PrintWriter writer = response.getWriter();
				writer.print("fail");
			} catch (IOException e) {
				log.error(e.toString());
			}
		}
	}

	/**
	 * 快钱在线支付回调处理控制
	 * 
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping({ "/bill_return" })
	public Map<String, Object> bill_return(HttpServletRequest request, HttpServletResponse response) throws Exception {
		Map<String, Object> resultMap = new HashMap<String, Object>();
		String ext1 = request.getParameter("ext1").trim();
		String ext2 = CommUtil.null2String(request.getParameter("ext2").trim());
		OrderFormDto order = null;
		PredepositDto obj = null;
		GoldRecord gold = null;
		IntegralGoodsOrderDto ig_order = null;
		CloudPurchaseOrderDto cp_order = null;
		if ((ext2.equals("goods")) || (ext2.equals("group"))) {
			order = this.orderFormFeignClient.selectByPrimaryKey(CommUtil.null2Long(ext1));
		}
		if (ext2.equals("cash")) {
			obj = this.predepositFeignClient.selectByPrimaryKey(CommUtil.null2Long(ext1));
		}
		if (ext2.equals("gold")) {
			gold = this.goldRecordService.selectByPrimaryKey(CommUtil.null2Long(ext1));
		}
		if (ext2.equals("integral")) {
			ig_order = this.integralGoodsOrderFeignClient.selectByPrimaryKey(CommUtil.null2Long(ext1));
		}
		if (ext2.equals("cloudpurchase")) {
			cp_order = this.cloudPurchaseOrderFeignClient.selectByPrimaryKey(CommUtil.null2Long(ext1));
		}
		String merchantAcctId = request.getParameter("merchantAcctId").trim();

		String key = "";
		Payment payment = null;
		if ((ext2.equals("goods")) || (ext2.equals("group"))) {
			payment = this.paymentService.selectByPrimaryKey(order.getPayment_id());
			key = payment.getRmbKey();
		}
		if ((ext2.equals("cash")) || (ext2.equals("gold")) || (ext2.equals("integral"))
				|| (ext2.equals("cloudpurchase"))) {
			Map q_params = Maps.newHashMap();
			q_params.put("install", Boolean.valueOf(true));
			if (ext2.equals("cash")) {
				q_params.put("mark", obj.getPd_payment());
			}
			if (ext2.equals("gold")) {
				q_params.put("mark", gold.getGold_payment());
			}
			if (ext2.equals("integral")) {
				q_params.put("mark", ig_order.getIgo_payment());
			}
			if (ext2.equals("cloudpurchase")) {
				q_params.put("mark", cp_order.getPayment());
			}

			List<Payment> payments = this.paymentService.queryPageList(q_params);

			key = ((Payment) payments.get(0)).getRmbKey();
		}
		String version = request.getParameter("version").trim();

		String language = request.getParameter("language").trim();

		String signType = request.getParameter("signType").trim();

		String payType = request.getParameter("payType").trim();

		String bankId = request.getParameter("bankId").trim();

		String orderId = request.getParameter("orderId").trim();

		String orderTime = request.getParameter("orderTime").trim();

		String orderAmount = request.getParameter("orderAmount").trim();

		String dealId = request.getParameter("dealId").trim();

		String bankDealId = request.getParameter("bankDealId").trim();

		String dealTime = request.getParameter("dealTime").trim();

		String payAmount = request.getParameter("payAmount").trim();

		String fee = request.getParameter("fee").trim();

		String payResult = request.getParameter("payResult").trim();

		String errCode = request.getParameter("errCode").trim();

		String signMsg = request.getParameter("signMsg").trim();

		String merchantSignMsgVal = "";
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "merchantAcctId", merchantAcctId);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "version", version);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "language", language);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "signType", signType);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "payType", payType);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "bankId", bankId);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "orderId", orderId);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "orderTime", orderTime);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "orderAmount", orderAmount);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "dealId", dealId);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "bankDealId", bankDealId);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "dealTime", dealTime);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "payAmount", payAmount);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "fee", fee);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "ext1", ext1);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "ext2", ext2);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "payResult", payResult);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "errCode", errCode);
		merchantSignMsgVal = appendParam(merchantSignMsgVal, "key", key);

		String merchantSignMsg = MD5Util.md5Hex(merchantSignMsgVal.getBytes("utf-8")).toUpperCase();
		if (signMsg.toUpperCase().equals(merchantSignMsg.toUpperCase())) {
			switch (Integer.parseInt(payResult)) {
			case 10:
				if ((ext2.equals("goods")) || (ext2.equals("group"))) {
					boolean flag = this.handleOrderFormFeignClient.payByOnline(order, "", CommUtil.getURL(request));
					if (flag) {
						this.orderFormToolsFeignClient.updateGoodsInventory(order);
					}
					this.orderFormToolsFeignClient.sendMsgWhenHandleOrder(CommUtil.getURL(request), order,
							"tobuyer_online_pay_ok_notify", "toseller_online_pay_ok_notify");
					resultMap.put("all_price", Double.valueOf(
							this.orderFormToolsFeignClient.query_order_pay_price(CommUtil.null2String(order.getId()))));
					resultMap.put("obj", order);
				}
				if (ext2.equals("cash")) {
					if (obj.getPd_pay_status() < 2) {
						obj.setPd_status(1);
						obj.setPd_pay_status(2);
						this.predepositFeignClient.updateById(obj);
						UserDto user = this.userFeignClient.selectByPrimaryKey(obj.getPd_user().getId());
						user.setAvailableBalance(
								BigDecimal.valueOf(CommUtil.add(user.getAvailableBalance(), obj.getPd_amount())));
						this.userFeignClient.updateById(user);
						PredepositLogDto log = new PredepositLogDto();
						log.setAddTime(new Date());
						log.setPd_log_amount(obj.getPd_amount());
						log.setPd_log_user(obj.getPd_user());
						log.setPd_op_type("充值");
						log.setPd_type("可用预存款");
						log.setPd_log_info("快钱在线支付");
						this.predepositLogFeignClient.saveEntity(log);
					}

					resultMap.put("op_title", "充值" + obj.getPd_amount() + "成功");
					resultMap.put("url", CommUtil.getURL(request) + "/buyer/predeposit_list");
				}
				if (ext2.equals("gold")) {
					if (gold.getGold_pay_status() < 2) {
						gold.setGold_status(1);
						gold.setGold_pay_status(2);
						this.goldRecordService.updateById(gold);
						UserDto user = this.userFeignClient.selectByPrimaryKey(gold.getGold_user().getId());
						user.setGold(user.getGold() + gold.getGold_count());
						this.userFeignClient.updateById(user);
						GoldLog log = new GoldLog();
						log.setAddTime(new Date());
						log.setGl_payment(gold.getGold_payment());
						log.setGl_content("快钱在线支付");
						log.setGl_money(gold.getGold_money());
						log.setGl_count(gold.getGold_count());
						log.setGl_type(0);
						log.setGl_user(gold.getGold_user());
						log.setGr(gold);
						this.goldLogService.saveEntity(log);
					}

					resultMap.put("op_title", "兑换" + gold.getGold_count() + "金币成功");
					resultMap.put("url", CommUtil.getURL(request) + "/seller/gold_record_list");
				}
				if (ext2.equals("integral")) {
					if (ig_order.getIgo_status() < 20) {
						ig_order.setIgo_status(20);
						ig_order.setIgo_pay_time(new Date());
						ig_order.setIgo_payment("bill");
						this.integralGoodsOrderFeignClient.updateById(ig_order);
						List<Map> ig_maps = this.orderFormToolsFeignClient
								.query_integral_goodsinfo(ig_order.getGoods_info());
						for (Map map : ig_maps) {
							IntegralGoodsDto goods = this.integralGoodsFeignClient
									.selectByPrimaryKey(CommUtil.null2Long(map.get("id")));
							goods.setIg_goods_count(
									goods.getIg_goods_count() - CommUtil.null2Int(map.get("ig_goods_count")));
							goods.setIg_exchange_count(
									goods.getIg_exchange_count() + CommUtil.null2Int(map.get("ig_goods_count")));
							this.integralGoodsFeignClient.updateById(goods);
						}
					}

					resultMap.put("obj", ig_order);
				}
				if (!ext2.equals("cloudpurchase")) {
					break;
				}
				if (cp_order.getStatus() < 5) {
					cp_order.setStatus(5);
					cp_order.setPayTime(new Date());
					this.cloudPurchaseOrderFeignClient.updateById(cp_order);
					this.cloudPurchaseOrderFeignClient.reduce_inventory(cp_order, request);
				}
				resultMap.put("op_title", "预付款支付成功!");
				resultMap.put("url", CommUtil.getURL(request) + "/buyer/cloudbuy_order");

				break;
			default:
				resultMap.put("op_title", "快钱支付失败!");
				resultMap.put("url", CommUtil.getURL(request) + "/index");

				break;
			}
		} else {

			resultMap.put("op_title", "快钱支付失败!");
			resultMap.put("url", CommUtil.getURL(request) + "/index");
		}
		return resultMap;
	}

	public String appendParam(String returnStr, String paramId, String paramValue) {
		if (!returnStr.equals("")) {
			if (!paramValue.equals("")) {
				returnStr = returnStr + "&" + paramId + "=" + paramValue;
			}
		} else if (!paramValue.equals("")) {
			returnStr = paramId + "=" + paramValue;
		}
		return returnStr;
	}

	/**
	 * 快钱异步回调处理,如果同步回调出错,异步回调会弥补该功能
	 * 
	 * @param request
	 * @param response
	 * @throws Exception
	 */
	@RequestMapping({ "/bill_notify_return" })
	public void bill_notify_return(HttpServletRequest request, HttpServletResponse response) throws Exception {
		int rtnOK = 0;

		String ext1 = request.getParameter("ext1").trim();
		String ext2 = CommUtil.null2String(request.getParameter("ext2").trim());
		OrderFormDto order = null;
		PredepositDto obj = null;
		GoldRecord gold = null;
		IntegralGoodsOrderDto ig_order = null;
		CloudPurchaseOrderDto cp_order = null;
		if ((ext2.equals("goods")) || (ext2.equals("group"))) {
			order = this.orderFormFeignClient.selectByPrimaryKey(CommUtil.null2Long(ext1));
		}
		if (ext2.equals("cash")) {
			obj = this.predepositFeignClient.selectByPrimaryKey(CommUtil.null2Long(ext1)
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

企业软件定制

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值