SpringBoot+Alipay支付宝支付对接教程(沙箱环境)

一、学习文档

1、API(统一收单下单并支付页面接口)
https://opendocs.alipay.com/apis/api_1/alipay.trade.page.pay
2、沙箱环境(打开登陆)
https://openhome.alipay.com/platform/appDaily.htm

二、环境准备

1、调试

(1)获取appid

点击上述沙箱环境网址,登陆进入,以下为appid
在这里插入图片描述
(2)设置RSA2密钥
1、依然是沙箱环境,如下,点击 设置
在这里插入图片描述
2、选择 公钥 ,此处的公钥支付宝提供了专门的生产工具,很方便
在这里插入图片描述
生成密钥有两种方式,我选择的是生成器生成。以下为生成器下载地址:
https://opendocs.alipay.com/open/291/105971
下载后安装即可使用
在这里插入图片描述
3、生成密钥
打开安装好的密钥生成器,选好后,点击生成密钥
在这里插入图片描述
4、返回沙箱环境,设置密钥
将3中生成的应用公钥拷贝到沙箱环境公钥位置
在这里插入图片描述
点击保存,会生成支付宝公钥,后续开发会说明用在哪里。
在这里插入图片描述

2、依赖

引入pom依赖,大家选择合适的版本即可

<dependency>
   <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.11.54.ALL</version>
</dependency>

三、开发

先上代码,最后对代码进行说明

@RestController
@RequestMapping("/alipay")
@Slf4j
public class AlipayController {
    private String publicKey;
    private String appId;
    private String privateKey;
    @RequestMapping("/pay")
    public String pay(@RequestParam(value = "amt") BigDecimal amt,
                      @RequestParam(value = "subject") String subject,
                      @RequestParam(value = "body") BigDecimal body) {
        log.info("支付宝支付入参:{}", amt + "," + subject + "," + body);
        String serverUrl = "https://openapi.alipaydev.com/gateway.do";
        String format = "json";
        String charset = "utf-8";
        String signType = "RSA2";
        AlipayClient alipayClient = new DefaultAlipayClient(serverUrl,appId,privateKey, format, charset,publicKey, signType);
        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
        // 设置请求参数
        request.setReturnUrl(""); // 设置 支付宝同步返回支付结果url,可以以此结果做后续业务逻辑处理 可为空
		request.setNotifyUrl(""); // 设置 异步通知地址 可为空
        // 设置网页支付参数
        // outTradeNo 格式为yyyyMMddHHmmsss
        request.setBizContent("{\"out_trade_no\":\""+ new SimpleDateFormat("yyyyMMddHHmmsss").format(new Date()); +"\","
                + "\"total_amount\":\""+ amt +"\","
                + "\"subject\":\""+ "测试" +"\","
                + "\"body\":\""+ "iphone 12 pro max" +"\","
                + "\"timeout_express\":\""+ "5m" +"\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
        try {
            //这里和普通的接口调用不同,使用的是sdkExecute
            AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
            if(response.isSuccess()){
               log.info("【 Ali pay调用成功 】");
            } else {
                log.info("【 Ali pay调用失败 】");
            }
            log.info("支付宝支付结束,响应为:{}", JSON.toJSON(response));
            // 就是orderString 可以直接给客户端请求,无需再做处理。
            return response.getBody();
        } catch (AlipayApiException e) {
            log.error("【 Ali pay 异常 】", e);
        }
        return "fail";
    }

}

上述代码中,publicKey即支付宝公钥,为上述设置完密钥后生成的部分
在这里插入图片描述
privateKey即应用私钥,即在密钥生成器中的应用私钥
在这里插入图片描述
测试url:http://localhost:9909/alipay/pay?amt=0.01&subject=测试&body=测试订单描述
请求结果如下:
在这里插入图片描述
**注:**付款成功后,会同步收到回调和异步回调,回调地址是在请求时设置的:
在这里插入图片描述
此外,扫码付款需要下载沙箱版支付宝(只支持安卓手机),不可用自己的支付宝账号密码登陆,需到沙箱环境下载沙箱钱包,用沙箱账号登陆
在这里插入图片描述

完结

支付宝提供了demo,下载地址:https://opendocs.alipay.com/open/203/105910
该demo是javaweb版本的,需要自己有tomcat,用开发工具打开项目后,要将项目转为web项目,此外就是需要按照文章前两节,获取必备信息,配置进去,项目启动成功即可体验支付宝支付。

以下是一个简单的Spring Boot和Vue.js应用程序中的支付沙箱支付代码示例: 在Spring Boot项目中: 1. 添加以下依赖: ``` <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.3.0.ALL</version> </dependency> ``` 2. 创建一个包含支付宝配置信息的类,例如: ``` @Configuration public class AlipayConfig { private String appId; private String privateKey; private String publicKey; private String notifyUrl; private String returnUrl; private String gatewayUrl; // getters and setters } ``` 3. 创建一个返回AlipayClient的方法: ``` @Bean public AlipayClient getAlipayClient() { return new DefaultAlipayClient( alipayConfig.getGatewayUrl(), alipayConfig.getAppId(), alipayConfig.getPrivateKey(), "json", "UTF-8", alipayConfig.getPublicKey(), "RSA2" ); } ``` 4. 在控制器中创建支付接口,例如: ``` @Autowired private AlipayClient alipayClient; @Autowired private AlipayConfig alipayConfig; @PostMapping("/pay") public String pay(@RequestParam String orderNo, @RequestParam String amount) throws AlipayApiException { AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setReturnUrl(alipayConfig.getReturnUrl()); alipayRequest.setNotifyUrl(alipayConfig.getNotifyUrl()); alipayRequest.setBizContent("{\"out_trade_no\":\"" + orderNo + "\"," + "\"total_amount\":\"" + amount + "\"," + "\"subject\":\"" + "测试订单" + "\"," + "\"body\":\"" + "测试订单" + "\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); String form = alipayClient.pageExecute(alipayRequest).getBody(); return form; } ``` 在Vue.js中: 1. 创建一个按钮来启动支付流程: ``` <template> <div> <button @click="pay">Pay Now</button> </div> </template> ``` 2. 在脚本部分中创建一个调用支付接口的方法: ``` <script> export default { methods: { pay() { axios.post('/api/pay', { orderNo: '123456', amount: '0.01' }) .then(response => { let form = response.data; document.write(form); // 打开支付页面 }) .catch(error => { console.log(error); }); } } } </script> ``` 请注意,以上示例只适用于测试环境,如果您想在生产环境中使用支付宝支付,您需要进行更多的测试和配置。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值