支付宝沙箱使用详细教程(Java版本)

想要使用支付宝沙箱,首先需要开通支付宝沙箱的账号: 网址:

进入上面网址点击进入管理中心

再点击研发服务

然后就可以看到你的沙箱相关的信息:

下一步需要点击“设置/查看”设置你的公钥私钥,如下:

将“应用私钥”复制保存下来,在Java代码中需要用到,然后再将“应用公钥”复制回填到对应位置。

最后再设置下支付宝网关:

到此,支付宝的沙箱就开通完成了,接下来就是Java代码的事情了。

要使用支付宝沙箱,需要依赖两个jar包:

然后再编写一个请求接受类(SpringMVC、Servlet等等):

@WebServlet("/pay")
public class PayServlet extends HttpServlet{
          
   

    // 应用id
    private String appId = "";

    // 应用私钥
    private String appPrivateKey = "";

    // 支付宝公钥
    private String alipayPublicKey = "";

    // 沙箱接口路径
    private String gatewayUrl = "";
 
    // 签名方式
    private String signType = "";
  
    // 支付宝异步通知路径,付款完毕后会异步post调用本项目的方法,必须为公网地址(一般使用异步处理支付成功后的业务操作,如果想访问本地ip可以使用内网穿透实现)
    private String notifyUrl = "";
   
    // 支付宝同步get通知路径,也就是当付款完毕后跳转本项目的页面,可以不是公网地址(一般使用同步支付跳转到支付成功提示页面)
    private String returnUrl = "";

    /**
     * 模拟支付订单
     *
     * @param request  请求
     * @param response 响应
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
          
   
          try {
          
   
            //实例化客户端,填入所需参数
            AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl, appId, appPrivateKey, "JSON",
                    "UTF-8", alipayPublicKey, signType);
            AlipayTradePagePayRequest payRequest = new AlipayTradePagePayRequest();
            String outTradeNo = UUID.randomUUID().toString(); // 商户订单号,商户网站订单系统中唯一订单号,必填
            String totalAmount = "100"; // 付款金额,必填
            String subject = "订单名称"; // 订单名称,必填
            String body = "订单描述"; // 商品描述,可空
            payRequest.setBizContent("{"out_trade_no":"" + outTradeNo + "","
                    + ""total_amount":"" + totalAmount + "","
                    + ""subject":"" + subject + "","
                    + ""body":"" + body + "","
                    + ""product_code":"FAST_INSTANT_TRADE_PAY"}");
            // 在公共参数中设置回跳和通知地址
            payRequest.setReturnUrl(returnUrl);
            payRequest.setNotifyUrl(notifyUrl);
            String form = alipayClient.pageExecute(payRequest).getBody(); // 调用SDK生成html表单
            response.setContentType("text/html;charset=" + Configs.get("encoding"));
            response.getWriter().write(form);
            response.getWriter().flush();
            response.getWriter().close();
        } catch (AlipayApiException | IOException e) {
          
   
            e.printStackTrace();
        }
    }
}

再写一个支付完成后异步通知调用请求接受类(同步通知也是同样的道理):

@WebServlet("/notify")
public class NotifyServlet extends HttpServlet{
          
   

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
          
   
        String orderId = request.getParameter("out_trade_no");
        System.out.println(orderId); // 输出订单号
    }
}

最后启动项目后,访问:http://localhost:8080/项目名/pay:

就会弹出如下界面,然后再填写你的沙箱买家账号密码即可:

最后附上支付流程时序图:

经验分享 程序员 微信小程序 职场和发展