准备环境
如果您想访问真正的支付宝支付业务,您需要大量的材料审查。因此,我们以支付宝提供的沙箱环境为例,首先下载官方DEMO,地址为https://opendocs.alipay.com/open/270/106291/:
将JAVA版的DEMO下载好,是一个Eclipse导入项目Eclipse目录结构如下:
在AlipayConfig类中有大量的配置:
publicclassAlipayConfig{ //↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ //应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号 publicstaticStringapp_id=""; //商户私钥,您的PKCS8格式RSA2私钥 publicstaticStringmerchant_private_key=""; //支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID支付宝公钥。 publicstaticStringalipay_public_key=""; //服务器异步通知页面路径需http:完整的路径//格式,不能加?id=123自定义参数,外网必须能够正常访问 publicstaticStringnotify_url="http://alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp"; //页面跳转同步通知页面路径需http:完整的路径//格式,不能加?id=123自定义参数,外网必须能够正常访问 publicstaticStringreturn_url="http://alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp"; //签名方式 publicstaticStringsign_type="RSA2"; //字符编码格式 publicstaticStringcharset="utf-8"; //支付宝网关 publicstaticStringgatewayUrl="https://openapi.alipaydev.com/gateway.do"; //支付宝网关 publicstaticStringlog_path="C:\\"; //↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ }
我们需要配置这些配置项目,来到支付宝箱环境管理背景https://openhome.alipay.com/platform/appDaily.htm?tab=info:
在此可见APPID这两个项目与支付宝网关的相关信息分配到AlipayConfig中:
//应用ID,您的APPID,收款账户是你的APPID对应支付宝账号 publicstaticStringapp_id="2021000116684033"; //支付宝网关 publicstaticStringgatewayUrl="https://openapi.alipaydev.com/gateway.do";
加密方式
每当涉及到金钱交易时,操作都敏感,安全问题不容忽视。因此,在其他应用程序和支付宝的数据传输过程中,数据必须加密。加密通常分为两种方式:
-
对称加密
-
非对称加密
对称加密是指加密原始数据(称为明文)时使用的密钥与解密时使用的密钥相同,如下所示:
这种方法有很大的安全风险,当发送人或接收人的密钥泄露时,罪犯可以使用密钥和发送人和接收人无障碍数据传输,因为它可以通过密钥加密数据传输给接收人,也可以接收发送人发送的数据进行解密。
第二种加密方法是非对称加密。与对称加密不同,加密数据和解密数据中使用的密钥不同,如下:
当发送方使用密钥A对明文进行加密并传输给接收方后,接收方需要使用密钥B进行解密,当接收方想要发送数据给发送方时,就是用密钥D进行加密,发送方再使用密钥C进行解密。这样做的好处是,即使密钥泄露,也不会有安全问题。例如,如果密钥B被非法分析窃取,它将能够解密发送方发送的数据,但仅限于解密。它将无法向发送方发送消息,因为发送消息使用密钥D,只有掌握了四把钥匙,才能在发送方和接收方之间无障碍通信。
支付宝采用非对称加密方式:
第三方应用程序数据之前,第三方应用程序将使用私钥A进行加密。私钥A不会暴露在外,但第三方应用程序将向支付宝提供公钥A。此时,支付宝可以使用公钥解密数据;同样,支付宝在向应用程序发送数据时也会使用私钥B加密数据,并为应用程序提供公钥B解密;但是没有人能窃取支付宝的私钥,所以它确保了支付的安全。
为了支付过程的绝对安全,支付宝有一个签名链接,当数据准备传输时,私钥将用于签名:
目前的数据和签名是相应的,如果有人拦截数据并修改金额,那么支付宝收到数据,将检查数据,检查过程可以发现数据被篡改,因为签名和数据不对应,犯罪分子不能成功获得修改数据对应的签名。
接下来,我们将配置这四把钥匙,箱后台:
点击RSA2密钥后面的设置/查看
:
点击支付宝密钥生成器选择公钥:
您可以下载支付宝的密钥生成器,下载后安装,然后打开:
选择RSA2和PKCS8.点击生成密钥,妥善保管应用的私钥,然后通知支付宝以下应用公钥:
点击保存设置将其粘贴到此处:
这时,支付宝会告诉你它的公钥,并配置这些内容AlipayConfig中:
publicclassAlipayConfig{ //↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ //应用ID,您的APPID,收款账户是你的APPID对应支付宝账号 publicstaticStringapp_id="2021000116684033"; //商户私钥,您的PKCS8格式RSA2私钥 publicstaticStringmerchant_private_key="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBcwggSjAgEAAoIBAQDA+HnzPriAFTLYuk/uHR1wPooA4FdkahthRa/rq/ZmzOgZ+Gn3HmET1qYy7DyOWeGIKCiad7Lpb/a6idRHtEADha2/NTQMgUC+cnPfFnliC97LPwl6imik84GO5XZ0yxNvqzHIurIXBEJegfSSm1mKuDU6DavGSQlRUKDSiLcL/EOKJyWfrcEeZWLy5TbZccdiurb7Gm5wWeaYUSm0qSpZaxrhhkB24UzFEc9DZZvhmtFyZ+WzeImofX9254pNIKXgeDpVO0e2KKXdcdPVpL0pzg/3RjPaZhPcgrOwVLum8Nj8haA0HjkJqbI5JzWU6XiKi889ihYeI/imETXz+wgDAgMBAAECggEAMKy8fhndChnOyJI+ZS6c5VoxD0WHZcHKBEBCvqySq52WEi7x866LCCkFpSSnpbSQSfrvOv9kdrOSRb1MeYXC++B1UhzGcz0LKr7N8YDGv2+FFDljV7Cf8rOlg3jn50/uKCXDmgFVuK6PWy1mlrBu5qnOa0VVhd+YZRV0a4amvXPFDfKisSxMI1+oIgqC9LmyMz5gDhahlFKmpI9EHN0zno/eycw6xo/aCXagAmPU4UMOck1o9S1PhRQvyRlWSll9xuGWiimUi/a1j61hNTkD6XLLnH6cewBeGHKr9mOKBT9PywEj1qeX50AHHaVbX1HlUnOLlRuldYMO+r/B7GKmkQKBgQDoExEuna52PsNbp0SmTid+lqOoVAr5oi5xYABiXa0VruOvR7ZEikWzk1uq4deTwzzWpqy6S1ZHw/j8wxQ1SweZy187W6cFFAbJ4hsZFLE7m95NMGTGmgP0M+WbmDElAQmrQV6cYOXl09rU2d0M1QAqMNItQlLtBwLaT4zk4PZO2wKBgQDU3WBBzvSSQP83OrzHv4um9BDvhLeX8aUOEGjNeGIcYcCe0YABVQVEF+q9rWR6e1C+XRnY50kh0KNYa8xHpglfk9RyvK+k5kBfywnnq2ArbeaDxm2TcjRMhkzWyeVMFgRWmAfzzNk7ZSJv8+rjgEJvETDENftEY8r2Q1VuE9SP+QKBgF583OMI6i5UkX+wk7/OVEAzHwD67tkCkjww5RcnosAQS71iyjAPyB88IPdrKjWMKSoQBIV5BPEFNkvbNVAZc0fHyMdHIrJrm/P4biYBCcQGSzVMPcuqi2+S7aozBddWG9SxMc8jmJbBcfh1l42Q75c992Tb+x1sXFn8R5Ysjbw/AoGAM/zVM31eEhI5wr1fudE4RFA7iqP5SuzDiQnM7tHF9HSTXLaB8tFW9eh5dlXQwnE3qSaH14e1PsL8Ae5h9+W/SE6MhnE63KU3d63Y/3HFjRXMRMbDoE02JLJwNc0daVW/PX7oAk03iOAMZxdFeMascv/ZzzH36h4NRdPwG3BQa9ECgYEAxDcRdAHmpGFGenqqT8Z5eugHrSWz1bCSA9KrWZ7ymIsPfqk96/UpQDD/grB06uIrPahenFqOlWo9KEWl7+nHtPq6RzHHWgDcXKnjpeT4KxqmmTmJt3Vshb4z4znsHV1/wLuPtDC3hV8mDDoXVlpZ6ohgf3niFExQL4oQwT4Vtmo=";
// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlt4bnL/TPec6FVf0+4v5SE+qYADh5iKPyLYhMXsKPyfETGkxK36fzOyp/lACX7AGLejGGjte7lE964GvfLXyuG0ecd6WWuLOepWZKlgi1XMiMzuZj/Gsb5aqvKPvi2/nWTlTUCceQ2sIpFtbnxQ29Aiq9b36qCIwHSCHH96SJRqT8DmiBTsGgAOEnJzy1knG/mPecD5jwIYP4NtLa0G6Px3EVz7ZFhZmR5LjxaqUpT/hIOG4Umjlkixf6g4Ga7rXXw8kzZBcSYTKq9LeBWqGGP1gt1dYv9m3ADAvd+wJn8U9T6veuawtExMSwyJkI/LzuzxqyaR8qB863C/3Mh+bEwIDAQAB";
// 支付宝网关
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
}
现在就可以启动这个DEMO项目了,启动完成后便可以对支付进行测试:
点击付款会要求登录:
登录信息仍然在沙箱后台中:
最后输入支付密码即可支付成功:
内网穿透
在AlipayConfig配置类中有这么两项配置:
// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String notify_url = "http://工程公网访问地址/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String return_url = "http://工程公网访问地址/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";
它们分别表示支付完成后需要支付宝跳转的页面和接收支付宝响应数据的接口,由于我们处于内网,支付宝是无法找到我们的电脑的,当然也就访问不到我们的应用,而且注释里也说了这两项配置必须外网可以正常访问,所以我们需要使用到内网穿透。
支持内网穿透的工具有很多,这里以续断为例 https://www.zhexi.tech/,新用户会赠送一条隧道,登录到后台系统,点击安装客户端:
安装完成后再点击建立隧道,输入相关信息:
此时我们就能够得到一个域名:
通过它就能够访问到我们的电脑了,所以修改AlipayConfig中的配置:
// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String notify_url = "http://00ocvc6g0e.52http.tech/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String return_url = "http://00ocvc6g0e.52http.tech/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";
SpringBoot整合支付宝
创建一个SpringBoot应用,并引入依赖:
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.16.2.ALL</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
编写一个工具类用于生成页面模板:
@ConfigurationProperties(prefix = "alipay")
@Component
@Data
public class AlipayTemplate {
// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
public static String app_id = "2021000116684033";
// 商户私钥,您的PKCS8格式RSA2私钥
public static String merchant_private_key = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDA+HnzPriAFTLYuk/uHR1wPooA4FdkahthRa/rq/ZmzOgZ+Gn3HmET1qYy7DyOWeGIKCiad7Lpb/a6idRHtEADha2/NTQMgUC+cnPfFnliC97LPwl6imik84GO5XZ0yxNvqzHIurIXBEJegfSSm1mKuDU6DavGSQlRUKDSiLcL/EOKJyWfrcEeZWLy5TbZccdiurb7Gm5wWeaYUSm0qSpZaxrhhkB24UzFEc9DZZvhmtFyZ+WzeImofX9254pNIKXgeDpVO0e2KKXdcdPVpL0pzg/3RjPaZhPcgrOwVLum8Nj8haA0HjkJqbI5JzWU6XiKi889ihYeI/imETXz+wgDAgMBAAECggEAMKy8fhndChnOyJI+ZS6c5VoxD0WHZcHKBEBCvqySq52WEi7x866LCCkFpSSnpbSQSfrvOv9kdrOSRb1MeYXC++B1UhzGcz0LKr7N8YDGv2+FFDljV7Cf8rOlg3jn50/uKCXDmgFVuK6PWy1mlrBu5qnOa0VVhd+YZRV0a4amvXPFDfKisSxMI1+oIgqC9LmyMz5gDhahlFKmpI9EHN0zno/eycw6xo/aCXagAmPU4UMOck1o9S1PhRQvyRlWSll9xuGWiimUi/a1j61hNTkD6XLLnH6cewBeGHKr9mOKBT9PywEj1qeX50AHHaVbX1HlUnOLlRuldYMO+r/B7GKmkQKBgQDoExEuna52PsNbp0SmTid+lqOoVAr5oi5xYABiXa0VruOvR7ZEikWzk1uq4deTwzzWpqy6S1ZHw/j8wxQ1SweZy187W6cFFAbJ4hsZFLE7m95NMGTGmgP0M+WbmDElAQmrQV6cYOXl09rU2d0M1QAqMNItQlLtBwLaT4zk4PZO2wKBgQDU3WBBzvSSQP83OrzHv4um9BDvhLeX8aUOEGjNeGIcYcCe0YABVQVEF+q9rWR6e1C+XRnY50kh0KNYa8xHpglfk9RyvK+k5kBfywnnq2ArbeaDxm2TcjRMhkzWyeVMFgRWmAfzzNk7ZSJv8+rjgEJvETDENftEY8r2Q1VuE9SP+QKBgF583OMI6i5UkX+wk7/OVEAzHwD67tkCkjww5RcnosAQS71iyjAPyB88IPdrKjWMKSoQBIV5BPEFNkvbNVAZc0fHyMdHIrJrm/P4biYBCcQGSzVMPcuqi2+S7aozBddWG9SxMc8jmJbBcfh1l42Q75c992Tb+x1sXFn8R5Ysjbw/AoGAM/zVM31eEhI5wr1fudE4RFA7iqP5SuzDiQnM7tHF9HSTXLaB8tFW9eh5dlXQwnE3qSaH14e1PsL8Ae5h9+W/SE6MhnE63KU3d63Y/3HFjRXMRMbDoE02JLJwNc0daVW/PX7oAk03iOAMZxdFeMascv/ZzzH36h4NRdPwG3BQa9ECgYEAxDcRdAHmpGFGenqqT8Z5eugHrSWz1bCSA9KrWZ7ymIsPfqk96/UpQDD/grB06uIrPahenFqOlWo9KEWl7+nHtPq6RzHHWgDcXKnjpeT4KxqmmTmJt3Vshb4z4znsHV1/wLuPtDC3hV8mDDoXVlpZ6ohgf3niFExQL4oQwT4Vtmo=";
// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlt4bnL/TPec6FVf0+4v5SE+qYADh5iKPyLYhMXsKPyfETGkxK36fzOyp/lACX7AGLejGGjte7lE964GvfLXyuG0ecd6WWuLOepWZKlgi1XMiMzuZj/Gsb5aqvKPvi2/nWTlTUCceQ2sIpFtbnxQ29Aiq9b36qCIwHSCHH96SJRqT8DmiBTsGgAOEnJzy1knG/mPecD5jwIYP4NtLa0G6Px3EVz7ZFhZmR5LjxaqUpT/hIOG4Umjlkixf6g4Ga7rXXw8kzZBcSYTKq9LeBWqGGP1gt1dYv9m3ADAvd+wJn8U9T6veuawtExMSwyJkI/LzuzxqyaR8qB863C/3Mh+bEwIDAQAB";
// 服务器[异步通知]页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String notify_url = "http://00ocvc6g0e.52http.tech/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String return_url = "http://00ocvc6g0e.52http.tech/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";
// 签名方式
private String sign_type = "RSA2";
// 字符编码格式
private String charset = "utf-8";
// 支付宝网关;https://openapi.alipaydev.com/gateway.do
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
public String pay(PayVo vo) throws AlipayApiException {
//AlipayClient alipayClient = new DefaultAlipayClient(AlipayTemplate.gatewayUrl, AlipayTemplate.app_id, AlipayTemplate.merchant_private_key, "json", AlipayTemplate.charset, AlipayTemplate.alipay_public_key, AlipayTemplate.sign_type);
//1、根据支付宝的配置生成一个支付客户端
AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl,
app_id, merchant_private_key, "json",
charset, alipay_public_key, sign_type);
//2、创建一个支付请求 //设置请求参数
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(return_url);
alipayRequest.setNotifyUrl(notify_url);
//商户订单号,商户网站订单系统中唯一订单号,必填
String out_trade_no = vo.getOut_trade_no();
//付款金额,必填
String total_amount = vo.getTotal_amount();
//订单名称,必填
String subject = vo.getSubject();
//商品描述,可空
String body = vo.getBody();
alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\","
+ "\"total_amount\":\"" + total_amount + "\","
+ "\"subject\":\"" + subject + "\","
+ "\"body\":\"" + body + "\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
String result = alipayClient.pageExecute(alipayRequest).getBody();
//会收到支付宝的响应,响应的是一个页面,只要浏览器显示这个页面,就会自动来到支付宝的收银台页面
System.out.println("支付宝的响应:" + result);
return result;
}
}
@Data
public class PayVo {
private String out_trade_no; // 商户订单号 必填
private String subject; // 订单名称 必填
private String total_amount; // 付款金额 必填
private String body; // 商品描述 可空
}
配置信息记得修改为自己的配置。现在有一个页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="/pay?orderSn=12345">去支付</a>
</body>
</html>
内容非常简单,有一个超链接,点击它便可以进行订单支付,并且会携带当前订单的订单号,来模拟一个真实的订单支付业务。编写一个Controller:
@Controller
public class PayController {
@Autowired
private AlipayTemplate alipayTemplate;
@GetMapping({"/","/index"})
public String toIndex(){
return "index";
}
@GetMapping(value = "/pay",produces = "text/html")
@ResponseBody
public String pay(@RequestParam String orderSn) throws AlipayApiException {
// 通过orderSn查询订单的详细信息
PayVo payVo = new PayVo();
payVo.setBody("暂无"); // 订单备注
payVo.setOut_trade_no(orderSn); // 订单号
payVo.setSubject("测试标题"); // 订单标题
payVo.setTotal_amount("1000"); // 订单金额
// 返回的是一个支付页面,直接返回即可
return alipayTemplate.pay(payVo);
}
}
按照真实的业务场景,页面会传递给我们一个订单号,然后拿着这个订单号去数据库查询指定订单的详细信息,并将这些信息设置到PayVo中,这里就简单模拟一下。当调用alipayTemplate的pay方法时,该方法会渲染一个form表单,并通过script脚本自动提交,所以我们只需将该方法的返回值直接作为页面内容返回出去即可。
启动项目,点击去支付即可跳转至支付宝的支付页面:
这些内容也确实是我们自己设置的,当输入支付密码成功支付后,我们应该让其自动跳转至支付成功后的页面,修改AlipayTemplate类中的同步跳转地址:
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String return_url = "http://localhost:9090/index";
这里也简单模拟一下,让其支付成功后跳转回首页即可。
若是想知道支付后的具体信息,也可以通过配置异步通知url来实现:
// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String notify_url = "http://00ocvc6g0e.52http.tech/notify";
需要注意异步通知的url一定要让外网能够访问,否则支付宝是无法发送请求给我们的。接下来就需要处理这个请求:
@PostMapping("/notify")
public String notifyPay(HttpServletRequest request) {
Map<String, String[]> map = request.getParameterMap();
for (String key : map.keySet()) {
System.out.println(key + "===>" + request.getParameter(key));
}
return "success";
}
这个方法的返回值一定要是success,因为支付宝只有接收到success才会认为应用已经接收到了支付成功的通知,否则支付宝会不停地向应用发送通知,以下便是支付宝提供给我们的所有参数:
gmt_create===>2021-08-13 17:40:35
charset===>utf-8
gmt_payment===>2021-08-13 17:40:45
notify_time===>2021-08-13 17:40:47
subject===>测试标题
sign===>I2FtU9GmmHWQRExJ9q+wYLhOe/50HqFMcQLHLVBQalIGrK3FlEcflCnDO1coFd+Feqp0Pr+xh5EDsyi9aU4fT3huKQhENceLWVNiEiyoV5oykT/73W3FKMbwd8fS4YB1zTiw/tzY0KMNFFJU5p1hgWGioksFmpM11FUGgb6DeDv2L+JJ3tglBmRmVNTd2RCKM6xKKyWkuDenHDfeVLbjjNwEUtAyx6rKCLmEal7R1uFx7pg4gC/gekCWSLOu7Jsv2N/06uvv88F1PlUSJA8vrXyyrKAhA0MATOq4Rx/Yqvvlr3uJMQ/pj7IrG8OgPdoaqnBC2qaBMs3mVtXgwNP0lQ==
buyer_id===>2088622955266335
body===>暂无
invoice_amount===>1000.00
version===>1.0
notify_id===>2021081300222174046066330512882319
fund_bill_list===>[{"amount":"1000.00","fundChannel":"ALIPAYACCOUNT"}]
notify_type===>trade_status_sync
out_trade_no===>123456789
total_amount===>1000.00
trade_status===>TRADE_SUCCESS
trade_no===>2021081322001466330501314710
auth_app_id===>2021000116684033
receipt_amount===>1000.00
point_amount===>0.00
app_id===>2021000116684033
buyer_pay_amount===>1000.00
sign_type===>RSA2
seller_id===>2088621955014522
通过这些属性即可对后续的业务进行相关的操作,关于这些属性的详情可以参照支付宝的官方文档:https://opendocs.alipay.com/open/270/105902
为了防止出现用户一直没有付款,导致订单超时关闭之后,用户再去付款的问题,可以为支付功能设置一个超时时间,只需修改AlipayTemplate类中setBizConent的内容即可:
alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\","
+ "\"total_amount\":\"" + total_amount + "\","
+ "\"subject\":\"" + subject + "\","
+ "\"body\":\"" + body + "\","
+ "\"timeout_express\":\"1m\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
添加 "\"timeout_express\":\"1m\"
,此时如果打开付款页面后超过1分钟,将无法继续付款。