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;
}