SpringBoot 整合支付宝沙箱支付——从接入到回调 支付是电商系统的核心功能。接入支付宝需要企业资质但支付宝提供了沙箱环境——模拟真实支付流程不需要真实商户号适合开发测试和学习。一、沙箱环境准备1. 登录开放平台打开 open.alipay.com → 控制台 → 沙箱应用2. 获取配置参数APP_ID: 9021000122691234沙箱专用 应用私钥: 生成的 RSA2 私钥 支付宝公钥: 生成的 RSA2 公钥 服务器异步通知地址: http://你的地址/pay/notify3. 沙箱账号沙箱环境提供测试买家账号买家账号: rixwby5818sandbox.com 登录密码: 111111 支付密码: 111111二、SpringBoot 集成1. 引入依赖dependencygroupIdcom.alipay.sdk/groupIdartifactIdalipay-sdk-java/artifactIdversion4.38.200.ALL/version/dependency2. 配置alipay:app-id:9021000122691234app-private-key:|-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQ... 你的应用私钥不要写在配置里建议用Jasypt加密 -----END RSA PRIVATE KEY-----alipay-public-key:|-----BEGIN PUBLIC KEY----- MIIBIjANBgk... 支付宝公钥 -----END PUBLIC KEY-----notify-url:http://你的公网IP/pay/notifyreturn-url:http://localhost:9090/pay/returngateway-url:https://openapi-sandbox.dl.alipaydev.com/gateway.do3. 配置类ConfigurationConfigurationProperties(prefixalipay)DatapublicclassAlipayConfig{privateStringappId;privateStringappPrivateKey;privateStringalipayPublicKey;privateStringnotifyUrl;privateStringreturnUrl;privateStringgatewayUrl;BeanpublicAlipayClientalipayClient(){returnnewDefaultAlipayClient(gatewayUrl,appId,appPrivateKey,json,utf-8,alipayPublicKey,RSA2);}}三、统一下单接口ServicepublicclassAlipayService{AutowiredprivateAlipayClientalipayClient;AutowiredprivateAlipayConfigalipayConfig;/** * 创建支付订单返回支付页面表单 */publicStringcreatePay(StringorderNo,BigDecimalamount,Stringsubject){AlipayTradePagePayRequestrequestnewAlipayTradePagePayRequest();// 同步回调地址用户支付完成后跳转request.setReturnUrl(alipayConfig.getReturnUrl());// 异步回调地址支付宝服务器通知request.setNotifyUrl(alipayConfig.getNotifyUrl());JSONObjectbiznewJSONObject();biz.put(out_trade_no,orderNo);// 商户订单号biz.put(total_amount,amount.toString());// 支付金额biz.put(subject,subject);// 订单标题biz.put(product_code,FAST_INSTANT_TRADE_PAY);// 电脑网站支付request.setBizContent(biz.toJSONString());try{AlipayTradePagePayResponseresponsealipayClient.pageExecute(request);if(response.isSuccess()){returnresponse.getBody();// 返回 HTML 表单}}catch(AlipayApiExceptione){thrownewRuntimeException(支付宝下单失败,e);}returnnull;}}四、ControllerRestControllerRequestMapping(/pay)publicclassPayController{AutowiredprivateAlipayServicealipayService;/** * 发起支付 */PostMapping(/create)publicResultVOStringcreatePay(RequestBodyPayDTOdto){// 生成订单号StringorderNoORDIdUtil.simpleUUID().toUpperCase();StringformalipayService.createPay(orderNo,dto.getAmount(),dto.getSubject());returnResultVO.success(form);}/** * 同步回调用户支付完成后跳转到此页面 */GetMapping(/return)publicStringreturnUrl(HttpServletRequestrequest){// 获取支付宝返回的参数MapString,StringparamsgetParamsFromRequest(request);try{// 验签AlipaySignature.rsaCheckV1(params,alipayConfig.getAlipayPublicKey(),utf-8,RSA2);StringorderNoparams.get(out_trade_no);StringtradeNoparams.get(trade_no);return支付成功订单号: orderNo;}catch(AlipayApiExceptione){return验签失败;}}/** * 异步回调支付宝服务器通知必须返回 success */PostMapping(/notify)publicStringnotifyUrl(HttpServletRequestrequest){MapString,StringparamsgetParamsFromRequest(request);try{booleansignVerifiedAlipaySignature.rsaCheckV1(params,alipayConfig.getAlipayPublicKey(),utf-8,RSA2);if(signVerified){StringorderNoparams.get(out_trade_no);StringtradeNoparams.get(trade_no);StringtradeStatusparams.get(trade_status);// 支付成功if(TRADE_SUCCESS.equals(tradeStatus)){// 更新订单状态、归还库存等业务逻辑updateOrderStatus(orderNo,tradeNo);}returnsuccess;// 必须返回 success否则支付宝会重复通知}}catch(AlipayApiExceptione){e.printStackTrace();}returnfail;}privateMapString,StringgetParamsFromRequest(HttpServletRequestrequest){MapString,StringparamsnewHashMap();MapString,String[]requestParamsrequest.getParameterMap();for(Stringname:requestParams.keySet()){params.put(name,request.getParameter(name));}returnparams;}}五、秒杀系统集成支付支付完成后更新订单状态并归还库存ServicepublicclassPayService{AutowiredprivateOrderServiceorderService;AutowiredprivateProductServiceproductService;/** * 支付成功回调处理 */TransactionalpublicvoidhandlePaySuccess(StringorderNo,StringtradeNo){// 1. 查询订单SeckillOrderorderorderService.lambdaQuery().eq(SeckillOrder::getOrderNo,orderNo).one();if(ordernull||order.getStatus()!0){return;// 订单不存在或已处理}// 2. 更新订单状态为已支付order.setStatus(1);order.setPayTime(LocalDateTime.now());order.setTradeNo(tradeNo);orderService.updateById(order);// 3. 记录支付日志log.info(支付成功: 订单{}, 支付宝交易号{},orderNo,tradeNo);}}六、前端调用buttononclickpay()支付宝支付/buttonscriptasyncfunctionpay(){constrespawaitfetch(/pay/create,{method:POST,headers:{Content-Type:application/json},body:JSON.stringify({amount:99.99,subject:秒杀商品 - iPhone 15})});constresultawaitresp.json();if(result.code200){// 把返回的 HTML 表单写到页面并自动提交document.body.innerHTMLresult.data;document.forms[0].submit();// 自动跳转到支付宝}}/script七、注意事项异步通知必须返回 “success”全小写否则支付宝会重复通知 8 次验签必不可少防止伪造回调幂等处理——支付宝通知可能重复判断订单状态防止重复更新沙箱金额随便填不会真实扣款上生产环境只需把gateway-url换成生产地址其他代码不变 觉得有用的话点赞 关注【张老师技术栈】吧每周更新 Java/Python/爬虫 实战干货不让你白来。

相关新闻

最新新闻

小程序商城搭建工具对比:餐宝盈/BBWEYY/比文云/Yola/Odoo Website实测,含零代码SAAS、AI编程、源码定制交付

小程序商城搭建工具对比:餐宝盈/BBWEYY/比文云/Yola/Odoo Website实测,含零代码SAAS、AI编程、源码定制交付

一、汇总表工具更适合谁价格开发方式核心特点餐宝盈适合所有行业的商家,尤其是拥有自己实体门店的商家,如餐饮、茶饮、烘焙、便利店、生鲜、社区零售门店,尤其适合先把点单、会员、发券和复购做起来的老板。99/年模板SAAS先下单、先会员、先复…

2026/7/6 14:25:18
抖音动态监控助手:5分钟实现博主实时追踪与直播提醒

抖音动态监控助手:5分钟实现博主实时追踪与直播提醒

抖音动态监控助手:5分钟实现博主实时追踪与直播提醒 【免费下载链接】douyin_dynamic_push 【抖音】视频动态、直播间开播检测与推送 项目地址: https://gitcode.com/gh_mirrors/do/douyin_dynamic_push 还在为错过心仪博主的精彩直播而懊恼吗?还…

2026/7/6 14:25:18
根据可打包项目进行后续事项推进——HarmonyOS项目上架的AGC操作——九宫数独应用上架示例

根据可打包项目进行后续事项推进——HarmonyOS项目上架的AGC操作——九宫数独应用上架示例

一、app包确认 签名与打包信息确认:二、完成项目 这里我们用AI辅助来完成我们的项目,这里需要一些AI操作,我快速操作了,大家根据自己的项目来完成即可。 APP应用项目:厨房装修物料管控1、用tab页分成4个板块2、板块1&a…

2026/7/6 14:25:18
图片格式转换还要装软件?这款支持70+格式的免费工具,批量转换速度飞快

图片格式转换还要装软件?这款支持70+格式的免费工具,批量转换速度飞快

前几天要把一批PNG图片转成JPG格式,因为PNG文件太大,上传到网站的时候限速。我一开始用的是某在线图片转换网站,结果批量转换有数量限制,免费版一次只能转5个,要转更多得开会员。后来在技术群里有人推荐了reaConverter…

2026/7/6 14:25:18
大模型选型避坑指南:收藏!小白/程序员必看,成本、合规、性能一篇搞定!

大模型选型避坑指南:收藏!小白/程序员必看,成本、合规、性能一篇搞定!

本文深入剖析了12大模型家族(OpenAI、Anthropic、Google、xAI、DeepSeek、Kimi、MiniMax、腾讯混元、智谱、百度文心、阿里通义千问、字节豆包)的产品线结构、定价逻辑和适用场景。强调选型关键在于成本可控、合规路径短、迁移风险低,而非单纯…

2026/7/6 14:25:18
用AI优化简历?掌握这3步,让你的经历更匹配岗位需求,收藏起来!

用AI优化简历?掌握这3步,让你的经历更匹配岗位需求,收藏起来!

本文指出,AI优化简历的核心在于匹配而非单纯润色。通过提供岗位JD和自身经历,让AI拆解岗位要求、匹配个人经历并提供改写建议,能更有效地突出个人能力,避免虚构数据。文章强调AI应作为岗位匹配助手,帮助求职者从“我想…

2026/7/6 14:20:18

月新闻