个人用户只能开通沙箱模式的支付功能。
网上很多说可以免签的(大多数都使用的支付宝的当面付功能)。我也尝试过。但最后发现当面付可以在没有营业执照的情况下开通,但调用接口时,是必须使用个体工商户(也就是要认证营业执照)的。
这里我转而使用了沙箱模式。
这是官网对沙箱模式的解释
简而言之就是:沙箱模式就是一个测试环境,商家账号、顾客账号都由官方提供。数据也是虚拟的。不能投入生产使用,但可以让开发者弄清楚整个过程的操作逻辑。
使用沙箱模式正文:
登录后进入沙箱:支付宝开放平台 (alipay.com)
这里以电脑网站的支付功能为例
按步骤选择好1、2后,点击3
弹出界面(此操作目的是为了获取调接口需要的各种参数):
引入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即可。
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
运行之后,弹出一个支付连接,输入到浏览器即可访问。
付款时,需要下载沙箱工具:https://open.alipay.com/develop/sandbox/tool/alipayclint
付款的账号密码在这里查看(需要输入买家账号和买家支付密码):
支付宝开放平台 (alipay.com)