Java 如何实现支付宝电脑支付基于 Servlet 版本,具体的实现步骤如下:
1. 注册支付宝商家账号
首先需要注册一个支付宝商家账号。
2. 下载支付宝开发者工具包
下载支付宝提供的开发者工具包,官方推荐使用 Java 版本的 SDK。
3. 创建订单
在进行支付前需要创建一个订单,在创建订单时需要填写订单的一些基本信息,例如订单金额、商品名称、订单号等。
以下是创建一个订单的示例代码:
public String createOrder(HttpServletRequest req, HttpServletResponse resp){
//商户订单号,必填
String out_trade_no = req.getParameter("orderNo");
//订单名称,必填
String subject = req.getParameter("subject");
//付款金额,必填
String total_fee = req.getParameter("totalFee");
//商品描述,可空
String body = req.getParameter("body");
//获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", app_id, merchant_private_key, "json", charset, alipay_public_key, sign_type);
//设置请求参数
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
request.setBizContent("{" +
" \"out_trade_no\":\""+ out_trade_no +"\"," +
" \"seller_id\":\""+ seller_id +"\"," +
" \"total_amount\":\""+ total_fee +"\"," +
" \"subject\":\""+ subject +"\"," +
" \"body\":\""+ body +"\"," +
" \"timeout_express\":\"30m\"}");
//请求支付宝创建订单
AlipayTradeCreateResponse response = alipayClient.execute(request);
return response.getBody();
}
4. 获取支付页面
在创建订单后,需要将用户重定向到支付页面。支付宝提供了一个接口,用于获取支付页面的 URL,具体的步骤如下:
以下是获取支付页面 URL 的示例代码:
public String getPaymentPage(HttpServletRequest req, HttpServletResponse resp){
//商户订单号,必填
String out_trade_no = req.getParameter("orderNo");
//获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", app_id, merchant_private_key, "json", charset, alipay_public_key, sign_type);
//设置请求参数
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(return_url);
alipayRequest.setNotifyUrl(notify_url);
//商户订单号,商户网站订单系统中唯一订单号,必填
String out_trade_no = new String(req.getParameter("orderNo").getBytes("ISO-8859-1"),"UTF-8");
//付款金额,必填
String total_amount = new String(req.getParameter("totalFee").getBytes("ISO-8859-1"),"UTF-8");
//订单名称,必填
String subject = new String(req.getParameter("subject").getBytes("ISO-8859-1"),"UTF-8");
//商品描述,可空
String body = new String(req.getParameter("body").getBytes("ISO-8859-1"),"UTF-8");
alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
+ "\"total_amount\":\""+ total_amount +"\","
+ "\"subject\":\""+ subject +"\","
+ "\"body\":\""+ body +"\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//请求支付宝页面支付
String result = alipayClient.pageExecute(alipayRequest).getBody();
return result;
}
5. 处理回调通知
在用户完成支付后支付宝会发送一个回调通知,该通知用于告诉商家用户已经支付成功。商家需要在接收到回调通知后,对用户进行确认,确认成功后才能将订单标记为已支付。以下是处理回调通知的示例代码:
public void notify(HttpServletRequest request, HttpServletResponse response) throws Exception {
//获取支付宝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);
}
//商户订单号
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 trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");
if(trade_status.equals("TRADE_FINISHED")){
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)和支付宝交易号(trade_no)进行返利操作
//如果有做过处理,不执行返利操作
//注意:TRADE_FINISHED只会在支付完成后触发,TRADE_SUCCESS则需要去进行后续的订单确认操作
response.getWriter().write("success");
}else if (trade_status.equals("TRADE_SUCCESS")){
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)和支付宝交易号(trade_no)进行返利操作
//如果有做过处理,不执行返利操作
//注意:TRADE_SUCCESS通常表示支付完成,同时需要在商家后台进行订单确认操作
response.getWriter().write("success");
}
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java如何实现支付宝电脑支付基于servlet版本 - Python技术站