JAVA新支付宝支付(保姆级)
一如既往的简易
第一步
添加maven
<!-- 支付宝支付最新依赖--><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.22.34.ALL</version><scope>compile</scope></dependency>
为了省事这里就一个配置文件
新建 AliPayConfig.java配置类
/*** 微信支付配置类*/
public class AliPayConfig {/** 支付宝支付的appid */public static String APP_ID = "xxxxxxxxxxx";/** 商户私钥 */public static String APP_PRIVATE_KEY = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";//字符集public static String CHARSET = "utf-8";//正式环境支付宝网关,如果是沙箱环境需更改成https://openapi.alipaydev.com/gateway.dopublic static String URL = "https://openapi.alipay.com/gateway.do";//加密方式public static String SIGN_TYPE = "RSA2";//配置证书public static String APP_CERT_PATH = "/xxxxxxxxxxx/appCertPublicKey_2021003113684123.crt";public static String ALIPAY_CERT_PATH = "/xxxxxxxxxxx/alipayCertPublicKey_RSA2.crt";public static String ALIPAY_ROOT_CERT_PATH = "/xxxxxxxxxxx/alipayRootCert.crt";}
新建 AliPayConfig.java配置类
/*** @author 影子*/
public interface AliPaymentService
{/*** 支付宝商品支付* @param alipayParam 订单接收对象* @return*/public Map<String, Object> alidoUnifiedOrder(String orderNumber) throws Exception;/*** 支付宝支付回调* @param request* @return*/public String aliPayNotify( HttpServletRequest request);}
新建 AlipaymentServiceImpl.java配置类
@Service
@Slf4j
public class AlipaymentServiceImpl implements AliPaymentService {//支付宝支付回调 省事0.0public static final String ALI_PAY_NOTIFY_URL = "https://xxxxxxxx/aliPayNotify";/*** 支付宝商品订单支付** @param payParam* @return* @throws Exception*/@Overridepublic Map<String,Object> alidoUnifiedOrder(String orderNumber) throws Exception {Map<String,Object> map = new HashMap<>();//支付总金额BigDecimal totalPrice = BigDecimal.ZERO;//你的订单金额totalPrice = totalPrice.add(BigDecimal.valueOf(600));try {//构造clientCertAlipayRequest certAlipayRequest = new CertAlipayRequest();//设置网关地址certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");//设置应用IdcertAlipayRequest.setAppId(AliPayConfig.APP_ID);//设置应用私钥certAlipayRequest.setPrivateKey(AliPayConfig.APP_PRIVATE_KEY);//设置请求格式,固定值jsoncertAlipayRequest.setFormat("json");//设置字符集certAlipayRequest.setCharset(AliPayConfig.CHARSET);//设置签名类型certAlipayRequest.setSignType(AliPayConfig.SIGN_TYPE);//设置应用公钥证书路径certAlipayRequest.setCertPath(AliPayConfig.APP_CERT_PATH);//设置支付宝公钥证书路径certAlipayRequest.setAlipayPublicCertPath(AliPayConfig.ALIPAY_CERT_PATH);//设置支付宝根证书路径certAlipayRequest.setRootCertPath(AliPayConfig.ALIPAY_ROOT_CERT_PATH);//构造clientDefaultAlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.payAlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();model.setBody("我是测试数据");//App支付测试Javamodel.setSubject("影子");/*setTimeoutExpress :该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。该参数数值不接受小数点, 如 1.5h,可转换为 90m。*/model.setTimeoutExpress("30m");//请保证OutTradeNo值每次保证唯一model.setOutTradeNo(“2017090080001939235”);//商品订单(2017090080001939235 )//订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]model.setTotalAmount("0.01");request.setBizModel(model);//商户外网可以访问的异步地址request.setNotifyUrl(ALI_PAY_NOTIFY_URL);try {//这里和普通的接口调用不同,使用的是sdkExecuteAlipayTradeAppPayResponse responses = alipayClient.sdkExecute(request);map.put("code",200);map.put("msg","操作成功");map.put("data",responses.getBody());return map;//就是orderString 可以直接给客户端请求,无需再做处理。} catch (AlipayApiException e) {e.printStackTrace();map.put("code",500);map.put("msg","下单失败");return map;}} catch (Exception e) {e.printStackTrace();log.info("异常==>",e);map.put("code",500);map.put("msg","支付异常");return map;}}/*** 支付宝支付回调* @param request* @return*/@Overridepublic String aliPayNotify(HttpServletRequest request) {//支付宝交易号String payTradeNo= "";//获取支付宝POST过来反馈信息Map < String , String > params = new HashMap< String , String >();Map requestParams = request . getParameterMap ();for (Iterator 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 . length ; i ++ ) {valueStr = (i == values . length - 1) ? valueStr + values [ i ]: valueStr + values [ i ] + "," ;}params.put(name,valueStr );}payTradeNo = params.get("trade_no");try {//验签boolean flag = AlipaySignature.rsaCertCheckV1(params,AliPayConfig.ALIPAY_CERT_PATH,AliPayConfig.CHARSET,AliPayConfig.SIGN_TYPE );if (flag){//验签成功//商户订单号String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");//交易状态String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"), "UTF-8");//查询订单逻辑省略....if (trade_status.equals("TRADE_SUCCESS")) {if (out_trade_no != null) {// 注意特殊情况:订单已经退款,但收到了支付结果成功的通知,不应把商户的订单状态从退款改成支付成功// 注意特殊情况:微信服务端同样的通知可能会多次发送给商户系统,所以数据持久化之前需要检查是否已经处理过了,处理了直接返回成功标志//业务数据持久化//业务逻辑省略....//必须返回SUCCESS 不然支付宝收不到成功信息会再次请求回调return "SUCCESS";}}}return "500";} catch (AlipayApiException | UnsupportedEncodingException e) {e.printStackTrace();}return null;}
Controller类贴一下吧 照顾一下迷的“小”朋友
/*** 支付宝商品支付* @param orderNumber* @return* @throws Exception*/@PostMapping("/alidoUnifiedOrder")public Map<String,Object> alidoUnifiedOrder(String orderNumber) throws Exception {Map<String,Object> map = aliPaymentService.alidoUnifiedOrder(orderNumber);return map;}/*** 商品订单支付回调* @param request* @return*/@PostMapping("/aliPayNotify")@ResponseBodypublic String aliPayNotify( HttpServletRequest request) {String code = aliPaymentService.aliPayNotify(request);return code;}
到这就结束了 够简单吧 !复制粘贴即可一如既往没其它依赖
你学废了吗?
JAVA新支付宝支付(保姆级)相关推荐
- JAVA对接支付宝支付(超详细,一看就懂)
Java对接支付宝支付 更多内容 冷文博客: 传送门 引入 为什么要发这篇帖子呢?原因很简单,就是因为在一个稍稍正规一点的应用上都会有支付这个环节,我们日常的在线支付如今包括支付宝,微信钱包,QQ钱包 ...
- java对接支付宝支付
java对接支付宝支付演示 现在有不少的项目都需要对接支付,这里主要是进行讲解对接支付宝H5支付 废话不多说 上代码 引入支付宝官方的sdk <!-- https://mvnrepository ...
- 【超详细,全流程】java对接支付宝支付
支付流程 一.对接前的准备 1.1创建应用,获取参数:APPID(使用沙箱环境可跳过) 1.1.1添加产品 1.1.2配置密钥,获取第二个参数:商户的私钥 1.1.3支付宝网关 1.1.4生成参数密钥 ...
- Java接入支付宝支付测试买iPhone13 pro max
Java接入支付宝支付 一.介绍 二.沙箱 三.支付流程 四.准备支付宝 五.代码 1.前端代码 2.后端代码 六.测试 一.介绍 支付宝官方网站 支付宝(中国)网络技术有限公司是国内的第三方支付平台 ...
- Java接入支付宝支付超级详细教程——从入门到精通
Java接入支付宝支付教程 源码下载 源码获取:点击获取源码 本文介绍了"二维码付款"的代码.其他支付方式的代码都在源码中. 一.创建应用 1.登录支付宝开放平台 支付宝开放平 ...
- Java接入支付宝支付教程
Java接入支付宝支付教程 一.创建应用 1.登录支付宝开放平台 支付宝开放平台网址:https://open.alipay.com/platform/developerIndex.htm 2.创建一 ...
- java 对接支付宝支付
2019独角兽企业重金招聘Python工程师标准>>> 对接支付宝支付的前提: 1,商户开通支付能力 登录蚂蚁金服 开放平台:https://open.alipay.com/plat ...
- Java接入支付宝支付(沙箱)
支付宝支付(沙箱) 支付宝支付 支付宝官方网站:https://www.alipay.com/ 支付宝(中国)网络技术有限公司是国内的第三方支付平台,致力于提供"简单.安全.快速" ...
- java 调用支付宝支付接口
最近公司在做支付模块,在接入过程中遇到了很多坑,费了不少事,现在分享一下接入方法,也记录一下,以后可能还用的到.用的是支付宝的即时到帐支付功能和微信的扫码支付功能,相比起来,个人感觉支付宝的文档和接入 ...
最新文章
- android:Activity启动模式
- html算术计算,js实现计算器 提供算术表达式求值
- python包接口,Typetalk聊天API的python接口包
- Qt文档阅读笔记-moc工具使用及其理论(moc工具如何添加到makefile中)
- Python numpy学习笔记(一)
- VMware虚拟机CentOS7 - VMnet8网络配置及常见问题解决
- macos big sur 11 完整离线安装包v11.5.2正式版
- Kali Linux下社工密码字典生成工具Cupp教程
- 【深度学习】PyCorrector中文文本纠错实战
- 联通发送wap push备忘录
- 从音箱入门到高手必看知识
- 大数据可视化学习总结
- 一区HR:南京农业大学房婉萍教授团队揭示茶树-豆科植物互作改善茶叶品质
- 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
- 易安居平安家园隐私政策
- linux重做系统分区,如何重装linux系统
- plotjuggler⬅ROS1/ROS2画轨迹神器➡rqt_plot+rqt_multiplot之超级加强版
- 颜色透明度百分比对应8位颜色值
- Google发展史 Google十三年
- matlab绕圆柱有环量流线,绕圆柱无环量和有环量流动流线分布图