做项目时候如果能有个高大上的支付功能,那就再好不过了!
本篇用支付宝的沙箱环境做一个简单的支付接入。
由于支付宝正式环境需要营业执照为支撑,因此目前只能以沙箱环境模拟支付流程。
1、登陆支付宝开放平台,进入沙箱页面
https://open.alipay.com/platform/home.htm
2、下载阿里官方Demo
https://docs.open.alipay.com/270/106291/
找到src\com\alipay\config下的AlipayConfig.java文件
打开后可以看到如下配置
3.接着完善所有配置,首先是APP-id和支付宝网关,这两者可以在沙箱应用下获得,将其填入对应的配置属性处
4、公私钥的获取需下载支付宝的RSA工具
https://docs.open.alipay.com/291/105971
按照文档操作获得对应密钥后,将对应的私钥输入到文件对应位置
公钥请填写对应的支付宝公钥。
5.通知页面路径可暂时不写,将文件保存后放入项目中,然后将\WebContent\WEB-INF\lib下的jar包导入工程
将return_url.jsp和notify_url.jsp导入网页的目录(此处以JAVAWEB项目为例,spring框架可自行类比)
创建对应的servlet,将alipay.trade.page.pay.jsp下的java代码复制入servlet。
@WebServlet("/PaymentServlet")
public class PaymentServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
//获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
//设置请求参数
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(AlipayConfig.return_url);
alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
//商户订单号,商户网站订单系统中唯一订单号,必填,以随机UUID为例
String out_trade_no = new String(UUID.randomUUID().toString().getBytes("ISO-8859-1"),"UTF-8");
//付款金额,必填,以100为例,可自行修改
String total_amount = new String("100".getBytes("ISO-8859-1"),"UTF-8");
//订单名称,必填
String subject = new String("这里填你的订单名称".getBytes("ISO-8859-1"),"UTF-8");
//商品描述,可空
String body = new String("这里填你的订单描述".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 = null;
try {
result = alipayClient.pageExecute(alipayRequest).getBody();
//用writer输出
PrintWriter out = response.getWriter();
//输出
out.println(result);
} catch (AlipayApiException e) {
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
6.打开return_url.jsp和notify_url.jsp
将顶部config路径设置为自己的config文件所在路径
7.将AlipayConfig配置文件中的同步与异步地址修改为
同步:http://工程公网访问地址/项目路径/return_url.jsp
异步:http://工程公网访问地址/项目路径/notify_url.jsp
8.完成后下载沙箱版支付宝
获取对应的沙箱支付帐号密码,使用买家登陆。
9.启动服务器,打开刚才的servlet地址
如若进入支付页面,则为配置成功
10.进行支付,返回交易结果,则整个支付流程完成。
注:本教程未涉及支付宝异步获取支付结果,如需异步获取支付结果,需有公网可访问的地址供支付宝进行回调,退款等流程也需要以此支撑,这些将在未来进行更新。
至此,便可以在项目中使用对应支付功能。