Java网站如何集成支付宝当面付,企业个人都能使用的支付(比较简单)

创建应用

这个得先去登录 - 支付宝创建应用

相关配置设置

maven配置

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

支付服务代码

/*** 支付宝支付* @author leell* @date 2023/7/21 16:39:58*/
public interface AliPayService {/*** 预下单* @return 返回二维码链接*/String createPrecreateTrade(AliPrecreateParam param) throws RuntimeException;/*** 检查支付状态* @param orderNo 订单号* @return 支付状态 true:已支付 false:未支付*/boolean checkAlipayStatus(String orderNo) throws RuntimeException;/*** 取消支付* @param orderNo 订单号* @return 取消状态*/boolean cancelPay(String orderNo) throws RuntimeException;/*** 退款* @param orderNo 订单号* @return 取消状态*/boolean refundPay(String orderNo, BigDecimal money) throws RuntimeException;/*** 验证签名* @param params 参数* @return 状态*/boolean rsaCheckV1(Map<String,String> params) throws RuntimeException;/*** 检查回调支付状态* @param params 参数* @return 状态* @throws RuntimeException 异常*/boolean checkNotifyPayStatus(Map<String,String> params) throws RuntimeException;/*** 获取订单号* @param params 支付宝返回参数* @return 订单号*/String getOrderNo(Map<String,String> params);
}
/*** 支付宝支付** @author leell* @date 2023/7/21 16:46:16*/
@Service
public class AliPayServiceImpl implements AliPayService {@Autowiredprivate PayHelper payHelper;@Autowiredprivate ConfigService configService;@Overridepublic String createPrecreateTrade(AliPrecreateParam param) throws RuntimeException {try {AlipayClient alipayClient = payHelper.getAlipayClient();AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//异步接收地址,仅支持http/https,公网可访问request.setNotifyUrl(param.getNotifyUrl());JSONObject bizContent = new JSONObject();bizContent.put("out_trade_no", param.getOutTradeNo());bizContent.put("total_amount", param.getTotalAmount());bizContent.put("subject", param.getSubject());request.setBizContent(bizContent.toString());AlipayTradePrecreateResponse response = alipayClient.execute(request);AssertUtil.isTrue(response.isSuccess(), response.getMsg());return response.getQrCode();} catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic boolean checkAlipayStatus(String orderNo) throws RuntimeException {try {AlipayClient alipayClient = payHelper.getAlipayClient();AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();JSONObject bizContent = new JSONObject();bizContent.put("out_trade_no", orderNo);bizContent.put("query_options", new String[]{"trade_settle_info"});request.setBizContent(bizContent.toString());AlipayTradeQueryResponse response = alipayClient.execute(request);JSONObject tradeResponse = JSONObject.parseObject(response.getBody()).getJSONObject("alipay_trade_query_response");String result = tradeResponse.getString("trade_status");return "TRADE_SUCCESS".equals(result);} catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic boolean cancelPay(String orderNo) throws RuntimeException {try {AlipayClient alipayClient = payHelper.getAlipayClient();AlipayTradeCancelRequest request = new AlipayTradeCancelRequest();JSONObject bizContent = new JSONObject();bizContent.put("out_trade_no", orderNo);request.setBizContent(bizContent.toString());AlipayTradeCancelResponse response = alipayClient.execute(request);return response.isSuccess();} catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic boolean refundPay(String orderNo, BigDecimal money) throws RuntimeException {try {AlipayClient alipayClient = payHelper.getAlipayClient();AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();JSONObject bizContent = new JSONObject();bizContent.put("refund_amount", money);bizContent.put("out_trade_no", orderNo);request.setBizContent(bizContent.toString());AlipayTradeRefundResponse response = alipayClient.execute(request);return response.isSuccess();} catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic boolean rsaCheckV1(Map<String, String> params) throws RuntimeException {try {String alipayPublicKey = configService.getValue("pay_alipay_public_key");String charset = configService.getValue("pay_alipay_charset");String signType = configService.getValue("pay_alipay_signType");return AlipaySignature.rsaCheckV1(params, alipayPublicKey, charset, signType);} catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic boolean checkNotifyPayStatus(Map<String, String> params) throws RuntimeException {// 取得支付宝POST过来的异步通知参数,进行验签// 注意:调用SDK验证签名需要使用支付宝公钥,不要使用自己生成的RSA公私钥对boolean verifyResult = this.rsaCheckV1(params);if (verifyResult) {// 验签通过String tradeStatus = params.get("trade_status");return "TRADE_SUCCESS".equals(tradeStatus) || "TRADE_FINISHED".equals(tradeStatus);}return false;}@Overridepublic String getOrderNo(Map<String, String> params) {// 处理交易成功的逻辑return params.get("out_trade_no");}
}

支付宝相关配置参数

我的后台服务采用的都是参数配置型,并没有放到yaml文件中。上面的appid primarykey和publickey signtype按照支付宝官网上找到自己的,对于特定的publickey和primarykey可以下载支付宝证书生成工具本地生成,然后同步到支付宝

当面付线上案例:

模板码-网站源码,源码下载,模板插件,商业源码平台 (mubanma.com)

惠集会-专业的宠物用品在线购物平台 (huijihui.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/158127.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu无网络连接,没有网络标识,快速解决方法

在这里插入代码片当我们装虚拟机的时候&#xff0c;需要用到网络时发现没有网络连接&#xff0c;且右上角没有网络标识符&#xff0c;这时只需要简单的输入一下三个命令即可 sudo nmcli networking offsudo nmcli networking onsudo service network-manager restart然后重启客…

HarmonyOS鸿蒙原生应用开发设计- 隐私声明

HarmonyOS设计文档中&#xff0c;为大家提供了独特的隐私声明&#xff0c;开发者可以根据需要直接引用。 开发者直接使用官方提供的隐私声明内容&#xff0c;既可以符合HarmonyOS原生应用的开发上架运营规范&#xff0c;又可以防止使用别人的内容产生的侵权意外情况等&#xff…

Java反射详解:入门+使用+原理+应用场景

反射非常强大和有用&#xff0c;现在市面上绝大部分框架(spring、mybatis、rocketmq等等)中都有反射的影子&#xff0c;反射机制在框架设计中占有举足轻重的作用。 所以&#xff0c;在你Java进阶的道路上&#xff0c;你需要掌握好反射。 怎么才能学好反射&#xff0c;我们需要…

LeetCode | 876. 链表的中间结点

LeetCode | 876. 链表的中间结点 OJ链接 我们这里有一个很好的思路&#xff0c;我们定义两个变量&#xff0c;第一个变量走两步&#xff0c;第二个变量走一步&#xff0c;一直循环&#xff0c;当第一个变量走到最后的时候停下来&#xff0c;这个时候第二个变量就是中间的那个…

【Apache Flink】Flink DataStream API的基本使用

Flink DataStream API的基本使用 文章目录 前言1. 基本使用方法2. 核心示例代码3. 完成工程代码pom.xmlWordCountExample测试验证 4. Stream 执行环境5. 参考文档 前言 Flink DataStream API主要用于处理无界和有界数据流 。 无界数据流是一个持续生成数据的数据源&#xff0…

unraid 安装并设置 zerotier 内网穿透安装 unraid 局域网内其他设备

Read Original 最近看了以下两个文章&#xff0c;感谢发布的各种精彩文章&#xff0c;让我受益匪浅。OPENWRT 的固件在设置了&#xff0c;【自动允许客户端 NAT】后&#xff0c;可以直接访问局域网其他设备&#xff0c;而我 unraid 部署 zerotier 后&#xff0c;只能访问 unra…

API接口安全设计

简介 HTTP接口是互联网各系统之间对接的重要方式之一&#xff0c;使用HTTP接口开发和调用都很方便&#xff0c;也是被大量采用的方式&#xff0c;它可以让不同系统之间实现数据的交换和共享。 由于HTTP接口开放在互联网上&#xff0c;所以我们就需要有一定的安全措施来保证接口…

C++异常处理

C 异常处理涉及到三个关键字&#xff1a;try、catch、throw。 在 c程序中&#xff0c;任何需要检测异常的语句&#xff0c;都必须在 try 语句块中执行&#xff0c;异常必须由紧跟着 try 语句后面的 catch 语句来捕获并处理&#xff0c;因此 try 与 catch 总是结合使用&#xff…

C++并发编程实战——05.内存模型与原子操作

文章目录 内存模型与原子操作内存模型原子操作和原子类型标准原子类型std::atomic_flagstd::atomic\<bool>std::atomic<T\*>std::atomic<user_define_type> 类模板非成员函数 同步操作和强制排序同步发生与先行发生内存序**顺序一致性**(memory_order_seq_cs…

图解系列--路由器和它庞大的功能

03.01 何为路由器 路由器是指主要负责 OSI参考模型中网络层的处理工作&#xff0c;并根据路由表信息在不同的网络 之间转发IP 分组的网络硬件(图3-1)。这里的网络一般是指IP 子网&#xff0c;也可以称为广播域。此外&#xff0c;现在的路由器还会搭载其他各种各样的功能。 0…

【Midjourney入门教程3】写好prompt常用的参数

文章目录 1、图片描述词&#xff08;图片链接&#xff09;文字描述词后缀参数2、权重划分3、后缀参数版本选择&#xff1a;--v版本风格&#xff1a;--style长宽比&#xff1a;--ar多样性: --c二次元化&#xff1a;--niji排除内容&#xff1a;--no--stylize--seed--tile、--q 4、…

openeuler 使用指令查找U盘:输入fdisk -l,内核崩溃 ,系统重启,使用lsblk显示正常,数据传输正常

报错日志&#xff1a; [rootedgenode1 ~]# fdisk -l Disk /dev/ram0: 4 MiB, 4194304 bytes, 8192 sectors Units: sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk /d…