前言
- 今天给大家分享一下如何接入支付宝支付,尽管不一定用得到,毕竟稍大点的公司都不会让一个普通员工写财务模块,但万一你去的是小公司呢?哈哈,开个玩笑
- 这篇博客会把接入支付宝的步骤列举出来,看不懂的可以问我或者百度
前序步骤
- 到支付宝开放平台注册一个账号
- 去文档中心那里找到电脑网站支付文档,点开直接看快速接入
接入
pom.xml
- 点击图中链接即可进去看到maven依赖的链接,进去复制就行了
- 我以前用的依赖
19年11月使用的依赖
<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.7.110.ALL</version>
</dependency>
在沙箱环境获取测试账号,以及付钱的账号
- 后面controller需要填的一些信息和扫码支付的测试账号都在图片里面
公钥私钥的生成可以下面这个工具
- 链接:https://pan.baidu.com/s/1GNB1V3-cUNTAlvHKl0_x8w
提取码:2dqo
- 也可以自己在文档中心下载
Controller层
- 做完上面那些步骤后就要在自己的项目的Controller层写代码了
- 下面这个controller都是直接从接入文档复制下来的,然后把我项目的一些信息和公钥那些填进去
- 不懂的问我或者看接入文档,接入文档很详细,比微信好多了
@RequestMapping(value = "/pay")
public void pay(HttpServletResponse httpResponse, String oid) throws Exception {
// 1.获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(
// 支付接口url
//https://openapi.alipaydev.com/gateway.do
"https://openapi.alipaydev.com/gateway.do",
// APPI
"2016100656227",
// 商家的私钥
"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCuRzePWKineX1AKR5780URiwxC3ObTQJfBtSCsQxLs+xmYPQS0YBQX/eIGkKB14tPXrVt8zvssNkcN7GaaX82b3CvOX0azZHL9lZAyDjPUkhlVp0SnyP2pO75EiMw+Ldy8pDPyzTcCERaTbZWn829JsW1urR/6zUk7waAb7QTB3G2RABaH7jNfihVdP1hfseKmZCuvSaqWBsd18q6YRzedrVOOTHFxEO0RjXk+Q/3HnI+jj9FBM1GUlsLlG7ok/GZCoilSJFl7D7M90qo1YRqKcranT+3M1IqETPWMNUSrvT/potAg+KG65t9/mQr7sE2RfBd/Pq1P/Ck/R99dalcJAgMBAAECggEAHSnvwz4r4vKyogT/g/B+s2PYZmv++IULoC/GSu1igmO2scIsQl79ndIve7fCElgl6Saqc6VTZN+kXlEcDmNPzfA3KG7LLwP1NjhMDARSahUUxj+afpVk1WgY+/EEdLdKBAtaYhwzQ1ZGt98TtypGikd1r5qrClZGFgjd2S59qE8KgKVpTrjB7KX25dqVWnpsgkU6EDpRowMH5x7qgyznfB0BVupCF88JFJES83vDdGkcXqYpkJcP7jKQ5bk4gQD0XzXjymMbQxD4qmWEUwOjvEt3+DioRcCzYwdJFMelpZXuncXo+gXG8MB22WVE4Co5ANScS19Hu/kN6qwkUT8sTQKBgQDwfZaXz8nrzSK2DNDFRjcPH+HxsxC9o79sC+3zvkG1jgAdluLIAvZAwR3yThxTF232rpubwNUKAUNhZoD9fPLAQ2emOYpccVYq5bnsnNkU067EcW7G4NcBogySxG6jB/OZUN5Ri6YXI3yLeFsH8D3VadMvSIJalO05WEVkH4nHRwKBgQC5hHyFOpRbPYg55mXc6Gsj5tO7SyKi6zaxPe2hDka2WT3U+qqxzv85gB8NcwfE4jIGrwKBgEHx1lGFgTbtqH7sZ0kfVPZuFtV839MJyWc3nECj0n7/Oft7HzIVYqQN5vvg6SpgKlBBaIKmuwAdXa4ZJ+obWTsZ3sIEgxz+cO2uZaqyv3k++CAvaTDwJ7QG0WO7Cm4WnPznyHWhrEH16gJWS6/wVFSl4pQtSp5g9gq/1ThWHFoBAoGBANK6OAuVKKdRzB+NcUe6jwXsxHhThA9alhvq2HRFD6QLKgYpgQ/mbGVkgDoFL8a7Adjrl8HojdfkS8up7O+SPW6lo0aCVLfjbgS86tBV0ZxrtLP5RG0IfpayH+N6HgMiEz1HR5qWGPC9rCUGvtgZqfwNNQ5qmOFeJM4PKRx6QP4o",
// 格式化编码
"JSON",
// 编码格式
"utf-8",
// 支付宝的公钥(在沙箱环境中可以获取)
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArC+n7jVK2EtqhtynNGDxdFVYrwT8jP2gu3VsRu7CSfdsAfuDTrwmeuKeaQCBQ19gSAslwTzfip8ebIsiA6jnhRrpNbd+c3FxBxHR6tB6pG2tvBPB6EtQAStRTjPWkiTF1laTbcynuKsiW8X4dgX92PxPfW/Fx8bHgDgxrEBhrURUtZHuQh6VBdUyLHAnpy2DU5K1gw3s8anGoOMnc4tFsXW4yDEZQrspxbhtLiU7tWc4fvd4GEQ7Ye7OoPIWtUZq1iyra8TMtT2KIhyYRqj+1K21HyMsJkmf0cvwIDAQAB",
// 签名的算法
"RSA2");
// 2.创建API对应的request
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl("http://localhost:8081/"); // 用户支付完比后跳转到页面,同步
// 用户支付成功异步通知的请求
alipayRequest.setNotifyUrl("http://8srwgj.natappfree.cc/updateOrder");//在公共参数中设置回跳和通知地址
Order order = orderService.getOrderById(oid);
// 订单的信息都是封装到下面的
alipayRequest.setBizContent("{" +
" \"out_trade_no\":" + oid + "," +
" \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," +
" \"total_amount\":" + order.getTotalPrice() + "," +
" \"subject\":\"Iphone6 16G\"," +
" \"body\":\"Iphone6 16G\"," +
" \"passback_params\":\"merchantBizType%3d3C%26merchantBizNo%3d2016010101111\"," +
" \"extend_params\":{" +
" \"sys_service_provider_id\":\"2088511833207846\"" +
" }" +
" }");//填充业务参数
String form = "";
try {
form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单
} catch (AlipayApiException e) {
e.printStackTrace();
}
httpResponse.setContentType("text/html;charset=" + "utf-8");
httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面
httpResponse.getWriter().flush();
httpResponse.getWriter().close();
}
- 两个链接要注意
- alipayRequest.setReturnUrl(“http://localhost:8081/”);// 用户支付完比后跳转到页面,同步,是浏览器发的所以可以使用localhost
// 用户支付成功异步通知的请求
alipayRequest.setNotifyUrl(“http://w5g9y4.natappfree.cc/updateOrder”);//在公共参数中设置回跳和通知地址
- 两个链接都是支付宝跳转的,第一个链接是支付成功后最终跳转到哪个页面,并且是同步的,你可以指定你的首页或支付成功页面,第二个链接是支付成功后跳转到第一个链接之前发的一个异步请求,这个请求可以发到你的想要跳转的controller里面做一些操作,如修改订单的未支付状态成已支付状态
模拟付款
- 也可以点击图片中的链接下载一个手机模拟的支付宝app付款