SpringBoot支付宝极简支付- 网站支付

Java猫

共 3375字,需浏览 7分钟

 ·

2021-12-20 07:07

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的订单进行支付,则会提示订单已支付。



扩展:

可以自己封装成扫码支付,把支付连接写入到二维码里面,进行扫码支付,扫码后会唤起手机支付宝。



浏览 101
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报