Springboot+from表单+支付宝即时到账交易接口+html+Wap支付+回调验签

Controller*

	@ResponseBody
	@PostMapping("/pay11")
	public  Map<String, Object> doPostForm(@RequestBody Rechange params) {	
	        Map<String, Object> map = new HashMap<>();
	        // params传递的参数
	        String formResult = sendxwwwform( params);//调用from表单法法
	        map.put("data", formResult);
		return map;
    }
	
 /**
     * form表单提交
     * @param url
     * @param paramMap
     * @return
     */
    public    String sendxwwwform(Rechange params) {
    
      //生成订单号的工具
      DateFormat order_d = new DateFormat();
      String out_trade_no = order_d.dateFormat().get("random").toString();
      //生成签名的Util      我的文章中有生成签名的方法   需要的请自行查看
      BaseBean maps = new BaseBean(); 
      //map集合需要存储的参数
      Map<String, Object> map = new HashMap<>();
      map.put("_input_charset","utf-8");//参数编码字符集
      map.put("service","create_direct_pay_by_user");
      map.put("partner","");//合作者身份ID
      map.put("seller_id", "");//卖家支付宝用户号
      map.put("payment_type", "1");//只支持取值为1(商品购买)。
      map.put("notify_url", "http://***/notify_url");//服务器异步通知页面路径
      map.put("return_url", "http://***/frame");//页面跳转同步通知页面路径
      map.put("out_trade_no", out_trade_no);
      map.put("subject", "");//商品名称
      map.put("total_fee", params.getMoney());//交易金额	
      //调用方法 生成签名
      map = maps.toMap(map);

    	
    	String ress = "
" + "" + ""//合作者身份ID + ""//卖家支付宝用户号 + ""//只支持取值为1(商品购买)。 + "" + "" + "" + ""//商品名称 + ""//交易金额 + ""//传入生成的签名 + "" + ""
; //from表单传给前端 拉取支付页面 return ress; }
	@RequestMapping(value="/notify_url")
	@ResponseBody
	public void asy(HttpServletRequest request) throws UnsupportedEncodingException {

		
		//存储回调接口获取的参数
		Map<String,String> params = new HashMap<String,String>();
		//获取回调需要验签的参数
		Map<String, Object> params2 = new HashMap<String,Object>();
		Map requestParams = request.getParameterMap();
		Map<Object, Object> resultMap = new HashMap<>();
		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);
			
			if(name.equals("sign_type") || name.equals("sign")  || valueStr.equals("")){
			}else{
				params2.put(name, valueStr);
			}
		
		}
		//调用加签接口
		BaseBean maps = new BaseBean(); 
		String ss = (String)maps.toMap(params2).get("sign");
		
		            try {
//		            	商户订单号
//						String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");
//
//						String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"), "UTF-8");
						
						String sign = new String(request.getParameter("sign").getBytes("ISO-8859-1"), "UTF-8");
					
//						验证签名 是否匹配
						if(sign.equals(ss)){
							System.out.println("验证签名通过1");
							
							//获取 通知校验ID
							String notify_id = (String)params2.get("notify_id");
							//判断校验ID是否为空
							if(!params2.get("notify_id").equals("")){
								
							//调用 下文  notify_id验签方法
							String boole = sendGet("合作者身份ID",(String)params2.get("notify_id"));	
							//判断是否成功
								if(boole.equals("true")){
									System.out.println("验证签名通过2");
									
	//								商户订单号
									String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");
	
									String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"), "UTF-8");
									
									String total_fee = new String(request.getParameter("total_fee").getBytes("ISO-8859-1"), "UTF-8");
									
									//判断是否支付成功
									 if ("TRADE_SUCCESS".equals(trade_status)) {
			
									 }else{
										  System.out.println("支付失败");
									 }
								}else{
								 System.out.println("notify_id验签失败!");
								}
							}else{
								 System.out.println("notify_id为空!");
								}
						}else{
							 System.out.println("sign验签失败!");
						}					
					} catch (UnsupportedEncodingException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
		            System.out.println("SUCCESS");
	}
	
  public  String sendGet( String partner,String notify_id) {
	        String result = "";
	        BufferedReader in = null;
	        try {
	            String urlNameString ="http://notify.alipay.com/trade/notify_query.do?partner=" +partner+"¬ify_id="+notify_id;
	            System.out.println(urlNameString);
	            URL realUrl = new URL(urlNameString);
	            // 打开和URL之间的连接
	            URLConnection connection = realUrl.openConnection();
	            // 设置通用的请求属性
	            connection.setRequestProperty("accept", "*/*");
	            connection.setRequestProperty("connection", "Keep-Alive");
	            connection.setRequestProperty("user-agent",
	                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
	            // 建立实际的连接
	            connection.connect();
	            // 获取所有响应头字段
	            Map<String, List<String>> map = connection.getHeaderFields();
	            // 遍历所有的响应头字段
	            for (String key : map.keySet()) {
	                System.out.println(key + "--->" + map.get(key));
	            }
	            // 定义 BufferedReader输入流来读取URL的响应
	            in = new BufferedReader(new InputStreamReader(
	                    connection.getInputStream()));
	            String line;
	            while ((line = in.readLine()) != null) {
	                result += line;
	                System.out.println(line);
	            }
	        } catch (Exception e) {
	            System.out.println("发送GET请求出现异常!" + e);
	            e.printStackTrace();
	        }
	        // 使用finally块来关闭输入流
	        finally {
	            try {
	                if (in != null) {
	                    in.close();
	                }
	            } catch (Exception e2) {
	                e2.printStackTrace();
	            }
	        }
	        return result;
	    }

你可能感兴趣的:(springboot,支付宝接口)