SpringBoot支付宝极简支付- 网站支付
SpringBoot支付宝极简支付
在电商项目中或者其他需要支付的项目中,往往需要支付宝进行支付。
在这里,写一个支付宝极简支付的流程。
创建SpringBoot项目
项目配置 application.properties文件:
# 应用名称
spring.application.name=springboot-zfb
# 应用服务 WEB 访问端口
server.port=8080
#页面跳转
spring.mvc.view.prefix=classpath:/templates/
spring.mvc.view.suffix=.html
依赖:
<dependency>
<groupId>com.alipay.sdkgroupId>
<artifactId>alipay-sdk-javaartifactId>
<version>4.18.0.ALLversion>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-thymeleafartifactId>
dependency>
支付宝配置类:
/**
* 支付宝配置类
*
* @Author 黄柏茗
* @Date 2021-12-17
*/
public class AliPayConfig {
//商户 appid (收款方ID)
public static String APPID = "你的沙箱应用中的APPID";
//私钥pkcs8格式
public static String RSA_PRIVATE_KEY = "你的沙箱应用中的私钥";
// 服务器异步通知页面路径需http://或者https://格式的完整路径,不能加21G=123这类自定义参数,必须外网可以正常访问
//服务器异步通知
public static String notify_uri = "你的服务器通知地址";
//返回同步页面
public static String return_url = "付款成功后跳转的同步页面";
//请求网关地址
public static String URL = "https://openapi.alipaydev.com/gateway.do";
//字符编码
public static String CHARSET = "UTF-8";
//返回格式
public static String FORMAT = "json";
//支付宝公钥
public static String ALIPAY_PUBLIC_KEY = "沙箱应用中的支付宝公钥";
//RSA2签证
public static String SIGNTYPE = "RSA2";
}
测试支付Controller:
/**
* 支付 Controller
* @Author 黄柏茗
* @Date 2021-12-17
*/
@Controller
@RequestMapping("/test")
public class PayController {
/**
* 发起支付
* @param out_trade_no 商品单号
* @param subject 商品名称
* @param total_amount 付款金额
* @param body 商品描述
* @param timeout_express 支付超时时间 (秒m)
* @param product_code 销售产品码
* @return 返回支付表单信息
*/
@ResponseBody
@PostMapping("/pay")
public String pay(String out_trade_no,String subject,String total_amount,String body,String timeout_express,String product_code) throws AlipayApiException {
System.out.println("开始支付");
//1.封装Rsa签名方式
AlipayClient alipayClient = new DefaultAlipayClient(AliPayConfig.URL,AliPayConfig.APPID,AliPayConfig.RSA_PRIVATE_KEY,AliPayConfig.FORMAT,AliPayConfig.CHARSET,AliPayConfig.ALIPAY_PUBLIC_KEY,AliPayConfig.SIGNTYPE);
//2.创建request请求
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
//3.封装传入参数
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setOutTradeNo(out_trade_no);
model.setSubject(subject);
model.setTotalAmount(total_amount);
model.setBody(body);
model.setTimeoutExpress(timeout_express);
model.setProductCode(product_code);
//设置参数
request.setBizModel(model);
//设置异步通知回调地址
request.setNotifyUrl(AliPayConfig.notify_uri);
//设置同步回调地址
request.setReturnUrl(AliPayConfig.return_url);
//4.生成支付表单
String form =alipayClient.pageExecute(request).getBody();
System.out.println("正在支付,请查看网页,进行支付,支付完成后会跳转同步回调地址");
System.out.println("支付表单:"+form);
return form;
}
}
提示:传入的参数,可以使用Java实体进行封装,这里单独写出参数为了好理解。
测试:
发起支付:
确定支付:
支付完成:
到此,支付已经完成。
提示:
可根据自身业务需求,设置支付完成后的同步回调地址,会在服务端同步回调通知地址。
注意:
1.调用支付后,会跳转到支付宝支付页面进行支付,如果配置有同步回调地址,则支付成功后会跳转到回调地址页面。如果没有同步回调地址,则会停留在支付成功页面,建议加上同步回调地址。
2.支付是根据商品单号来判断是否已经完成支付,如果单号为1001的订单已支付成功,再次使用单号为1001的订单进行支付,则会提示订单已支付。
扩展:
可以自己封装成扫码支付,把支付连接写入到二维码里面,进行扫码支付,扫码后会唤起手机支付宝。
评论