Spring MVC 使用支付宝接口完成在线支付的示例代码
作者:geekzsp 发布时间:2023-11-29 04:07:55
标签:Spring,MVC,支付宝
项目中要使用到在线支付功能 目前常用的在线支付手段主要是 支付宝 和微信。
这里我使用的是支付宝支付,支付宝有个好处就是他有一个沙箱模式 即使没有申请渠道的资格也可以体验一把在线支付。
第一步:完善沙箱信息
进入支付宝的开发者中心 就可以看到有个沙箱环境
使用支付宝提供的秘钥生成工具 生成对应的秘钥 一定要保存好。支付宝推荐使用RSA2(SHA256)秘钥
把自己的公钥填上去就可以了。
第二步 阅读在线支付开发文档
里面需要的配置信息 对应的使用沙箱环境的信息
第三步 环境搭建
下载服务端SDK 并添加到项目中
这里我使用的maven项目 导入本地jar包采用了下列方式
<dependency>
<groupId>com.alipay</groupId>
<artifactId>alipay</artifactId>
<version>1.1.1</version>
<scope>system</scope>
<!--本地jar的路径,相对或者绝对都可以-->
<systemPath>${project.basedir}/lib/alipay-sdk-java20170307171631.jar</systemPath>
</dependency>
<dependency>
<groupId>com.alipay1</groupId>
<artifactId>commons</artifactId>
<version>1.1.1</version>
<scope>system</scope>
<!--本地jar的路径,相对或者绝对都可以-->
<systemPath>${project.basedir}/lib/commons-logging-1.1.1.jar</systemPath>
</dependency>
1、调用接口 启动支付页面 具体参数说明 请查看文档
//转到支付页面
//初始化客户端 只需要实例化一次(线程安全)
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do"
, "2016080300153333", GlobalConstant.APP_PRIVATE_KEY, "json", "UTF-8", GlobalConstant.ALIPAY_PUBLIC_KEY, "RSA2");
AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的request
//在公共参数中设置回跳和通知地址
alipayRequest.setReturnUrl("回跳地址");
//异步回调一定是要在外网 不然支付宝服务器无法访问
alipayRequest.setNotifyUrl("异步回调地址");
alipayRequest.setBizContent("{" +
" \"out_trade_no\":\"" + orderId + "\"," +
" \"total_amount\":\"" + fetchParcel.getMoney() + "\"," +
" \"subject\":\"代领快递\"," +
" \"seller_id\":\"2088102169684935\"," +
" \"product_code\":\"QUICK_WAP_PAY\"" +
" }");//填充业务参数
String form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单
httpResponse.setContentType("text/html;charset=utf-8");
httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面
httpResponse.getWriter().flush();
1、接收同步回调展示 结果 此结果只是展示,具体状态必须依赖支付宝的异步通知
2、接收异步回调更改订单状态 支付宝的异步回调 是服务器之间的通讯并不会产生页面 并且 设置的回调地址
一定是要在外网上的 不然支付宝的服务器是无法访问该地址的
对回调得到的信息要使用支付宝的api进行校验
//将异步通知中收到的所有参数都存放到map中
Map<String, String> paramsMap =new HashMap<>();
paramsMap.put("tarde_no",trade_no);
paramsMap.put("trade_status",trade_status);
paramsMap.put("total_amount",total_amount);
paramsMap.put("out_trade_no",out_trade_no);
boolean signVerified = AlipaySignature.rsaCheckV1(paramsMap, GlobalConstant.ALIPAY_PUBLIC_KEY, "UTF-8", "RSA2"); //调用SDK验证签名
if (signVerified) {
//验签成功后,按照支付结果异步通知中的描述,对支付结果中的业务内容进行二次校验,校验成功后在response中返回success并继续商户自身业务处理,校验失败返回failure
String out_trade_no1 = paramsMap.get("out_trade_no");
String trade_status1 = paramsMap.get("trade_status");
logger.info(out_trade_no1+":"+trade_status1);
return "success";
} else {
//验签失败则记录异常日志,并在response中返回failure.
return "failure";
}
第4步 进行支付体验
这里选择支付宝账号登录 账号 密码 在沙箱环境中可以找到 (买家账号)建议下载支付宝沙箱钱包 可以模拟在线支付调用钱包客户端的效果
来源:http://blog.csdn.net/mixi9760/article/details/66473368


猜你喜欢
- 本文实例讲述了JavaMail实现发送超文本(html)格式邮件的方法。分享给大家供大家参考。具体如下:附件以超文本形式,很常用,与普通的邮
- 简介有时候会需要在c#特别是WPF环境下调用其他的程序,这类型的程序以命令行为执行环境,这里就说明下如何调用exe并传递参数一般有两种方法一
- 前言相信对于RxJava,大家应该都很熟悉,他最核心的两个字就是异步,诚然,它对异步的处理非常的出色,但是异步绝对不等于并发,更不等于线程安
- Java多线程下载网图案例此案例依赖——文件操作工具类(FileUtils)使用 apache 的commons-io包下的FileUtil
- 前言Android作为一个通用的移动平台,其首要的功能就是通话、短信以及上网等通信功能。那么,从系统的角度来看,Android究竟是怎么实现
- 前言自从 2017 年 C# 7.0 版本开始引入声明模式和常数模式匹配开始,到 2022 年的 C# 11 为止,最后一个板块列表模式和切
- 目录前言一、Apache poi1.1 首先添加依赖1.2 导出excel1.2.1 HSSF方式导出(.xls方式)1.2.2 XSSF方
- 1. 程序计数器(线程私有)程序计数器是一块比较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器(切换线程后,能恢复到正确的执行位
- 今天跟大家分享一个利用外部Jar包来实现Java操作CSV文件一.资源下载1.直接下载Jar包:javacsv-2.0.jar2.利用Mav
- 本文实例讲述了用WebBrowser操作frame和iframe的方法,比较适合C#初学者参考学习。示例浅显易懂,具体方法如下:
- java 图片转base64字符串、base64字符串转图片,具体内容如下1. 图片转base64字符串: /** * base
- 本文实例为大家分享了Unity3D实现相机跟随控制的具体代码,供大家参考,具体内容如下跟随算法要实现3D摄像机的控制第一步就是先实现摄像机跟
- 经典的排序算法有八种,分别为:冒泡排序选择排序插入排序归并排序希尔排序快速排序堆排序基数排序其中冒泡排序、选择排序、插入排序称为三大基本排序
- 数组的用处是什么呢?——当你需要将30个数进行大小排列的时候,用数组这样的数据结构存储是个很好的选择,当你是一个班的班主任的时候,每次要记录
- 好程序员Java教程分享MyBatis Plus介绍:1.MyBatis Plus 介绍MyBatis Plus 是国内人员开发的 MyBa
- 这篇文章主要介绍了SPRING IOC注入方式过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 异常捕获机制 C#1.示意图2.异常捕获机制,代码:3.异常捕获机制,结果:4.求几周,剩余几天?代码:5.结果:6.求几月几周零几天 设一
- 注意,本文所说的断点续传特指 HTTP 协议中的断点续传。本文主要聊聊思路和关键代码,更多细节请参考本文附带的 demo。工作原理HTTP
- 这篇文章主要介绍了springboot日期转换器实现实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 通常我们遇到的图片缩放需求,都是图片基于屏幕自适应后,进行缩放和移动,且图片最小只能是自适应的大小。最近遇到一个需求,要求图片只能在屏幕内缩