做项目时候如果能有个高大上的支付功能,那就再好不过了!

本篇用支付宝的沙箱环境做一个简单的支付接入。

由于支付宝正式环境需要营业执照为支撑,因此目前只能以沙箱环境模拟支付流程。

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和支付宝网关,这两者可以在沙箱应用下获得,将其填入对应的配置属性处

appid

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地址

如若进入支付页面,则为配置成功

支付7

10.进行支付,返回交易结果,则整个支付流程完成。

结果1

注:本教程未涉及支付宝异步获取支付结果,如需异步获取支付结果,需有公网可访问的地址供支付宝进行回调,退款等流程也需要以此支撑,这些将在未来进行更新。

至此,便可以在项目中使用对应支付功能。