想要使用支付宝沙箱,首先需要开通支付宝沙箱的账号:
网址:
https://open.alipay.com/platform/home.htm
进入上面网址点击进入管理中心
再点击研发服务
然后就可以看到你的沙箱相关的信息:
下一步需要点击“设置/查看”设置你的公钥私钥,如下:
将“应用私钥”复制保存下来,在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:
就会弹出如下界面,然后再填写你的沙箱买家账号密码即可: