Spring Boot 使用支付宝沙箱环境

Spring Boot 使用支付宝沙箱环境

最近期末大作业老师要求有使用第三方支付功能,所以试着尝试了一下支付宝的沙箱环境。

要想使用支付宝的沙箱环境,需要先注册支付宝开放平台的账号,使用原有支付宝账号即可。
创建完毕后,点击控制台->研发服务
进入沙箱环境的图片描述
进入研发服务之后,就可以看见沙箱环境的相关内容,接下来就是要配置沙箱环境所需的各种东西。我们需要配置的有RSA2(SHA256)密钥应用网关授权回调地址

第一步先配置RSA2密钥,由于我们开发的是个人项目,所以使用RSA2密钥就可以了,密钥的获取需要下载一些工具,官方的密钥获取教程讲述的还是非常详细的,获取密钥并妥善保管,然后按照教程复制到页面相应位置即可。
配置完密钥是配置应用网关,和授权回调地址
在这里插入图片描述
这是我配置的应用网关和授权回调地址,由于应用网关是服务器发送订单状态消息给你的地址,所以最好要外网可访问吧。。。这个我也不太清楚,反正我配置了内网穿透,配置内网穿透可以下载花生壳,花生壳网站也有官方教程,十分详细,永久http服务六块软妹币。
之后是在项目内的配置。
先加载依赖,在pom.xml文件中添加配置如下代码

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

之后配置一个配置类AliPayConfig,配置如下

public class AliPayConfig {

    // 作为身份标识的应用ID
    public static String app_id = "2021000116675558";

    // 商户私钥,您的PKCS8格式RSA2私钥
    public static String alipay_private_key  = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCBkKAnZv4pjWpjT62S9z/QW531rPH2tMOYGLNo7ANz5r5KLMjm3cN1WiO7nEr63vXzVYJarzw2XmVnR895xZvn5+90Wf3NvfxXqgWXsGrRSJ1+g8Jw8qeZngyrifi7kWoXq0YKYhVpr522SNgDvbAzYVp/uJgM3P2It2eOHvtXd2G7biPERIFvJRcU8ACMib1+nsOpyB4SuINvW3OsHraxohj4YGWzKjd/8rqAxs6isunfDAwVFaipq1+yWXNVBpW1V/dNCUTbaX+/Fn3N0CU2tbcvyeEMfGkxZr8bfuP/n4uNxGA8nDUgiiyu/QZV6zmXqyK6u3OvhiGuueGZNEGpAgMBAAECggEAdxG2XP+lrAIuNz5OQbW/i3fm3pQleZf9+JUaq93Z/nWbgwdNSf2bVwmTtSKZNZwZY5q9xSEtsLlnb1brMPmNob3grYjWWnGyqc2yfgi+4b5eHppv4uTdaat58VtGnvmwCjh4kao6C3o88fxXqHh2qYFabe3yrj+ZMD98h3upeGMKlvJtsSKTqi62nmD/xBcug8TtMOS1UV+NFAOCJOZ+URzbVDYAn0QjnHuwDKkcqORH1YapwsXXLEZ4LdVw0QomkcdnpSc05K4fQU1YvbAGvONbAOinkUI7f/NLnCpI8S0yA/UU8fK9L68NemrXvRGPRZt6oUPbexE402p+EIj8UQKBgQDCVszZ5lbFcVYa6EZ502QbeUzSXUA3h8AAOCezdpEJYf1lH5q5WItLwMbd91PS5xm101FH58ZorPTDnD/VZUMGwz+iHaV7j/ap4HxTbvsJ5tm/ds7UokMB0rsmXNHXRg8cqTgs2VMnGfGij1bkdlKPcP8KacnhI8EETB+v7hRQRwKBgQCqrItew6jJn7WDN5id+jfmJwmcmpz9n3ACdfz+uVnF5dN5KwoaXnFpQNlZJL2zpw5T0KMEeQEiXE8VDgANNFrGvypdqrGP4RZ/XZIuz+STpg0Ah01WILMeSSJBgnJWPnop9iYMbFlLoYSBlRSwAtGwKAVNxHqjzsFOiRBaHthGjwKBgQCBeCxfWpoiTeBMasRQ8yj1OLmaSC+5DwI14zNn1yzG8HZNQWHl6vxaCmMyi0xX7Ehvnwm+esXvBJLIIrdQJnch8T/adB/EEuQExp5tQzmRni8g5Djk5fj4JPkzlJDj9zOoJ4BaOKqyGRGm+BGugLl+AIyY1mN9T0GO6FwP6++yjwKBgG4zctoBY96r7LuJDlYS1j0ZP6+KdYudgulT3cNrUnfhaaZ3D9Lu4DOh17UjcAmr+ChOMrQUnZLeH4HsxEPCZkql7GkGahgIskoS1Oy8904OjZ6lvl26R21qs1+xJrphJOgrM24aF54p8DDrXaw4ZcRkUuhf0QAr480d2x0VhXgpAoGAVCOYVV5mgczwsNjSiXyrrTei9sp/1uJf4YrdAQ0lZ0DkQb6Nvxl83xVn1xLE3VVd827XrneTHbPb6E3aTGbXhjjJVo8kAeFGyiQDF6VuSEL7j38qGkMtLzaRK2unHsVr1eBPT6tzVU1WD9EAyOaDM90wWpU+166VqOhhaQvx3VE=";

    // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAokZNbq02kZfeCuRToRGICmEYilOosT7iHXe1UZTNuZIkXLIC/27a2ZaimRw0Nn7mUOgEvgSBvx+13TrQ3qvbF+WDMmbV+Y/JINE2CQRQBNvMhvNoMAZrPU3DtnMINW2SiXuBKLEo9TcHUyhAODj/HwEvP8eGXt5jlIKcxSIZZCKI4bd/pSlpdPb+mXxPImJ3hraDEfaa6sPQ4dBmKNF9Hx4d/U4sP1+oKT0LxMWVED/KCMzLJ+guy0ls1E9CMvzgEkRgRM7eZ7mvl0flv9HCrBDc8wBrjd7/Uh6FjloLRm08zCc4Pu33SKFfw48Ea0gtnVS8M365rgnt4Q9Dev/LkwIDAQAB";

    // 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    public static String notify_url = "http://362450r38x.zicp.vip/alipay/pay";

    // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    public static String return_url = "https://openapi.alipaydev.com/gateway.do";

    // 签名方式
    public static String sign_type = "RSA2";

    // 字符编码格式
    public static String charset = "utf-8";

    // 支付宝网关
    public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
}

配置AliPayController类如下:

@Controller
@RestController
@RequestMapping("/alipay")
public class AliPayController {

    /**
     * 支付接口
     *
     * @param orderId 订单id
     * @param amount  支付金额
     * @param product 商品名称
     * @param body    商品描述
     * @return
     * @throws AlipayApiException
     */
    @GetMapping("/pay/{orderId}/{amount}/{product}/{body}")
    public String aliPay(@PathVariable String orderId,
                         @PathVariable String amount,
                         @PathVariable String product,
                         @PathVariable String body) throws AlipayApiException {

//获得初始化的AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(AliPayConfig.gatewayUrl,
                AliPayConfig.app_id,
                AliPayConfig.alipay_private_key,
                "json",
                AliPayConfig.charset,
                AliPayConfig.alipay_public_key,
                AliPayConfig.sign_type);
//        page
        AlipayTradePagePayRequest alipayPageRequest = new AlipayTradePagePayRequest();
        alipayPageRequest.setReturnUrl(AliPayConfig.return_url);
        alipayPageRequest.setNotifyUrl(AliPayConfig.notify_url);


        //拼接参数
        alipayPageRequest.setBizContent("{\"out_trade_no\":\"" + orderId + "\","
                + "\"total_amount\":\"" + amount + "\","
                + "\"subject\":\"" + product + "\","
                + "\"body\":\"" + body + "\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
        //请求
        return alipayClient.pageExecute(alipayPageRequest).getBody();
    }
}

之后只要在你需要调用支付宝沙箱接口的时候,按照"/alipay/pay/订单编号/总价钱/商品名称/商品描述"调用即可,但是商品订单编号需要九位,如下处理即可。
int num = userService.getBillNum();
String str = String.format("%09d", num);

### Spring Boot支付宝沙箱模拟支付的流程图及实现步骤 #### 一、整体流程概述 Spring Boot 集成支付宝沙箱模拟支付的核心在于理解其完整的支付流程。以下是基于已有引用内容整理的整体流程: 1. **初始化配置** 开发者需完成实名认证并获取免费隧道服务,随后调整本地开发环境的相关配置文件以匹配实际需求[^1]。 2. **用户下单操作** 用户在前端界面确认订单详情后触发“立即支付”按钮,此时向服务器发送请求(如 `/pay` 接口),传递必要的订单参数(如商品 ID、数量等)。此阶段涉及客户端与服务器之间的数据交换[^2]。 3. **服务器端逻辑处理** - 根据接收到的商品信息及其他附加条件(例如优惠券应用情况),动态计算最终应付金额。 - 构造唯一订单编号用于区分不同交易记录。 - 调用支付宝官方 API 提交前述组装好的必要字段至网关地址 `https://openapi.alipaydev.com/gateway.do?` 进行下一步验证[^2]。 4. **生成支付页面** 成功接收来自支付宝平台反馈的数据包之后,通常包含一段嵌入式的 HTML 片段用来渲染具体的付款视图组件;接着将这部分内容原样回传给浏览器呈现出来供消费者继续操作[^2]。 5. **同步通知机制** 当整个资金流转结束以后,系统会依据预设规则自动跳转会特定 URL 地址告知当前状态改变情形 —— 即所谓 “Return_URL”。不过需要注意的是该环节仅适用于简单提示性质的功能展现而非正式结算依据[^2]。 6. **异步回调校验** 更加严谨可靠的判定手段则依靠后台监听器捕捉由第三方推送过来的消息体并通过签名算法加以甄别真伪状况进而落实关联事务管理诸如更新数据库表结构或者发放奖励措施等等。 --- #### 二、具体技术要点解析 ##### (一)引入依赖库 为了便于项目快速接入功能模块,推荐采用 Maven 方式声明所需外部资源如下所示: ```xml <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>3.4.27.ALL</version> </dependency> ``` 上述片段明确了版本号的选择标准以便于后续维护升级工作顺利开展[^3]。 ##### (二)编写核心代码示例 以下列举部分关键方法实现概览: ###### 1. 创建 AlipayClient 对象实例化连接通道 ```java AlipayClient alipayClient = new DefaultAlipayClient( "https://openapi.alipaydev.com/gateway.do", app_id, merchant_private_key, "json", charset, alipay_public_key, sign_type); ``` ###### 2. 组织请求参数封装实体类对象 ```java AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); request.setBizContent("{" + "\"out_trade_no\":\"" + out_trade_no + "\"," + "\"total_amount\":" + total_amount + "," + "\"subject\":\"" + subject + "\"," "} "); ``` ###### 3. 执行远程调用获得响应结果字符串形式表达 ```java String result = alipayClient.pageExecute(request).getBody(); // 返回HTML格式的内容可以直接输出到前端展示区域 ``` 以上三段分别展示了如何建立通信桥梁、准备传输资料以及最后取得目标产物三个重要组成部分的具体表现形态[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值