SpringBoot - 支付宝支付之沙箱环境简单使用

一、创建应用

使用沙箱环境,可以直接忽略这里,这里只是顺带介绍如何创建应用。

1、进入支付宝开放平台 支付宝开放平台
2、完善信息

在这里插入图片描述

3、接入应用

在这里插入图片描述

支付宝使用的加密方式

1、对称加密 - 不安全

即加密和解密用同一种算法(钥匙),比如发送方给接受方要发送一串文字,但是不能让人知道,所以需要加密,将加密后的字符串通过网络传输,给到接收方,接收方收到秘闻,用同一种算法获取明文。因此只要知道了这种算法(钥匙),在网络传输中截取到,就可以随意解密,这种方式不安全。
在这里插入图片描述

2、非对称加密

即加密时用算法A(秘钥A),解密的时候用算法B(秘钥B),即使在网络传输截取到密文,由于不知道秘钥B,也无法获取明文信息,这个相对较安全。但是知道秘钥B了,也不安全,但是不能模拟完全的通信。接受方要给发送方返回信息,使用秘钥C,而发送方要获取接收方返回的信息,也需要通过秘钥D来解密。
这种方式,只要缺少一种一把秘钥,都无法模拟完整通信。
第一个流程 - 发送方给接受方发数据:
秘钥A自己藏起来不暴露给其他人,但是要让接受方解密,需要把秘钥B告诉接收方。这里的秘钥A就是私钥,秘钥B就是公钥,私钥和公钥是相对的。
第二个流程,则C就是私钥,D就是公钥。
在这里插入图片描述

3、支付宝中的使用 - 非对称加密

在这里插入图片描述
商户使用自己的私钥给订单信息进行加密并附带一个sign签名来防止中途传输数据篡改,只要这个订单信息有一点变化,这个签名也会变。支付宝这边通过商户提供的公钥来对签名进行验证,如果订单信息中途被人修改,那么这个签名也会发生变化,这个商户公钥来验证就不会通过。比如,传递的信息是说支付100,中途被拦截修改成10000,那么这个签名就会发生改变,验签不通过,后面的业务无法执行。

同样,支付宝这边支付成功了,需要告诉商户,返回一个消息也会附带sign签名,如果中途被拦截到修改了返回的信息,这个签名也会发生变化,商户这边使用支付宝提供的秘钥来验证这个签名,也不会通过。比如,传递的信息说是支付成功,中途被拦截到将其修改成失败,签名也发生变化,验签也不会通过,用户就不会再次支付。

沙箱环境

1、找到沙箱环境 沙箱环境地址

在这里插入图片描述

2、创建公钥,下载开发助手

在这里插入图片描述
安装开发助手(注意:路径不要有空格)
在这里插入图片描述

3、生成秘钥

在这里插入图片描述

// 文件地址 - 直接点 打开文件位置 即可
C:\Users\LCY\Documents\支付宝开放平台开发助手\CSR

在这里插入图片描述
配置公钥:
在这里插入图片描述
在这里插入图片描述

官方Demo

1、下载官方Demo 官方Demo下载地址

在这里插入图片描述

2、使用Eclipse导入Demo,配置相关信息

在这里插入图片描述

3、运行项目
http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/

在这里插入图片描述

4、使用提供的商家账号和买家账号

在这里插入图片描述

5、支付

在这里插入图片描述

SpringBoot整合支付宝沙箱环境

1、引入依赖 - 旧版本SDK
<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.9.28.ALL</version>
</dependency>
2、根据Demo创建一个Template

这个Template的作用是配置支付宝相关信息,且提供一个支付的API(根据官方Demo进行配置)

/**
 * @ClassName AliPayTemplate
 * @Description 根据支付宝官方Demo提取出来的Template,旧版SDK
 * 旧版Demo下载地址: https://opendocs.alipay.com/open/270/106291
 * @Author 柳成荫
 * @Date 2021/3/23
 */
@Component
@Data
public class AliPayTemplate {
   
    /** 在支付宝创建的应用ID */
    @Value("${pay.alibaba.appid}")
    private String appId;
    /** 商户私钥 */
    @Value("${pay.alibaba.merchantPrivateKey}")
    private String merchantPrivateKey;
    /** 支付宝公钥 - 查看地址: https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥 */
    @Value("${pay.alibaba.alipayPublicKey}")
    private  String alipayPublicKey;
    // 服务器[异步通知]页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    /**  支付宝会悄悄的给我们发送一个请求,告诉我们支付成功的信息 */
    @Value("${pay.alibaba.notifyUrl}")
    private  String notifyUrl;
    // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    /** 同步通知,支付成功,一般跳转到成功页 */
    @Value("${pay.alibaba.returnUrl}")
    private  String returnUrl;
    /** 签名方式 */
    @Value("${pay.alibaba.signType}")
    private  String signType;
    /** 字符编码格式 */
    @Value("${pay.alibaba.charset}")
    private  String charset;
    /** 订单失效时间 - 30分钟 */
    @Value("${pay.alibaba.timeout}")
    private String timeout;
    /** 支付宝网关; https://openapi.alipaydev.com/gateway.do */
    @Value("${pay.alibaba.gatewayUrl}")
    private  String gatewayUrl;

    /**
     * 支付
     * @param vo 支付信息
     * @return 响应页面
     * @throws AlipayApiException
     */
    public String pay(PayVo vo) throws AlipayApiException {
   
        // 1、根据支付宝的配置生成一个支付客户端
        AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl,
                appId, merchantPrivateKey, "json",
                charset, alipayPublicKey, signType);
        // 2、创建一个支付请求 - 设置请求参数
        AlipayTradePagePayRequest aliPayRequest = new AlipayTradePagePayRequest();
        aliPayRequest.setReturnUrl(returnUrl);
        aliPayRequest.setNotifyUrl(notifyUrl);
        // 商户订单号,商户网站订单系统中唯一订单号,必填
        String out_trade_no = vo.getOutTradeNo();
        // 付款金额,必填
        String total_amount = vo.getTotalAmount();
        // 订单名称,必填
        String subject = vo.getSubject();
        // 商品描述,可空
        String body = vo.getBody();
        aliPayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
                + "\"total_amount\":\""+ total_amount +"\","
                + "\"subject\":\""+ subject +"\","
                + "\"body\":\""+ body +"\","
                + "\"timeout_express\":\""+timeout+"\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

        // 会收到支付宝的响应,响应的是一个页面,只要浏览器显示这个页面,就会自动来到支付宝的收银台页面
        return alipayClient.pageExecute(aliPayRequest).getBody();
    
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在SpringBoot中接入支付宝沙箱支付,您需要完成以下步骤: 1. 注册一个支付宝沙箱账号并登录到开发者平台(https://openhome.alipay.com/platform/appDaily.htm)。 2. 创建一个应用程序并获取应用程序ID和商户私钥。 3. 在SpringBoot应用程序中添加alipay-sdk依赖项。您可以通过Gradle或Maven添加此依赖项。 4. 创建一个支付工具类,并实现沙箱环境的初始化和支付宝支付API的调用。 5. 在SpringBoot应用程序中创建一个控制器,并定义处理支付请求的端点。 6. 在控制器中使用支付工具类处理支付请求,并返回支付结果。 下面是一个示例支付工具类: ```java import com.alipay.api.AlipayClient; import com.alipay.api.AlipayConstants; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipayTradePagePayRequest; import com.alipay.api.response.AlipayTradePagePayResponse; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class AlipayUtil { @Value("${alipay.app-id}") private String appId; @Value("${alipay.private-key}") private String privateKey; @Value("${alipay.public-key}") private String publicKey; @Value("${alipay.gateway-url}") private String gatewayUrl; @Value("${alipay.notify-url}") private String notifyUrl; public String pay(String outTradeNo, String subject, String totalAmount) throws Exception { AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl, appId, privateKey, AlipayConstants.FORMAT_JSON, AlipayConstants.CHARSET_UTF8, publicKey, AlipayConstants.SIGN_TYPE_RSA2); AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); request.setReturnUrl(notifyUrl); request.setNotifyUrl(notifyUrl); request.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\"," + "\"total_amount\":\"" + totalAmount + "\"," + "\"subject\":\"" + subject + "\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); AlipayTradePagePayResponse response = alipayClient.pageExecute(request); return response.getBody(); } } ``` 在这个示例中,我们使用AlipayClient类创建了一个Alipay客户端,并使用AlipayTradePagePayRequest类设置了支付请求参数。我们还使用AlipayTradePagePayResponse类处理Alipay的支付响应。 下面是一个示例控制器: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class PaymentController { @Autowired private AlipayUtil alipayUtil; @PostMapping("/pay") public String pay(@RequestBody Payment payment) throws Exception { return alipayUtil.pay(payment.getOutTradeNo(), payment.getSubject(), payment.getTotalAmount()); } } ``` 在这个示例中,我们使用@Autowired注释注入了AlipayUtil类,并在/pay端点上定义了处理支付请求的方法。 现在您可以使用Postman或其他HTTP客户端向/pay端点发送JSON请求,以进行支付。以下是一个示例请求: ``` POST /pay HTTP/1.1 Host: localhost:8080 Content-Type: application/json Cache-Control: no-cache { "outTradeNo": "123456789", "subject": "Test Payment", "totalAmount": "100.00" } ``` 在这个示例中,我们向/pay端点发送一个包含outTradeNo,subject和totalAmount的JSON请求。在支付工具类中,我们使用这些参数调用了支付宝API,并返回了支付响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值