不少同学在写商城想项目的时候,有遇到支付环节。今天我这里分享一下,JAVA项目,如何调用支付宝的沙箱环境。
首先第一步:百度搜索支付宝开放平台
第二步:登录进入首页,点击进入管理中心
特别注意:到这里下载生成这个码的一个软件,这是支付宝为我们提供的。这里也有详细的说明,我就不再说了。
https://docs.open.alipay.com/291/105971
此外,我们还需要下载支付宝给的一个 demo
https://docs.open.alipay.com/270/106291/
如何修改,具体如下:
1.复制
1.需要将这目录下\src\com\alipay\config 的AlipayConfig.java放到你的项目中。
2.\WebContent 下的所有jsp复制到项目中
3.\WebContent\WEB-INF\lib 所有.jar复制到项目中。
到此我们复制工作已经完成,接下来我们来修改这个demo
2.修改
修改完成我们的支付沙箱环境也已经算是搭建好了。但是,大家在做项目的时候一定会有这样的一个逻辑,就是让支付成功之后才可以生成订单,或者修改订单状态。目前我所使用的方法就是在return_url.jsp 这个里写一个js,自动提交form表单。虽然有个bug,但对于初学者,这是一个不错的解决方案。下面附上jsp代码。
这是支付宝,返回订单生成页的jsp,如果提前关掉该页面,则自动提交表单失效。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>电脑网站支付return_url</title>
</head>
<%@ page import="java.util.*"%>
<%@ page import="java.util.Map"%>
<%@ page import="com.movie.utils.*"%>
<%@ page import="com.alipay.api.*"%>
<%@ page import="com.alipay.api.internal.util.*"%>
<%
/* *
* 功能:支付宝服务器同步通知页面
* 日期:2017-03-30
* 说明:
* 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
* 该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
*************************页面功能说明*************************
* 该页面仅做页面展示,业务逻辑处理请勿在该页面执行
*/
//获取支付宝GET过来反馈信息
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);
}
boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type); //调用SDK验证签名
//——请在这里编写您的程序(以下代码仅作参考)——
if(signVerified) {
//商户订单号
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 total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8");
out.println("trade_no:"+trade_no+"<br/>out_trade_no:"+out_trade_no+"<br/>total_amount:"+total_amount);
}else {
out.println("验签失败");
}
//——请在这里编写您的程序(以上代码仅作参考)——
%>
<body>
<script type="text/javascript">
function dtime(){
setInterval(sub(), 30000);
}
function sub(){
document.getElementById("frm").submit();
}
</script>
<body onload="dtime();">
<form action="getOrder" method="post" id="frm">
<input type="hidden" name="order_where" value="${order.order_where}">
<input type="hidden" name="order_id" value="${order.order_id}">
<input type="hidden" name="order_seq" value="${order.order_seq}">
<input type="submit" >
</form>
</body>
</html>