支付宝支付示例

news/2025/1/12 22:47:38/

引入alipay-sdk-java依赖

  1. 创建AlipayConfig类,包含支付宝相关配置信息
public class AlipayConfig {// 商户appidpublic static String APPID = "";// 私钥public static String RSA_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 GATEWAY_URL = "https://openapi.alipay.com/gateway.do";// 日志记录目录public static String log_path = "C:\\";
}
  1. 创建AlipayUtil类,包含支付宝支付相关方法
public class AlipayUtil {/*** 支付宝手机网站支付请求* @param out_trade_no 订单号* @param total_amount 订单金额* @param subject 订单标题* @param response HttpServletResponse* @throws IOException*/public static void alipayTradeWapPay(String out_trade_no, String total_amount, String subject, HttpServletResponse response) throws IOException {AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.GATEWAY_URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.sign_type);AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();model.setOutTradeNo(out_trade_no);model.setTotalAmount(total_amount);model.setSubject(subject);model.setProductCode("QUICK_WAP_PAY");model.setTimeoutExpress("30m");AlipayTradeWapPayRequest request = new AlipayTradeapapPayRequest();request.setReturnUrl(AlipayConfig.return_url);request.setNotifyUrl(AlipayConfig.notify_url);request.setBizModel(model);String form = "";try {form = alipayClient.pageExecute(request).getBody();response.setContentType("text/html;charset=" + AlipayConfig.CHARSET);response.getWriter().write(form);//直接将完整的表单html输出到页面response.getWriter().flush();response.getWriter().close();} catch (AlipayApiException e) {e.printStackTrace();}}/*** 支付宝手机网站支付回调处理* @param request HttpServletRequest* @return* @throws AlipayApiException*/public static boolean alipayReturn(HttpServletRequest request) throws AlipayApiException {Map<String, String> params = new HashMap<String, String>();Map<String, String[]> requestParams = request.getParameterMap();for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {String name = (String) iter.next();String[] values = (String[]) requestParams.get(name);String valueStr = "";for (int i = 0; i values values.length; i++) {valueStr = (i == values.length - 1) ? valueStr + values[i]: valueStr + values[i] + ",";}params.put(name, valueStr);}boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, AlipayConfig.sign_type); //调用SDK验证签名return signVerified;}/*** 支付宝异步通知处理* @param request HttpServletRequest* @return* @throws AlipayApiException*/public static boolean alipayNotify(HttpServletRequest request) throws AlipayApiException {Map<String, String> params = new HashMap<String, String>();Map<String, String[]> requestParams = request.getParameterMap();for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {String name = (String) iter.next();String[] values = (String[]) requestParams.get(name);String valueStr = "";for (int i = 0; i values values.length; i++) {valueStr = (i == values.length - 1) ? valueStr + values[i]: valueStr + values[i] + ",";}params.put(name, valueStr);}boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, AlipayConfig.sign_type); //调用SDK验证签名if (signVerified) {String trade_status = request.getParameter("trade_status"); //交易状态if (trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")) {//处理订单业务逻辑return true;} else {return false;}} else {return false;}}
}
  1. 创建AlipayController类,处理支付宝支付请求和回调
@RestController
@RequestMapping("/")
public class AlipayController {@RequestMapping("alipay")public void alipay(HttpServletRequest request, HttpServletResponse response) throws IOException {String out_trade_no = "商户订单号";String total_amount = "支付金额";String subject = "交易标题";AlipayUtil.alipayTradeWapPay(out_trade_no, total_amount, subject, response);}@RequestMapping("alipayReturn")public String alipayReturn(HttpServletRequest request) throws AlipayApiException {boolean result = AlipayUtil.alipayReturn(request);//处理支付宝同步通知业务逻辑if (result) {return "支付成功";} else {return "支付失败";}}@RequestMapping("alipayNotify")public String alipayNotify(HttpServletRequest request) throws AlipayApiException {boolean result = AlipayUtil.alipayNotify(request);//处理支付异异步通知业务逻辑if (result) {return "success";} else {return "fail";}}
}

http://www.ppmy.cn/news/87305.html

相关文章

章节1:Burp Suite基本介绍

章节1&#xff1a;Burp Suite基本介绍 Burp [bɜ:p] Suite [swiːt] 01 Burp Suite基本介绍 官网介绍 https://portswigger.net/ 主要产品 Burp Suite培训和认证&#xff08;Academy&#xff09;研究院&#xff08;Research&#xff09;日报&#xff08;Daily&#xff09;…

PHP+vue高校教学考研资料分享系统

运行环境:phpstudy/wamp/xammp等 开发语言&#xff1a;php 后端框架&#xff1a;Thinkphp5 前端框架&#xff1a;vue.js 服务器&#xff1a;apache 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat/phpmyadmin用户首次登录系统需要注册一个用户&#xff0c;用户在登陆平…

AIGC功能在线制作思维导图?

ProcessOn思维导图软件是一款功能强大的在线制作思维导图的工具&#xff0c;它提供了丰富的模板和图标&#xff0c;可以帮助用户快速制作出高质量的思维导图。其中&#xff0c;AIGC(人工智能图形识别)功能是 ProcessOn软件中的一大特色&#xff0c;它可以帮助用户更加高效地制…

【三维激光扫描】实验05:点云数据预处理操作

SiScan软件可以对三维激光扫描的点云数据进行一些列的预处理操作,如:粗差剔除、点云抽稀、点云分割、调整水平面、删除分割面等等。 粗差剔除剔除粗差点抽稀抽稀数据点云分割根据点云的三维特征进行分组调整水平面根据三个点来调整水平面分割面水平纠正根据分割面进行水平纠正…

存放页的大池子——InnoDB表空间

在上一章节中&#xff0c;我们知道了提到了表空间&#xff0c;表空间里面没有直接存放表&#xff0c;有的是许多许多的页&#xff0c;我们也说了表空间的分类&#xff0c;有系统表空间&#xff0c;独立表空间&#xff0c;其他表空间。 每个新建的表都会在对应的数据库目录里面…

设计模式期末程序题(只是一个简单整理)

1.下图是某系统的数据部分的类图。因为该层次结构中的操作需要经常变化&#xff0c;所以需要用访问者模式对其进行重构&#xff0c;请按以下要求完成题目&#xff1a; &#xff08;1&#xff09;绘制重构后系统完整类图。&#xff08;4分&#xff09; &#xff08;2&#xff09…

小型双轮差速底盘实现红外避障功能

1. 功能说明 在R023e机器人车体上安装1个近红外传感器&#xff0c;实现机器人小车避障功能。 2. 电子硬件 在这个示例中&#xff0c;我们采用了以下硬件&#xff0c;请大家参考&#xff1a; 主控板 Basra主控板&#xff08;兼容Arduino Uno&#xff09; 扩展板 Bigfish2.1扩展板…

数据结构---二叉树(C语言)

二叉树 1. 二叉树1.1 二叉树的遍历1.1.1二叉树前中后序遍历&#xff08;递归版&#xff09;1.1.2 层序遍历 1.2 二叉树的其他相关接口1.2.1 求二叉树的结点数量1.2.2 求叶子结点个数1.2.3 求树高1.2.4 求第k层结点个数1.2.5 查找二叉树值为k的结点 1. 二叉树 空树非空&#xff…