首页>代码>ssm高仿beatport.com在线音乐网网站>/MusicWebProject/src/main/java/com/music/action/applicationPayment/alipayPay/AlipayController.java
package com.music.action.applicationPayment.alipayPay;

import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
import com.music.sqlConnect.dml.update.Membership_OrderUpdate;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

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

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * Created by Danny on 2017/12/26.
 */
@Controller()
@RequestMapping("alipay")
public class AlipayController {
	@Resource
	private IAlipayService iAlipayService;

	/**
	 * 支付
	 * 
	 * @param orderId
	 *            订单编号
	 * @param amount
	 *            金额
	 * @param orderName
	 *            订单名称
	 * @param description
	 *            描述
	 * @param returnUrl
	 *            返回URL PriceID 资费ID
	 * @return
	 */
	@ResponseBody
	@RequestMapping("pay")
	public String pay(String orderId, String amount, String orderName, String description, String returnUrl,
			String user_id, String PriceID) {
		return iAlipayService.pay(orderId, amount, orderName, description, returnUrl, user_id, PriceID);
	}

	/**
	 * 
	 * 查询
	 * 
	 * @param orderId
	 *            订单编号
	 * @param alipayOrderId支付宝订单编号
	 * @return
	 */
	@ResponseBody
	@RequestMapping("query")
	public String query(String orderId, String alipayOrderId) {
		return iAlipayService.query(orderId, alipayOrderId);
	}

	/**
	 * 退款
	 * 
	 * @param orderId
	 *            订单编号
	 * @param alipayOrderId支付宝订单编号
	 * @param amount
	 *            金额
	 * @param reason
	 * @param refundReqNum
	 * @return
	 */
	@ResponseBody
	@RequestMapping("refund")
	public String refund(String orderId, String alipayOrderId, String amount, String reason, String refundReqNum) {
		return iAlipayService.refund(orderId, alipayOrderId, amount, reason, refundReqNum);
	}

	/**
	 * 退款查询
	 * 
	 * @param orderId
	 *            订单编号
	 * @param alipayOrderId支付宝订单编号
	 * @param refundReqNum退款通知
	 * @return
	 */
	@ResponseBody
	@RequestMapping("refundQuery")
	public String refundQuery(String orderId, String alipayOrderId, String refundReqNum) {
		return iAlipayService.refundQuery(orderId, alipayOrderId, refundReqNum);
	}

	@ResponseBody
	@RequestMapping("close")
	public String close(String orderId, String alipayOrderId) {
		return iAlipayService.close(orderId, alipayOrderId);
	}

	@RequestMapping("returnUrl")
	public String returnUlr(HttpServletRequest request, HttpServletResponse response)
			throws UnsupportedEncodingException, AlipayApiException {
		Map<String, String> params = new HashMap<String, String>();
		@SuppressWarnings("unchecked")
		Map<String, String[]> requestParams = request.getParameterMap();
		for (Iterator<String> 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);
		}

		boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset,
				AlipayConfig.sign_type); // 调用SDK验证签名

		// ——请在这里编写您的程序(以下代码仅作参考)——
		if (signVerified) {
			// 商户订单号
			String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");

			// 支付宝交易号
			String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");

			// 付款金额
			String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"), "UTF-8");

		} else {
			System.out.println("----------------------支付失败--------------------------");
			AlipayConfig.logResult(
					"----------------------returnUlr支付失败--------------------------\nsignVerified=" + signVerified);
		}
		return "/indexs";
	}

	@RequestMapping(value = "notify_url", method = RequestMethod.POST)
	public String notify_url(HttpServletRequest request, HttpServletResponse response){
		System.out.println("====================================== > 进入 notify_url");
		// 获取支付宝POST过来反馈信息
		Map<String, String> params = new HashMap<String, String>();
		Map<String, String[]> requestParams = request.getParameterMap();
		for (Iterator<String> 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);
		}
		try {
			boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset,
					AlipayConfig.sign_type); // 调用SDK验证签名
			/*
			 * 实际验证过程建议商户务必添加以下校验: 1、需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
			 * 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
			 * 3、校验通知中的seller_id(或者seller_email)
			 * 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
			 * 4、验证app_id是否为该商户本身。
			 */
			if (signVerified) {// 验证成功

				// Request.Form

				// 商户订单号
				String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");

				// 支付金额
				String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"), "UTF-8");

				// 支付宝交易号
				String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");

				// 交易状态
				String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"), "UTF-8");
				
				System.out.println("============================================= > 数据获取成功   trade_status = "+trade_status);

				if (trade_status.equals("TRADE_FINISHED")) {
					// 判断该笔订单是否在商户网站中已经做过处理
					// 如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
					// 如果有做过处理,不执行商户的业务程序

					// 注意:
					// 退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
				} else if (trade_status.equals("TRADE_SUCCESS")) {
					// 判断该笔订单是否在商户网站中已经做过处理
					// 如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
					// 如果有做过处理,不执行商户的业务程序

					// 注意:
					// 付款完成后,支付宝系统发送该交易状态通知
					
					// 添加会员信息
					if(new com.music.action.Member_Action().Add_Membership_Information(out_trade_no)){
						// 修改订单信息
						com.music.entity.Membership_Order Membership_Order = new com.music.entity.Membership_Order();
						Membership_Order.setAlipay_Order_Id(trade_no);
						Membership_Order.setOrder_Status("已支付");
						Membership_Order.setOrder_Number(out_trade_no);
						Membership_Order.setActual_payment(total_amount);
						// 修改订单信息
						new Membership_OrderUpdate().Modify_OrderInfo(Membership_Order);
					}
					return "success";
				} else {
					AlipayConfig.logResult(
							"----------------------notify_url支付失败--------------------------\ntrade_status" + trade_status);
				}

			} else {
				// 验证失败
				System.out.println("============================== > 验证失败 signVerified = " + signVerified);
				// 调试用,写文本函数记录程序运行情况是否正常
				String sWord = AlipaySignature.getSignCheckContentV1(params);
				AlipayConfig.logResult(sWord);
			}			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		// ——请在这里编写您的程序(以上代码仅作参考)——
		return "success";
	}
}
最近下载更多
微信网友_6602457430806528  LV6 2023年9月21日
13680889751  LV1 2023年5月13日
tanziyi1993  LV2 2022年2月17日
项目管理  LV6 2021年12月12日
wanglinddad  LV54 2021年12月9日
cc123456RR  LV5 2021年10月27日
加油干阳神  LV8 2021年7月15日
15871814851  LV1 2021年7月5日
橘子猫咪汽水  LV1 2021年5月29日
絮落无痕  LV13 2021年5月18日
最近浏览更多
qiyi666 4月2日
暂无贡献等级
CCCCWWWW  LV4 3月27日
admin_z  LV22 1月28日
Camellia-while  LV1 1月2日
gnnhka  LV10 2023年12月26日
徐万强  LV9 2023年12月12日
shuangfu  LV24 2023年12月2日
skook7  LV2 2023年11月21日
蹇金金  LV7 2023年11月7日
微信网友_6657940693880832  LV1 2023年9月21日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友