个人用户只能开通沙箱模式的支付功能。

网上很多说可以免签的(大多数都使用的支付宝的当面付功能)。我也尝试过。但最后发现当面付可以在没有营业执照的情况下开通,但调用接口时,是必须使用个体工商户(也就是要认证营业执照)的。

springboot实现支付宝异步通知 springboot集成支付宝_后端

这里我转而使用了沙箱模式。

这是官网对沙箱模式的解释

springboot实现支付宝异步通知 springboot集成支付宝_数据库_02

简而言之就是:沙箱模式就是一个测试环境,商家账号、顾客账号都由官方提供。数据也是虚拟的。不能投入生产使用,但可以让开发者弄清楚整个过程的操作逻辑。

使用沙箱模式正文:

登录后进入沙箱:支付宝开放平台 (alipay.com)

这里以电脑网站的支付功能为例

springboot实现支付宝异步通知 springboot集成支付宝_spring_03

按步骤选择好1、2后,点击3

弹出界面(此操作目的是为了获取调接口需要的各种参数):

springboot实现支付宝异步通知 springboot集成支付宝_spring_04

引入SpringBoot项目

我的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.17</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.louis</groupId>
    <artifactId>epay-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>epay-service</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- alipay -->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.38.157.ALL</version>
        </dependency>
        <!-- fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.48</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

可能会报错,找不到alipay。

解决:

浏览器搜索找不到的包,例如:com.alipay.sdk

到maven仓库中去下载。

这里直接给出链接https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java/4.38.157.ALL

在idea的maven中输入命令(需要根据自己下载路径修改参数,参数说明见下方),等待后刷新maven即可。

springboot实现支付宝异步通知 springboot集成支付宝_spring_05

mvn install:install-file -DgroupId=com.alipay.sdk -DartifactId=alipay-sdk-java -Dversion=4.38.157.ALL -Dpackaging=jar -Dfile=D:\BrowserDownloads\alipay-sdk-java-4.38.157.ALL.jar

参数说明: DgroupId:groupId DartifactId:artifactId Dversion:版本Id 例如以下的dependency:分别是:com.alipay.sdk、alipay-sdk-java、4.38.157.ALL         <!-- alipay --> <!--        <dependency>--> <!--            <groupId>com.alipay.sdk</groupId>--> <!--            <artifactId>alipay-sdk-java</artifactId>--> <!--            <version>4.38.157.ALL</version>--> <!--        </dependency>-->

Dpackaging:固定值:jar Dfile:下载到电脑的jar包的存放路径  

创建一个主类:

public static void main(String[] args) throws AlipayApiException {
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi-sandbox.dl.alipaydev.com/gateway.do","appId","privateKey","format","charset","alipayPublicKey","signType");
        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
//异步接收地址,仅支持http/https,公网可访问(选填)
        request.setNotifyUrl("");
//同步跳转地址,仅支持http/https(选填)
        request.setReturnUrl("");
/******必传参数******/
        JSONObject bizContent = new JSONObject();
//商户订单号,商家自定义,保持唯一性(修改一下,和原来不同即可)
        bizContent.put("out_trade_no", "20210817010101096");
//支付金额,最小值0.01元
        bizContent.put("total_amount", 0.01);
//订单标题,不可使用特殊符号
        bizContent.put("subject", "测试商品");
//电脑网站支付场景固定传值FAST_INSTANT_TRADE_PAY
        bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");

/******可选参数******/
//bizContent.put("time_expire", "2022-08-01 22:00:00");

 商品明细信息,按需传入
//JSONArray goodsDetail = new JSONArray();
//JSONObject goods1 = new JSONObject();
//goods1.put("goods_id", "goodsNo1");
//goods1.put("goods_name", "子商品1");
//goods1.put("quantity", 1);
//goods1.put("price", 0.01);
//goodsDetail.add(goods1);
//bizContent.put("goods_detail", goodsDetail);

 扩展信息,按需传入
//JSONObject extendParams = new JSONObject();
//extendParams.put("sys_service_provider_id", "2088511833207846");
//bizContent.put("extend_params", extendParams);

        request.setBizContent(bizContent.toString());
        AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
        if(response.isSuccess()){
            System.out.println("调用成功");
        } else {
            System.out.println("调用失败");
        }
    }

 DefaultAlipayClient参数说明(都是字符串):

new DefaultAlipayClient("serverUrl","appId","privateKey","format","charset","alipayPublicKey","signType");
参数说明:

serverUrl:支付宝网关。固定值,新版沙箱为:https://openapi-sandbox.dl.alipaydev.com/gateway.do
老版沙箱为:https://openapi.alipaydev.com/gateway.do
现在一般创建,只要不是以前创建的沙箱,默认是新版。不确定可以两个都尝试。
appId:应用ID,按上述操作获取
privateKey:商户私钥,按上述操作获取
alipayPublicKey:支付宝公钥,按上述操作获取
format:格式,一般为json
charset:字符编码格式,一般为GBK
signType:签名方式,一般为RSA2

运行之后,弹出一个支付连接,输入到浏览器即可访问。

springboot实现支付宝异步通知 springboot集成支付宝_spring_06

付款时,需要下载沙箱工具:https://open.alipay.com/develop/sandbox/tool/alipayclint

付款的账号密码在这里查看(需要输入买家账号和买家支付密码):

支付宝开放平台 (alipay.com)