pull/1/head
puxcofief 8 months ago
parent 3454bdffc7
commit 467bf477f9

@ -1,78 +1,109 @@
package com.cn.servlet;
package com.cn.servlet; // 定义Servlet所在的包名
import java.io.IOException;
import java.util.Date;
import java.io.IOException; // 导入IOException用于处理输入输出异常
import java.util.Date; // 导入Date类用于处理日期
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException; // 导入ServletException用于处理Servlet运行时的异常
import javax.servlet.http.HttpServlet; // 导入HttpServlet是所有HTTP servlet的父类
import javax.servlet.http.HttpServletRequest; // 导入HttpServletRequest代表客户端的请求信息
import javax.servlet.http.HttpServletResponse; // 导入HttpServletResponse代表服务器对客户端的响应
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.cn.domain.Prep;
import com.alipay.api.AlipayApiException; // 导入AlipayApiException用于处理支付宝API异常
import com.alipay.api.AlipayClient; // 导入AlipayClient支付宝API客户端
import com.alipay.api.DefaultAlipayClient; // 导入DefaultAlipayClient支付宝API客户端默认实现
import com.alipay.api.request.AlipayTradePagePayRequest; // 导入AlipayTradePagePayRequest支付宝电脑网站支付请求
import com.cn.domain.Prep; // 导入Prep类该类定义了订单的数据结构
/**
*
* @ClassName: AlipayServlet
* @Description: PC
* @author: ljy
* @date: 20191114 1:10:23
* AlipayServlet
* @ClassName: AlipayServlet AlipayServlet
* @Description: PC
* @author: ljy Servlet
* @date: 20191114 1:10:23 Servlet
*/
public class AlipayServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 1L; // 用于序列化
/**
*
*/
public AlipayServlet() {
super(); // 调用父类的构造函数
// TODO Auto-generated constructor stub
}
/**
* GET
* @param request HttpServletRequest
* @param response HttpServletResponse
* @throws ServletException Servlet
* @throws IOException
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 支付宝网关地址沙箱环境和外网真实环境使用不同的URL
String URL = "https://openapi.alipaydev.com/gateway.do"; // 沙箱环境使用
//String URL = "https://openapi.alipay.com/gateway.do"; // 外网真实环境使用
String APP_ID = "2016101400683589"; // 即创建应用后生成
String APP_PRIVATE_KEY = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCHuMiTsXiHv1CS+VnqpiY90+iT1PZRHAFcKFb7Zoe2+1Re1/TNTlZ1CGSlJ1XKub5jRZKsL+a+Eqd2sDBBojv639nQj9yuf5on2PsNopzJLVnDyvH+WQHjZJiW/3kGNsj4oI9tB1dBIxLO1DaB3jtuVBi1wDlJRdK3pIeibgwy3jGOnPHE8wtq901KejI1XSJMrClvJfQ0f5G10GVA9Rl3dfnph/VrAm3v21Qkj6rM3HJ58/CYf/tqbl2VPrCjn+7AmuximGgD/GHRpjZtJJZ9nhDguRnPGWwsyQdAu91hWoOMEKCkur7CYyHajjmAFFjtLvLf6tdFMpxvKzCIrOnDAgMBAAECggEAe73V4hKkud+MLvR5Lp9drnFOU7qO+VR3SPbel0fb5NExE2gCIk2SNhH48Trz1WmUVB5So/rofdO0K1poJO8tkIYXqTgBFHfyrPH/s2bXW/SlKwYVrLiqKBDHrqQuS6QXh9eb7OQMga7grwJ8z9s2hFjYTp17nXqzrAuuPkHnjVgBTcvK4G9hmnYl1kSwu+swCRADutGawZab07B66y6poAy0pMLerS14XhIfjwxo1H4FVKZtQtG5IJGyWfhrRVceEiCFgH6R7gjpzR3oInSFrX1Vej4q4F1QbvPARKv/6/HDy6nKmDy3NgAtfJpnDc7kyNT63F+kJ4EpVBbmpjkHwQKBgQDUCWHLBQuv6Fm8eZlD0ONqwQAnbxAhtnmI/hU1ukEzceua0nlnjA/VCY4DLlxZ0dyen0FG8+4Eh+xOhjYQdMAAO0mR5WNS+vQqM5QhohVuwj5FHGiwg+1jDsI5NMsYDo1HMjQcQMa4uKI6Y7CNorqZWRZUuRM78G0LXqPAESAhxwKBgQCj3LabZ1PUQM79LLDHdBaK3fdKGlEpo9KzgAzVrPsrgKnZne5a8CLMZle++r31kK7lfpW589F+S6bSyZ1s4g3hQEJ6zlplsuvN0aff8Ik+AIc72RGzTLassZAC1A3Q+ijJD5kJgYBQRCBhHr7O5I6foqfNjFqjSV6ioAmaoze4JQKBgQCW4Aom9PMo+zMHKptFJxj7OFPMu3mGE5qNQQaEkYCdg507MDLU3FPTqhXT66QpAWxzriw7uYyOysz53wQPV5PbVlR2LPws6obclJD+EaAgjLTUZm+T0nwS9Uh8fjVZa9lZZL6xr+H3ROGinJbfYYBXZ429QWgPSXe+FFx+aXEstwKBgQCe8lKDbfhH1FG0Dayw3G+dZnAghmSiQpH4okZQ4omFCjo3qFV0CqmGoeONkkW/NQgh/ucXyGU24AVDRGSbIK+cBqw12YKgUa0gKbVwqS9HYFXNfOMJjGlKHLb3t2BrjK0RUzr8mIyxz1OlQaCOqe+a87lXzkSBTYMptpl6UcaTrQKBgQDTUOCkM5OOC8PvgjVP996vlBcY3DISH5FVtiaxbyR58SnxlAkTgZsRzEb36V5RaqS0bcjE3UOEaFKM5EBPFuGxWOca85mFcwFkiIgbvP8K9kaOYNVecGIU5HdDLTwfIEGAR1OsQBLFnEjvVI13XSMAyfjrmiyFT5llgTLBuZvR6Q=="; //开发者私钥,由开发者自己生成
String APP_ID = "2016101400683589"; // 支付宝分配给开发者的应用ID
String APP_PRIVATE_KEY = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQ..."; // 开发者私钥,由开发者自己生成
String FORMAT = "json"; // 参数返回格式,只支持 json
String CHARSET = "UTF-8"; // 编码集,支持 GBK/UTF-8
String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvjme7kFbZAMU9TDn6iZBvOFAGUaQu47mXNhZ7EgD6s5K3/NkVTDOCaqRAZ7qBpKwNdsYOeCl2JsugIZzEPtIbuPZhYSUgXlLg4+nTt5k4IHu6hQylTX82nLVlMAaCw7xmMc8OH99ym/mLvf/Os1UQVvvtbta+19bFzuaHn8fem8IXtIP3PN1NuHpYVTzKTtbJIwgM9yDCD5lfg9qIRWiSlnrzc+t+R5+aUwolORg/eyea0i/sMghbPyb/rUY6LPVKgZXhvIE8k0ebnVoVREGzilFb3L8fZWfsenLvEuiubjFJ4CpEOV7YbmorsC9KsKNMfFg3UMqimSCY+4y6hDYHQIDAQAB"; //支付宝公钥,由支付宝生成
String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvjme..."; // 支付宝公钥,由支付宝生成
String SIGN_TYPE = "RSA2"; // 商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA推荐使用 RSA2
// 从PayServlet获取的订单信息
Prep prep = (Prep) request.getAttribute("prep");
Prep prep = (Prep) request.getAttribute("prep"); // 从请求中获取订单对象
String out_trade_no = String.valueOf(new Date()) + String.valueOf(prep.getPrepId()); // 商户订单号,商户网站订单系统中唯一订单号,必填
// 构造商户订单号,确保唯一性
String out_trade_no = String.valueOf(new Date()) + String.valueOf(prep.getPrepId());
String total_amount = String.valueOf(prep.getPrice())+".00"; // 付款金额,必填
String subject = prep.getStartStation()+"站 - "+prep.getEndStation() + "站 火车票"; // 商品名称
//String returnUrl = "http://localhost:8080/ticketing/PayServlet?temp=1&prepId="+prep.getPrepId()+""; // 回跳地址
// 回跳地址,用户支付完成后跳转的地址
String returnUrl = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/ticketing/PayServlet?temp=1&prepId="+prep.getPrepId()+"";
AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE); // 获得初始化的AlipayClient
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();// 创建API对应的request
alipayRequest.setReturnUrl(returnUrl);
alipayRequest.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp");// 在公共参数中设置回跳和通知地址
alipayRequest.setBizContent("{" + " \"out_trade_no\":\""+out_trade_no+"\","
+ " \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," + " \"total_amount\":"+total_amount+","
+ " \"subject\":\""+subject+"\"," + " \"body\":\""+subject+"\","
+ " \"passback_params\":\"merchantBizType%3d3C%26merchantBizNo%3d2016010101111\","
+ " \"extend_params\":{" + " \"sys_service_provider_id\":\"2088511833207846\"" + " }" + " }");// 填充业务参数
String form = "";
// 初始化AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
// 创建支付请求
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(returnUrl); // 设置回跳地址
alipayRequest.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp"); // 设置异步通知地址
// 填充业务参数
alipayRequest.setBizContent("{" +
" \"out_trade_no\":\""+out_trade_no+"\"," +
" \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," +
" \"total_amount\":"+total_amount+"," +
" \"subject\":\""+subject+"\"," +
" \"body\":\""+subject+"\"," +
" \"passback_params\":\"merchantBizType%3d3C%26merchantBizNo%3d2016010101111\"," +
" \"extend_params\":{" +
" \"sys_service_provider_id\":\"2088511833207846\"" +
" }" +
" }");// 填充业务参数
String form = ""; // 用于存放生成的表单HTML代码
try {
form = alipayClient.pageExecute(alipayRequest).getBody(); // 调用SDK生成表单
} catch (AlipayApiException e) {
e.printStackTrace();
e.printStackTrace(); // 异常处理
}
// 设置响应内容类型
response.setContentType("text/html;charset=" + CHARSET);
response.getWriter().write(form);// 直接将完整的表单html输出到页面
// 输出表单HTML代码到页面
response.getWriter().write(form);
// 刷新和关闭PrintWriter
response.getWriter().flush();
response.getWriter().close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
* POSTdoGet
* @param request HttpServletRequest
* @param response HttpServletResponse
* @throws ServletException Servlet
* @throws IOException
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
doGet(request, response); // 直接调用doGet方法处理
}
}
Loading…
Cancel
Save