springboot项目集成支付宝接口超详细(附源码和沙箱测试)

首先我们把准备工作做好,再进行支付宝接口的集成

1.获取沙箱账号
获取沙箱账号
点击链接出现下图页面使用自己支付宝扫码登录

2.登录后进入下图页面
在这里插入图片描述3.向下拉到下图页面在这里插入图片描述4.点击开发服务下的沙箱进入下图页面,点击红色标注处(密钥之后会使用,现在先取到)
在这里插入图片描述5.下载支付宝获取密钥的工具,根据自己系统选择下载,我下载的Windows版本
在这里插入图片描述6.下载完成后打开如下图,点击红圈标注部分得到应用私钥和应用公钥(应用私钥和应用公钥之后会用到)
在这里插入图片描述
7.回归到第四步的页面,点击红圈标注部分
在这里插入图片描述8.进入如下页面(APPID和支付宝网关之后会用到),点击红圈标注处
在这里插入图片描述9.按下图标注内容进行配置
在这里插入图片描述10.点击保存设置后进入如下页面(支付宝公钥之后会用到)
在这里插入图片描述
以上十步需要整理的东西有:应用私钥,支付宝公钥,APPID和支付宝网关(注意:应用公钥不需要了),因为这些东西是往springboot项目集成是需要的。


此处插播一条
上述第九步点击下图红圈标注部分(卖家和买家信息之后会用到),还可以点击沙箱工具扫码在手机上下载一个沙箱版钱包,使用卖家账户登录
在这里插入图片描述


接下来将支付宝接口集成到项目中:
1.首先倒maven依赖

    <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-easysdk</artifactId>
            <version>2.1.2</version>
        </dependency>
        

        <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.10.140.ALL</version>
        </dependency>


        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.7</version>
        </dependency>

2.新建配置类(注意:将应用私钥,支付宝公钥,APPID和支付宝网关换成自己的)


public class AliPayConfig {

//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//    netapp映射的地址,,,根据自己的需要修改
//    private static String neturl = "http://6dynnj.natappfree.cc";

    // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号 按照我文章图上的信息填写
    public static String app_id = "2021000117631591";

    // 商户私钥,您的PKCS8格式RSA2私钥  刚刚生成的私钥直接复制填写
    public static String merchant_private_key ="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCEeDgzdsHpzcRgQZJB1BXpdQLHmoSx2Pefzoh/75JdaVi+kg44PSbcdfDW0in8/PAnXCqnKzBZpC7I8n+CMuHaa0l8FPVWED5xMn/8EK66pOKYnrjbdcRCRKPykkmdLfCitpSapRgR0wHDq4VrEPKWmN+uXD08Vw/nhYkE9aaWHJkhqWFiwKGdtP3zvJ6x7zblaGUIRqU7LKqN6stJM7m6KpVQesg3PU3PGH0euax/ICmcdjVr8YEYBcS7ocfBe4KXiPPX/KHs0TtRao0gPwmL6saIiLiaIAScV8WFueu/nN9zWxkZvId2Z7iZSiKyQ8IRfxbSt0bapqeUYgpLPqQHAgMBAAECggEAGP1AxNyTShLKB8p217o1g/vR0WuhupcOZ3QjpdbAyqRT3GdbDVrj2NTa4Pt2dkYU26f0V+K61T42oSu1yA7nMjfo/eJKQbkAvoPjRt6yx3zRTi8q+iNmKYYfU2QrRN5ktZ0xvVaFit8+RvY1TfQ9fxFJqO+3kYlu86LqLShWC50FiQMoLw6l54XAawMVpHnSsXAskV/oWJmib0yyHvOYk5jB8E34IwS/lZeHUFVyJMNCh26GZL7HIKltYH0ZpwIoJiflZb7e0yCMXbTrcLIdrTw9ExAdlcSyjExVH/aTFWLBi1/I+6GdtLaeR+SdiRMMEkftoLW7Alo6xARA3ulGKQKBgQDOrhjdyNqcCwH32voKLc+oVj2Ql1aOP+aw+lrs/QMKD9vChhXIkUYDD2v2Ht97/1M7f+I/XvEHU2+sp9Ozsu2Z0qaJAWWl3B/FrA363sTRs0cMkr5M1JqZhuv55HyWIn0x+EbuKGcfE9E+mZm21Wj1lgkXWbZay4X1bcegzb1XnQKBgQCkFKvCpj5L2VEvSajT7gzle0qYHEcrE9UJ2nsHSLJSSyxbH7WE0J/quTtTDG0oUM7e22Qxnnw+ZFmBNVHVb9GeIn/nJkO7G4kx7c8uZOU+oX+rUGZ/HUAq7wMc8J2UULKdmIm2tLuRoGQt88jopjJtc4e5mB5k10v93vo5t0ZC8wKBgQDNTHxg2eHk/L4wwLB8qfLK6RdwaBPPa0Qw6g6lt9FsDkKiIGTE/SEJayk3qoUd+4pm4OoRPrK3LzcPzwloR8Tidi98igm5TkW1KeodF2l0T9u0bpNfaBRFipMef8sNqyanG1MBwNpmMV45C4R369a9lBJlwnR0DhR7rVeNsLBytQKBgHYS7fs32JKKgzKNRjGkF6G4FFjb2Jb2QZNCps/6D2DK+dNlQSGfY8TsoPVFdvPRGt0icbqHOw9G9WXWsdnvCqBKYVI8pfbqfNLyN+pB7vogC5iDVg7ZRMjgkJPtzufhHnfsQgW5j1TfX9f1m7lXh+hdf+kdv5l/mQ7Ku7R239fjAoGAeUSPvooU9wBf6x7ObYSrHXUw6AofpFU4vF3YVPZbtxtagvVvmtb7rB5jlDqm2ZHyOkPD33vnNVOzfbUoKWrjhMBH84NT2ymZzPzqTBeGKYuImPKnxdpz4Zw0e32AyPB0loBgutmaOsTbrX472SOEoYz6tW4BUMZCKhN0aouYZcA=";
    // 支付宝公钥,对应APPID下的支付宝公钥。 按照我文章图上的信息填写支付宝公钥,别填成商户公钥
    public static String alipay_public_key ="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhru+uX7u/BKCYg2otmGTCopdq6bot2VI5y7mB9V9D5dn0AvT7nc+AP67qCwrRhRkOqDCgxTqwYkfhE2qc2wV6jMSyVfdnIlHBYMadk0EbPTZjXVVQ8HAymCDIreylDOyAupjfWoF6wG4b7e7y3sdA6G/OVIieqMQUz9hTrDYevx+Jc4EOCbWuKxTlZ67OiWCv0cq0c+ABSOSHXGTac8LGyQLNJmsYfau7uPeqBvy7Uueon5HayM5T93NWe9wgx5yEQuZ6D/BWL7q8V5b5XYuQyl2pYiIlW5A1iKSQ2L1PnukD5lcHma8Xrvp8nNpF1a3z5CPeCitreWki/yvUw37zwIDAQAB";
    // 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,其实就是你的一个支付完成后返回的页面URL
//    public static String notify_url = neturl+"/alipay/notify_url";
    public static String notify_url ="http://www.baidu.com";
    // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,其实就是你的一个支付完成后返回的页面URL
//    public static String return_url = neturl+"/alipay/return_url";
    public static String return_url ="http://www.baidu.com";
    // 签名方式
    public static String sign_type = "RSA2";

    // 字符编码格式
    public static String charset = "utf-8";

    // 支付宝网关
    public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
}

3.写测试接口
⑴controller类

@RestController
@RequestMapping("/payment")
public class PaymentController {
    @Autowired
    AliPayService alipayService;

    @RequestMapping("/pay")
    public void payMent(HttpServletResponse response, HttpServletRequest request) {
        try {
            alipayService.aliPay(response, request);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

⑵service类

    /**
     * 支付宝支付调用接口
     * @param response
     * @param request
     * @throws IOException
     */
    void  aliPay(HttpServletResponse response, HttpServletRequest request) throws IOException;

}
在这里插入代码片

⑶实现类


@Service
@Slf4j
public class AlipayServiceImpl implements AliPayService{


    @Override
    public void aliPay(HttpServletResponse response, HttpServletRequest request) throws IOException {
        response.setContentType("text/html;charset=utf-8");

        PrintWriter out = response.getWriter();
        //获得初始化的AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(AliPayConfig.gatewayUrl, AliPayConfig.app_id, AliPayConfig.merchant_private_key, "json", AliPayConfig.charset, AliPayConfig.alipay_public_key, AliPayConfig.sign_type);
        //设置请求参数
        AlipayTradePagePayRequest aliPayRequest = new AlipayTradePagePayRequest();
        //aliPayRequest.setReturnUrl(AlipayConfig.return_url);
        //aliPayRequest.setNotifyUrl(AlipayConfig.notify_url);

        //商户订单号,后台可以写一个工具类生成一个订单号,必填
        String order_number = new String(StringUtils.getStr());
        //付款金额,从前台获取,必填
        String total_amount = new String("201314");
        //订单名称,必填
        String subject = new String("臭猪张云婷");
        aliPayRequest.setBizContent("{\"out_trade_no\":\"" + order_number + "\","
                + "\"total_amount\":\"" + total_amount + "\","
                + "\"subject\":\"" + subject + "\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
        //请求
        String result = null;
        try {
            result = alipayClient.pageExecute(aliPayRequest).getBody();
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        //输出
        out.println(result);
        log.info("返回结果={}",result);


    }
}

⑷这是我写的一个工具类,用于随机生成订单号。

public class StringUtils {

    public  static String getStr(){
        int length=5;
        String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random=new Random();
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<length;i++){
            int number=random.nextInt(62);
            //charAt() 方法用于返回指定索引处的字符
            sb.append(str.charAt(number));
        }
        return sb.toString();

    }
}

3.运行项目,然后在浏览器输入http://localhost:项目端口/payment/pay,会跳转到下面页面
在这里插入图片描述4.点击登录账户付款
(使用买家信息登录进行支付,支付前记得先回去充值),支付成功后卖家账户收到转账

啊终于写完了,一篇博客写了两个小时,累死宝宝了


版权声明:本文为qq_44239079原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。