SpringBoot简单整合沙箱支付

SpringBoot简单整合沙箱支付

操作步骤:

  1. 下载官方demo
  2. 配置 AlipayConfig相关信息
  3. SpringBoot项目创建
  4. 解压官方demo,导入项目
  5. 业务代码编写
  6. 测试运行
  7. 相关注意事项

一、下载官方demo

下载链接:https://docs.open.alipay.com/270/106291/
SpringBoot简单整合沙箱支付_第1张图片

二、配置 AlipayConfig相关信息

(一)注册支付宝开发平台账号
SpringBoot简单整合沙箱支付_第2张图片

(二)登录后台选择服务类型,并完成信息填写

选择自研开发服务→填写个人信息

SpringBoot简单整合沙箱支付_第3张图片
(三)进入研发服务
SpringBoot简单整合沙箱支付_第4张图片
(四)配置密钥
SpringBoot简单整合沙箱支付_第5张图片
SpringBoot简单整合沙箱支付_第6张图片
点击“生成方法”,打开界面如下:
SpringBoot简单整合沙箱支付_第7张图片
下载密钥生成工具,默认安装后,启动如下应用,然后点击生成密钥:
在这里插入图片描述
SpringBoot简单整合沙箱支付_第8张图片

进行公钥的设置
SpringBoot简单整合沙箱支付_第9张图片
选择“公钥”,将生成的公钥复制到输入框中,点击保存设置
SpringBoot简单整合沙箱支付_第10张图片
SpringBoot简单整合沙箱支付_第11张图片
至此,AlipayConfig的相关信息配置完毕

三、SpringBoot项目创建

(一)使用Spring Initializer快速创建SpringBoot项目
SpringBoot简单整合沙箱支付_第12张图片
(二)相关信息
SpringBoot简单整合沙箱支付_第13张图片
(三)选择Web
SpringBoot简单整合沙箱支付_第14张图片(四)pom.xml文件的修改

其他配置文件不动,添加以下内容

<!--代表了springboot集成所有第三方插件的依赖,导入这个注解才能代表这个项目是一个SpringBoot项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
    </parent>

至此,一个SpringBoot项目就快速创建完成啦!

四、解压官方demo,导入项目

导入项目后,目录结构如下:

这里一些官方demo中的jsp页面我没有导入进去,大家可以根据自身需求导入,我这里只是做一个简单的应用
SpringBoot简单整合沙箱支付_第15张图片
下面需要进行相应的配置修改:

(一)添加相关依赖

		<!--alipay SDK-->
		<dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.10.70.ALL</version>
        </dependency>

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

		<!--slf4j-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>

		<!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.0</version>
        </dependency>

(二)配置application.yml文件

# 应用名称
spring:
  application:
    name: sandbox

server:
  port: 9010
  servlet:
    context-path: /
  tomcat:
    uri-encoding: utf-8

五、业务代码编写

先来看看项目完整结构:
SpringBoot简单整合沙箱支付_第16张图片

话不多说,直接上代码:

(一) AlipayConfig

以下相关基础配置类的信息,在上方图片中有标出,大家可以自行参考

因为只是简单的整合,所以return_url和notify_url我设置为了百度的地址,这里大家可以根据自身需求进行设置

package com.trikeys.sandbox.config;

import java.io.FileWriter;
import java.io.IOException;

/* *
 *类名:AlipayConfig
 *功能:基础配置类
 *详细:设置帐户有关信息及返回路径
 *修改日期:2017-04-05
 *说明:
 *以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
 *该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
 */

public class AlipayConfig {
	
//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

	// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
	public static String app_id = "2021000117659363";
	
	// 商户私钥,您的PKCS8格式RSA2私钥
    public static String merchant_private_key = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCaxIeBHDyr30Fy04XQG0ErRWECcTBtYvuddmFsLgrmYWu1oTDGb7kvpziDPuvuQZMPqd59XhzKbyS67GRIkFlQg5arniNN0lHtByxabmsUEU5c9AxxSzxNvpda7YeSA9j5pTUvfDaeeMs7hNy4k6o6AoTsNN8zNup8GVHjoJpOKxo5kY3aAa8LY1MtH+5kJmlkEpj1wtZ/GpIaUOCZ0offs4dOl5hpvU4h85YzRESmGvYRec34GjIrUbdr47y+GeEAw536WaeuTfOzrSJxZpRHWD2t8lfz+XrDQXOq8gsymuZobEhQ1RN5OekUecq4M7ONKqMzP1i+aWuNWCw5UYC/AgMBAAECggEANBJfjP8VIraw7JNieExTNt3W791pb8RX5/jGeoFbRXwNo0SihoFciz3186Kd+sGxWxnKM+AQS8PtVb7nVsrKYh6D+SXxtuNGkTtSnvJ7sHrKJNgvv4aSuY2gmwVEEcqdnBELvfhK4DLAHjxrjuaP5YindFmtpyuY5TwXo0CL6jRsLuaMqVWXIUK10Y8rbpAtgrfwXxR4tFzTyx1XSo/zRQAZaXySTWtDVy6MOkGsdpJZfumgNpH4coVCrT0GJJKjPET8Zloz2mUZI1PiNi19NjXrERle1wRFSglln45CnMEp/X803GFH8GfGwg6ZYEKhxOqmRztsaWQi9Uhzb2CVUQKBgQDSVpO9vavPnXiLRx0mlbT4quwSGhFIOeN0IcT72yFbOpKrX6ESmTxVpNpvZcUAIajS63TD/RQGDzBesx859SIp0B6Frkh+hQsNl34KYeEEv7HsjptoOyT9IGXsK7Fe+IEWm25gDJ8PTpid54tdg+sJB/s2vgU89BTx0Xdm+dN7gwKBgQC8XadqpA2bXJ6/BnvuQwMHUUVTt0xRueyaOLaXHygV8rarYqUdskDUDSf5Bt/yenmdA/FnsauOZO2fMELPt6ji1T+jn+JS4WhhnLHN8Rtn93DNo6ROVrxubGwH8FXNDFY+nzYeX622IL3dKUsUrgamw4yXaoyc+gpmWhsLU+z1FQKBgEHj4TBFJHdLSyHGSzl1GFX1pTIefF910uzkT0LeaFqdxKhuspSS8DWcCNlwtf/Oi4ZXQCLNOuKTC4H+9r8/LU6P5Z/W8tq/brD5TgCOnODR9Di4i7JhJLsu1P7gyRWJH1cnpbHtAj7XTjPY/u1yj8QqfeWuLRHlHFKMXa0igb9lAoGAXq85C4rhaBoblew9eZvnttLsZVN7Io2x2Cfv6HD55mZ12hqg4xeKLM1cLXp+MdXMsdecjkIp+U7UfzN0MhOg6jzFW4tv6bdyj7aDTgEHhLBF3KiIW/SPjXYkq6zshEDSTXIccxInMKiup7AtFH0RzNv5HNerTPEHL0HV3FDYiK0CgYAymZ9wq+ycM6nCvB/NeCsQ+f2onEqtP1UrdDRpSVnw1JR79JW7LHWhO6TBVNk2gUBaF2QhO/66e35IpZVv6vg9aBJ6izlmdekaQTW3BEX4e4iRRr17FPseqQP2FkTeR+hrorsrYu4Ccu2FwDjQ3BjWbAPIVtlpN6f5zm35btrCrA==";
	
	// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtqQlYrIRvd5uaDWpIwXmo5u1J+rU/sbgN6VICV2ZyoewL6FY4P+aFxt8vFId25ZSQYSNFTRvkRnXb/IFK8DS81CufRJlephMOceIhoem3nLmqQVeaIloP2RGEzuvD2h2wurR+Bl5sih3HnPjKINDlDdrqITz8MF9ZF4WiDxN0spdtxLyvsD6d3xnLISiSqM5xFqiXKBXnYzMVt19uk8g4QeBRsAkoXLmFEi/Bjw1zEjHERq98xasQL6fNsNx0QxzeFX2UaaBRu/FjPmX3blTVPXhkCHu3gc+IBUXo4+537WTf7W+OMPpsH3h2HGtU6uN4yFnU5vxpRZ50a7gK/hG6wIDAQAB";

	// 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
	public static String notify_url = "https://www.baidu.com";

	// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
	public static String return_url = "https://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";
	
	// 支付宝网关
	public static String log_path = "D:\\";


//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

    /** 
     * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
     * @param sWord 要写入日志里的文本内容
     */
    public static void logResult(String sWord) {
        FileWriter writer = null;
        try {
            writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");
            writer.write(sWord);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

(二)AlipayController

package com.trikeys.sandbox.controller;/*
 *
 *@author trikey
 *@date 2021/5/17 9:42
 */


import com.trikeys.sandbox.service.AlipayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@RestController
@RequestMapping("/alipay")
public class AlipayController {
    @Autowired
    AlipayService alipayService;

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

}

(三)AlipayService

package com.trikeys.sandbox.service;/*
 *
 *@author trikey
 *@date 2021/5/17 9:40
 */

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public interface AlipayService {

    String  aliPay(HttpServletResponse response, HttpServletRequest request) throws IOException;
}

(四)AlipayServiceImpl

package com.trikeys.sandbox.service.impl;/*
 *
 *@author trikey
 *@date 2021/5/17 9:41
 */

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.trikeys.sandbox.config.AlipayConfig;
import com.trikeys.sandbox.service.AlipayService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.UUID;

@Service
@Slf4j
public class AlipayServiceImpl implements AlipayService {
    @Override
    public String aliPay(HttpServletResponse response, HttpServletRequest request) throws IOException {
        //获得初始化的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(UUID.randomUUID().toString().replace("-",""));
        //付款金额,从前台获取,必填
        String total_amount = new String("0.01");
        //订单名称,必填
        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();
        }
        //输出
        log.info("返回结果={}",result);
        return result;
    }
}

六、测试运行

浏览器访问:localhost:9010/alipay/pay

扫码或登录即可进行支付
SpringBoot简单整合沙箱支付_第17张图片
这里的支付需要下载支付宝客户端沙箱版才能够进行支付
SpringBoot简单整合沙箱支付_第18张图片
下载完毕后,登录的账号和密码需要使用沙箱账号进行登录,然后就可以进行支付啦!
SpringBoot简单整合沙箱支付_第19张图片
至此,SpringBoot简单整合沙箱支付就完成了

七、相关注意事项

(一)出现 :支付存在钓鱼风险!防钓鱼网站的方法 错误的界面

   解决方法:关闭所有支付宝登录的平台,清除缓存,再次访问

(二)支付宝客户端沙箱版界面可能会出现网络异常,这个可以直接使用扫码支付即可,不影响。

(三)其他问题需要检查pom配置文件是否出现一些问题,可自行百度解决。

总结

  支付宝官方的demo提供的是javaWeb版本,刚学习SpringBoot不久,我一开始弄的时候还有些迷茫,经过看一些文档的学习后,集成到了SpringBoot项目中,我这里只是做了一个简单的集成,大家可以根据自己所需要的业务来自行更改或添加,也希望这篇文章能够对大家有帮助。

  学习时参考文档:https://blog.csdn.net/weixin_45213302/article/details/115490036

  这是我的第一篇文章,也算是对自己成长路上的记录吧,有不足之处,希望大家能够帮助指出,谢谢。

  如果您觉得文章写的不错的话,不妨点个赞呗!

你可能感兴趣的:(java,SpringBoot,集成支付宝沙箱,java,spring,boot,经验分享)