SSM项目实现支付宝沙箱支付

本文介绍如何在项目中集成支付宝支付功能,包括申请密钥、配置支付参数及编写Java代码实现支付流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.登录自己的支付宝支付宝开发者中心在控制台中找到研发服务

在这里插入图片描述
2.在沙箱应用中如图点击生成方法

在这里插入图片描述
3.Windows系统点击WINDOWS下载支付宝开放平台开发助手

在这里插入图片描述
4.下载完成后打开软件,点击生成密钥,这里的应用私钥后面还有用,暂时不要关闭软件

在这里插入图片描述
5.生成好然后回到支付宝开发者中心将刚刚生成好的密钥设置好
在这里插入图片描述
6.将支付宝支付的依赖导入项目中

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

7.接下来就是写Java代码配置支付宝接口

public class AlipayConfig {

    // 应用ID
    public static String app_id = "";

    // 商户私钥 
    public static String merchant_private_key = "";

    // 支付宝公钥
    public static String alipay_public_key = "";

    // 服务器异步通知页面路径
    public static String notify_url = "";

    // 页面跳转同步通知页面路径
    public static String return_url = "";

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

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

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

}

在支付宝沙箱应用中查看自己的APPID填入应用ID中

在这里插入图片描述
返回支付宝开放平台复制应用私钥粘贴到商户私钥中

在这里插入图片描述
在支付宝沙箱中复制支付宝公钥粘贴到支付宝公钥中

在这里插入图片描述
服务器异步通知页面路径简单的来说就是支付失败之后需要跳转的页面,页面跳转同步通知页面路径就是支付成功之后需要跳转的页面

8.然后再来编写控制层

@Controller
public class PayController {
    long l = System.currentTimeMillis();

    @RequestMapping("/Alipay")
    public void payController(HttpServletRequest request, HttpServletResponse response,) throws IOException {

        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        //获得初始化的AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);

        //设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(AlipayConfig.return_url);
        alipayRequest.setNotifyUrl(AlipayConfig.notify_url);

        // 商户订单号
		String out_trade_no = req.getParameter("order_number");
		// 付款金额
		String total_amount = req.getParameter("money");
		// 订单名称
		String subject = req.getParameter("order_name");
		// 商品描述
		String body = req.getParameter("describe");
		alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"total_amount\":\"" + total_amount
				+ "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"" + body + "\","
				+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
		System.out.println("{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"total_amount\":\"" + total_amount + "\","
				+ "\"subject\":\"" + subject + "\"," + "\"body\":\"" + body + "\","
				+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
        //请求
        String form = "";
        try {
            form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        response.setContentType("text/html;charset=" + AlipayConfig.charset);
        response.getWriter().write(form);//直接将完整的表单html输出到页面
        response.getWriter().flush();
        response.getWriter().close();
    }
}

商户订单号、付款金额、订单名称都是必填的,且不能为null或空字符串,否则会无法识别订单信息

测试需要下载支付宝沙箱钱包,目前只支持安卓,苹果的下载不了

在这里插入图片描述
下载完成登录的账号和密码在沙箱账号中有在这里插入图片描述
最后启动项目,就可以测试啦
在这里插入图片描述
付款成功后,浏览器会跳转到我们自己定义的同步回调页面,来验证是否付款成功等操作

学会了就拿去装13吧

在这里插入图片描述

第一次写,写得不好还请多担待,不懂得也可以在评论去提问

### 在SSM框架中实现支付宝沙箱支付功能 #### 1. ### 添加依赖 为了在SSM框架中集成支付宝沙箱支付,首先需要在项目的`pom.xml`文件中添加支付宝SDK的相关依赖。以下是常用的依赖配置[^2]: ```xml <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.16.2.ALL</version> </dependency> ``` 如果使用的是较新的版本,则可以替换为最新稳定版的依赖项,例如: ```xml <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.35.79.ALL</version> </dependency> ``` --- #### 2. ### 创建配置文件 创建一个名为`alipay.properties`的配置文件用于存储支付宝相关的参数。该文件通常放置于`resources`目录下,并包含如下内容[^3]: ```properties # 支付宝开放平台分配给开发者的应用ID app.id=your_app_id_here # 接入环境网关地址(沙箱模式) gateway.url=https://openapi.alipaydev.com/gateway.do # 商户私钥 merchant.private.key=your_merchant_private_key_here # 支付宝公钥 alipay.public.key=your_alipay_public_key_here # 字符编码格式 charset=UTF-8 # 签名算法类型 sign.type=RSA2 # 返回页面通知URL return.url=http://your_return_url_here # 异步通知URL notify.url=http://your_notify_url_here ``` 以上字段均需根据实际申请情况填写。 --- #### 3. ### 编写服务层代码 编写一个专门的服务类来处理支付宝支付逻辑。以下是一个简单的示例代码片段: ```java import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipayTradePagePayRequest; import java.util.Properties; public class AlipayService { private final Properties properties; public AlipayService(Properties properties) { this.properties = properties; } /** * 发起支付请求 */ public String generatePaymentLink(String outTradeNo, double totalAmount, String subject) throws AlipayApiException { // 初始化客户端实例 AlipayClient alipayClient = new DefaultAlipayClient( properties.getProperty("gateway.url"), properties.getProperty("app.id"), properties.getProperty("merchant.private.key"), "json", properties.getProperty("charset"), properties.getProperty("alipay.public.key"), properties.getProperty("sign.type") ); // 创建支付请求对象 AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); request.setReturnUrl(properties.getProperty("return.url")); request.setNotifyUrl(properties.getProperty("notify.url")); // 设置业务参数 request.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\",\"total_amount\":" + totalAmount + ",\"subject\":\"" + subject + "\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); // 调用执行方法获取响应数据 return alipayClient.pageExecute(request).getBody(); } } ``` 此代码实现了通过传入订单编号、总金额以及商品名称生成支付链接的核心功能。 --- #### 4. ### 处理回调通知 当用户完成支付后,支付宝会向指定的通知URL发送异步消息。因此,在项目中还需要定义相应的控制器用来接收并解析这些消息。下面展示了一个基础的例子: ```java @RestController @RequestMapping("/payment/callback") public class PaymentCallbackController { @PostMapping public ResponseEntity<String> handleNotification(@RequestBody Map<String, String[]> params) { try { // 校验签名有效性 boolean verifyResult = AlipaySignature.rsaCheckV1(params, "your_alipay_public_key", "UTF-8", "RSA2"); if (!verifyResult) { return ResponseEntity.badRequest().body("Invalid signature."); } // 提取重要信息如交易状态等进行后续处理... String tradeStatus = params.get("trade_status")[0]; switch (tradeStatus) { case "TRADE_SUCCESS": case "TRADE_FINISHED": // 更新数据库记录或其他操作 break; default: // 其他状态不做任何修改 break; } return ResponseEntity.ok("Success"); } catch (Exception ex) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ex.getMessage()); } } } ``` 注意:这里的`rsaCheckV1`函数来自官方提供的工具类库,请确保已正确加载支付宝公共密钥字符串作为输入之一。 --- #### 5. ### 数据库设计建议 对于涉及到资金流动的应用程序来说,维护一份详细的账单日志是非常重要的。可以考虑建立一张类似于这样的表格结构: | 列名 | 类型 | 描述 | |------------------|--------------|--------------------------| | id | INT | 主键自增 | | order_number | VARCHAR(64) | 平台内部唯一订单号 | | payment_method | ENUM('ALIPAY') | 使用何种方式付款 | | amount | DECIMAL(10,2)| 实际支付金额 | | status | TINYINT | 当前订单的状态码 | | created_at | DATETIME | 创建时间戳 | | updated_at | DATETIME | 上次更新的时间戳 | 这样有助于追踪每一步骤的结果直至最后成功与否为止。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值