支付宝沙盒环境

一、操作步骤

1、支付宝扫一扫登陆支付宝官网。

2、申请入驻支付宝平台。

3、支付宝扫一扫登陆支付宝官网,找到沙盒入口。

4、在支付宝端配置你的项目。

5、通过支付宝秘钥生成器获得商户密钥对。

6、下载秘钥生成器

7、获得商户密钥对,并保存下来。

8、通过商户公钥获得支付宝公钥。保存支付宝公钥。

保存支付宝公钥。

二、实现代码

1、参数配置代码

// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
	public static String app_id = "20160934550635579";
	
	// 商户私钥,您的PKCS8格式RSA2私钥
    public static String merchant_private_key = "MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQDPQ+I4WTUim1wrZaWXsJu2rA21Jq8tfA607rsIoaAUhksC+AYFQWS3BnFRyMiAe538dS4R2udzXZJJ39vTqpnIfvztAfwqfL1tprkiPTZ/xtugPe+QRYEWu8dW03BouwQXmwXWBMzTIEddPT0HBCCbHf93I0VB9eceTd10cvZSAX/jviuz8FAEJd+BboLciyIuAz+DUJx+RJ0Yypsuc42gNZaO+n5I+FoEcZ+z4lBciE2Gv5vDg//iEiEkoiHNVGDMk1/nsbIO4jDB6rgaO7+mIlQ6RMuk/05nNAfWPVnT/7FRyZHBXxOlkN1YOjEPeuj5hIjGSHYJHchMVutDAgMBAAECggEBALzxxWhY6neB6aQmJa8C8PC2KEjb2xY74axPdXGI5cXQJtGuCM8Bri6rUOKdhyqZhox+xmDAjf49bv6pdFyhSU/dc/UbuiWBUa6ELoFoDCavwcdyrtF2ixeOV0pvtinDUxex2sAf4BkXc/crvFaJDLBbyGdzX8+hu++ETD28D5Dw6PYudQYbIguJiQ530Rpn+apAGFkrrkidMxGD4HxEsl+FI4ZOyncCpOeB/ShCStdecgp1fSgeULpiPFH8HQA1buXKDj3TNsY5VdCsgQ5HMvTmXt9ZT6ns8N1oaXQ5qOSVCNuup4pnvfQtjv2tw0t9QTffDxjWgECgYEA6uTwWB+Vubxb1mr97cAyRwBzoKQV6UcwxFcA7lCoqeFdGd0f9uKrUxeie06EPNTj4iAi/HpIhDzeomdckBcNprA2MAu1/RoyEGyAxc1E5J2zqkzlMnMOtSltYZVKL5uVRoFsCF2MPPZ0rYbGhrIT1zgzP9MGz12xLsylI9YcKpkCgYEA4eNqx2zLZoje7SZXfdwRd/aacRpyeazzOyUZrNxx4hO5uqkYCyhhFGLLuPrnkPrcAIS9r8wkUcVlPzq4NU0CqCI/hMH+2mgRTS/JxqC+4ugvUC6+lOot4tp9RdPLrOqpOwoAPGA1mWa2VFa47suQoUYBHyercLgZHrSi3sE8KjsCgEsDk7uRZfogfER/sJS6L1DGvdE/MtlzV00287FkIs78BLdRuQamOG/Tcd8jOTACV/m/jMNDN3sZI4gbi2gECgYEAoTpKB6duknPU8d2xCwNdcIuSdnITDSfVv/xeFBSQMHY11bZFlAkxKXTOxexIBiIXj0MvhN+neLn05ymJO3oJEGrJfX9d4RPwbXBTi7NGK/zfcFsm/0lFquZd9MDVI2+i9XUSLLi0IQR5IPAo/gNSX6NX6a9tNo5lxaqUv+sCgYEAk4OMHYzVQ3XfE/EQsKJvaXOzzDdTct9aro8kpBcq8/wpj67+iH1NQilXN22CRmQwu/h9+58tQ7OkZW3Wu7ydRtZ+ArPVJ0JU0IWsfOGxsyCjHH7ECoP0EqMxn+EppQrzxbTpcx7+7jicSor+rK17mdcDN4tlursdVE2blJ5N6ck=";
	
	// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AQEAwHqsdAKGs+B31WGzwGJOrQ6iyFUJX+CFQ/QUOiJvB7DiueO+1LQuTF3HFH+xco7023yAbclFV7cWI154/OsNs/0dDLHMa1Yr3SOI0v/jjV1ryfhry7nQcOdEjzhdv9QZhKIc86BzOcAJ3eO6BSSx5dfNtSJVESZr70CSkwyLM1Jw20MD4MIeJ0UYVjkrDgtYqixTlNdmqTk1TCoqhouWzKV7DWv92Khzaodna1f7fJ7cPg9k4CJ+WXwIDAQAB";

	// 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
	public static String notify_url = "http://xinyang.easy.echosite.cn/LEMarket/order/notify_url";

	// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
	public static String return_url = "http://yuxinyang.easy.echosite.cn/Market/order/return_url";

	// 签名方式
	public static String sign_type = "RSA2";
	
	// 字符编码格式
	public static String charset = "utf-8";
	
	// 支付宝网关
	public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
	
	// 支付宝网关
	public static String log_path = "C:\\";

2、支付代码

@RequestMapping("toPay")
	public String toPayFor(String orderId,HttpServletResponse response){
		AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
		//设置请求参数
		AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
		alipayRequest.setReturnUrl(AlipayConfig.return_url);
		alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
		Order order = orderService.findOrderById(orderId);
		//商户订单号,商户网站订单系统中唯一订单号,必填
		String out_trade_no=null;
		//付款金额,必填
		String total_amount=null;
		//订单名称,必填
		String subject=null;
		try {
			out_trade_no = new String(orderId.getBytes("ISO-8859-1"),"UTF-8");
			total_amount = new String((order.getOrderPrice()+"").getBytes("ISO-8859-1"),"UTF-8");
			subject = new String("手机商城");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		//商品描述,可空
		List<OrderDetail> detailList = order.getDetailList();
		String body = null;
		for (OrderDetail o : detailList) {
			body=body+o.getDetailGoods().getGoodsName()+",";
		}
		body=body.substring(0, body.length()-1)+"等商品";
		
		alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," 
				+ "\"total_amount\":\""+ total_amount +"\"," 
				+ "\"subject\":\""+ subject +"\"," 
				+ "\"body\":\""+ body +"\"," 
				+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
		//请求
		try {
			String result = alipayClient.pageExecute(alipayRequest).getBody();
			//输出
			response.setContentType("text/html; charset=utf-8");
			PrintWriter out = response.getWriter();
			out.print(result);
		} catch (AlipayApiException | IOException e) {
			e.printStackTrace();
		}
        return null;
	}

3、异步返回通知代码

@RequestMapping("notify_url")
	public void notifyUrl(HttpServletRequest request,HttpServletResponse response){
		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] + ",";
			}
			//乱码解决,这段代码在出现乱码时使用
			/*try {
				valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}*/
			params.put(name, valueStr);
		}
		
		boolean signVerified=false;
		try {
			signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type);
		//	signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, "UTF-8",AlipayConfig.SIGN_TYPE);
		} catch (AlipayApiException e1) {
			e1.printStackTrace();
		} //调用SDK验证签名

		//——请在这里编写您的程序(以下代码仅作参考)——
		
		/* 实际验证过程建议商户务必添加以下校验:
		1、需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
		2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
		3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
		4、验证app_id是否为该商户本身。
		*/
		PrintWriter out=null;
		try {
			out = response.getWriter();
		} catch (IOException e) {
			e.printStackTrace();
		}
		if(signVerified) {//验证成功
			//商户订单号
			String out_trade_no="";
			//交易状态
			String trade_status="";
			try {
				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");

				trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
			
			if(trade_status.equals("TRADE_FINISHED")||trade_status.equals("TRADE_SUCCESS")){
				//判断该笔订单是否在商户网站中已经做过处理
				//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
				//如果有做过处理,不执行商户的业务程序
				Integer rs = orderService.payForOrder(out_trade_no);
				if(rs>0){
					System.out.println("异步通知支付成功");
				}
				//注意:
				//付款完成后,支付宝系统发送该交易状态通知
			}
			out.println("success");
			
		}else {//验证失败
			out.println("fail");
		
			//调试用,写文本函数记录程序运行情况是否正常
			//String sWord = AlipaySignature.getSignCheckContentV1(params);
			//AlipayConfig.logResult(sWord);
		}
	}

4、同步返回通知代码

public String returnUrl(HttpServletRequest request){
		HttpSession session = request.getSession();
		session.setAttribute("user", session.getAttribute("user"));
		Integer rs = orderService.payForOrder(out_trade_no);
		if(rs>0){
			System.out.println("同步通知支付成功");
		}
		PrintWriter out=null;
		out.println("success");
		return "paysuccess";
	}

5、退款代码

public String refund(String orderId,Integer orderPrice){
		Integer rs = orderService.refund(orderId);
		double orderPrice1 = orderPrice.doubleValue();
		AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl,AlipayConfig.app_id,AlipayConfig.merchant_private_key,"json",AlipayConfig.charset,AlipayConfig.alipay_public_key,AlipayConfig.sign_type);
		AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
		request.setBizContent("{\"out_trade_no\":\""+ orderId +"\","
				+ "\"refund_amount\":\""+ orderPrice1 +"\"}");
		AlipayTradeRefundResponse response=null;
		try {
			response = alipayClient.execute(request);
		} catch (AlipayApiException e) {
			e.printStackTrace();
		}
		if(response.isSuccess() && rs>0){
		System.out.println("调用成功");
		return "success";
		} else {
		System.out.println("调用失败");
		return "fail";
		}
	}

三、注册域名

地址链接

1、注册登录

2、注册域名

3、下载客户端

下载这两个文件。放到同一目录下

4、配置文件

打开echosite.yml文件。

5、启动服务

双击exe文件,输入启动命令,窗口不可关闭,关闭即服务停止。

启动你项目之前,这个服务必须先启动。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值