网站调用支付宝进行支付-Java后台调用支付宝支付

news/2024/5/9 22:26:30/文章来源:https://blog.csdn.net/weixin_34289454/article/details/89655801

网站调用支付宝进行支付-Java后台调用支付宝支付

最近公司一个产品用到了打赏支付,其中一个是支付宝,记录一下java后台调用支付宝的过程付代码。本文讲的是使用沙箱环境(支付宝提供的一种开发专用模式,不要实际支付,可以走通整个流程)。

一、准备工作

1.首先要到 蚂蚁金服开发者中心 注册商家账户,并认证。
2.下载java版的sdk和demo sdk&demo下载地址
3.将sdk加入到项目中,在项目根路径下新建libs文件夹,将jar包复制进去,我这里使用的是gradle,如果各位使用的是maven,请自行修改。

compile fileTree(dir:'libs',include:['*.jar'])
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0' //谷歌json相关的包,可以用其他的

4.公钥、私钥的生成。生成公钥、私钥官方教程 ,按照官网教程操作,很简单的,这里就不上图片了。生成完之后将你的公钥要上传上去,具体位置看图片。

img_77bcfd96a36e27e52d0a6ceb80fb9743.png
这里写图片描述

二、开发接口

1、因为开发环境是使用沙箱环境,上线后会使用真实环境,所以支付宝的一些参数我们放到配置文件里 pay-dev.properties appid和支付宝公钥上面图片中有,直接在网页上复制就好。

注意: 支付宝回调接口一定要是公网可以访问到的,我这里用了花生壳内网穿透,你们可以自行解决,只要能实现公网访问即可

ALIPAY.PRIVATEKEY=你生成的私钥
ALIPAY.PUBLICKEY=支付宝的公钥
ALIPAY.APPID=2016080300156724 #沙箱环境下的appid
ALIPAY.SERVER=https://openapi.alipaydev.com/gateway.do
ALIPAY.NOTIFY_URL=http://sanqi.iask.in:31017/alipay/notify  #公网可以访问的地址
ALIPAY.RETURNA_URL=http://sanqi.iask.in:31017/alipay/return
ALIPAY.SIGN=RSA2
ALIPAY.LOG=C:\\alipaylog\\

2、加载配置文件,我的项目是基于springboot的,如果是基于xml配置的,请自行在xml中配置。

/*** @ClassName: PropertiesConfig * @Description: 读取配置文件* @author nelson* @date 2018年3月21日 下午5:35:21 **/
@Configuration
public class PropertiesConfig {@Beanpublic PropertySourcesPlaceholderConfigurer createPropertySourcesPlaceholderConfigurer() {ClassPathResource resource = new ClassPathResource("pay-dev.properties");PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();propertyPlaceholderConfigurer.setLocation(resource);return propertyPlaceholderConfigurer;}
}

3、开始编写写接口
这里支付宝要用的一些参数,我是通过@Value自动注入进来的,官方给的demo是,定义个AlipayConfig类,然后全部定义成静态变量,根据个人喜好问题选择,官方的demo中有,可以直接复制,然后修改为你自己的参数即可。

代码中适当的写了一些参数,但是并非全部参数,官网参数列表及解释。

/*** @Title: AlipayController.java* @Package cn.trmap.tdcloud.pay* @Description: 支付宝后台接口* @author nelson* @date 2018年3月21日 下午5:31:03*/
@RequestMapping("alipay")
@RestController
public class AlipayController {@Value("${ALIPAY.APPID}")private String app_id;@Value("${ALIPAY.PRIVATEKEY}")private String merchant_private_key;@Value("${ALIPAY.PUBLICKEY}")private String alipay_public_key;@Value("${ALIPAY.NOTIFY_URL}")private String notify_url;@Value("${ALIPAY.RETURNA_URL}")private String return_url;@Value("${ALIPAY.SIGN}")private String sign_type = "RSA2";private String charset = "utf-8";@Value("${ALIPAY.SERVER}")private String gatewayUrL;@GetMapping("pay")private String alipayPay() throws AlipayApiException {//这个应该是从前端端传过来的,这里为了测试就从后台写死了AlipayVo vo = new AlipayVo();vo.setOut_trade_no(UUID.randomUUID().toString().replace("-", ""));vo.setTotal_amount("0.01");vo.setSubject("nelson-test-title");vo.setProduct_code("FAST_INSTANT_TRADE_PAY"); //这个是固定的String json = new Gson().toJson(vo);System.out.println(json);AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrL, app_id, merchant_private_key, "json",charset,alipay_public_key,sign_type);// 设置请求参数AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();alipayRequest.setReturnUrl(return_url);alipayRequest.setNotifyUrl(notify_url);alipayRequest.setBizContent(json);String result = alipayClient.pageExecute(alipayRequest).getBody();System.out.println(result);return result; //这里生成一个表单,会自动提交}
/*** @Title: AlipayVo.java* @Package cn.trmap.tdcloud.pay.vo* @Description: 支付请求参数* @author nelson* @date 2018年3月23日 上午9:00:02*/
public class AlipayVo implements Serializable{private static final long serialVersionUID = 1L;/*** 订单名称*/private String subject;/*** 商户网站唯一订单号*/private String out_trade_no;/*** 该笔订单允许的最晚付款时间*/private String timeout_express;/*** 付款金额*/private String total_amount;/*** 销售产品码,与支付宝签约的产品码名称*/private String product_code;****此处省去get和set方法
}

4、支付宝异步通知回调接口

这个接口的请求方式只能是post,如果用get会拿不到数据,不支持。

    /*** @Title: alipayNotify * @Description: 支付宝回调接口* @author nelson* @param request* @param out_trade_no 商户订单号* @param trade_no 支付宝交易凭证号* @param trade_status 交易状态* @throws AlipayApiException* @return String * @throws*/@PostMapping("notify")private String alipayNotify(HttpServletRequest request, String out_trade_no,String trade_no,String trade_status)throws AlipayApiException {Map<String, String> map = new HashMap<String, String>();Map<String, String[]> requestParams = request.getParameterMap();for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {String name = iter.next();String[] values = requestParams.get(name);String valueStr = "";for (int i = 0; i < values.length; i++) {valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";System.out.println(valueStr);}map.put(name, valueStr);}boolean signVerified = false;try {signVerified = AlipaySignature.rsaCheckV1(map,alipay_public_key,charset,sign_type);} catch (AlipayApiException e) {e.printStackTrace();return ("fail");// 验签发生异常,则直接返回失败}if (signVerified) {//处理你的业务逻辑,更细订单状态等return ("success");} else {System.out.println("验证失败,不去更新状态");return ("fail");}}

5、支付宝回调接口 return url

    /*** @Title: alipayReturn * @Description: 支付宝回调接口* @author nelson* @param request* @param out_trade_no 商户订单号* @param trade_no 支付宝交易凭证号* @param trade_status 交易状态* @throws AlipayApiException* @return String * @throws*/@GetMapping("return")private String alipayReturn(Map<String, String> params, HttpServletRequest request, String out_trade_no,String trade_no,String total_amount)throws AlipayApiException {Map<String, String> map = new HashMap<String, String>();Map<String, String[]> requestParams = request.getParameterMap();for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {String name = iter.next();String[] values = requestParams.get(name);String valueStr = "";for (int i = 0; i < values.length; i++) {valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";System.out.println(valueStr);}map.put(name, valueStr);}boolean signVerified = false;try {signVerified = AlipaySignature.rsaCheckV1(map, alipay_public_key, charset, sign_type);} catch (AlipayApiException e) {e.printStackTrace();return ("fail");// 验签发生异常,则直接返回失败}if (signVerified) {return ("success");} else {System.out.println("验证失败,不去更新状态");return ("fail");}}

三、测试接口

启动项目,访问接口地址 项目地址/alipay/pay 我的是 http://sanqi.iask.in:31017/alipay/pay

如果后台没有报错的话,他会自动重定向到,支付宝的付款页面,如下图所示。这时候我们下载安装沙箱版的app,然后使用官方提供的账户扫描然后直接付款,付款成功后会回调后面那两个接口,在通知的那个接口里处理你的业务逻辑。 查看沙箱app的登录帐户名和密码

img_045ba5edb0e60028a6a2e39a76573900.png
这里写图片描述

四、关注

如果有问题,请在下方评论,或者加群讨论 200909980

关注下方微信公众号,可以及时获取到各种技术的干货哦,如果你有想推荐的帖子,也可以联系我们的。

img_cb380af3d7a871d3f66df87a6eae835e.png
码农笔录二维码

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

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

相关文章

整理了一周的Python资料,包含各阶段所需网站、项目,收藏了慢慢来

为什么80%的码农都做不了架构师&#xff1f;>>> 这周应该有不少学校已经开学了&#xff0c;那么同学们都该动起来了&#xff0c;把家里面的那些懒习惯给扔掉了可以。 不知怎么的&#xff0c;最近不少关注我的读者都开始私信我怎么学好python&#xff1f;零基础转行…

HTML——body 计算机代码 【头部在“网站开发”中】

HTML属性 完整的属性列表 在引用属性值的时候&#xff0c;如果某些属性本身就有双引号——name John "ShotGun" Nelson 转载于:https://www.cnblogs.com/expedition/p/10889312.html

linux/centos svn搭建及网站同步更新

开发十年&#xff0c;就只剩下这套架构体系了&#xff01; >>> 一 搭建篇 yum install -y subversion svnserve --version 二 创建项目仓库 mkdir /var/svn cd /var/svn svnadmin create /var/svn/[项目名] 三 配置项目仓库 cd /var/svn/[项目名]/conf 1.修改综合配…

[Windows] 【黑科技】在线视频一键下载器:无尽一键视频下载v0.2主流视频网站想下就下...

撸了今年阿里、头条和美团的面试&#xff0c;我有一个重要发现.......>>> 前言 在线视频下载工具不算少&#xff0c;但真正好用的少之又少。很多软件步骤繁琐&#xff0c;下载速度慢&#xff0c;失效很快。我通过研究与写代码实现了真正一键就把视频下载下来。我的原…

[Android] 我的听书 谷歌版是一个帮助大家播放听书网站的播放器

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 注意事项&#xff1a; 如果锁屏不能自动切下一首&#xff0c;依次试一下&#xff1a; 1. 开启锁屏通知 2. 给app加锁 3. 前两者都不行时则去加后台白名单。 关于离线下载&#xff1a;不想给被抓取的网站增加负担…

国外停课后上百个教育网站官宣免费,亲测后发现这10个在国内秒打开!

随着海外疫情的爆发&#xff0c;世界各地的学校陆续开启了停课模式。为了方便学生们在家进行线上学习&#xff0c;各大教育网站也都纷纷推出了前所未有的阶段免费。这对一直以来给孩子苦苦寻求学习资源的老师和家长们来说&#xff0c;简直有了“一夜暴富”的赶脚。1. 教学资源网…

利用AirExplorerProPortable 实现网站 每日备份

Air Explorer Pro&#xff08;v2.8.1&#xff09;是一款非常出色的云存储资源管理工具&#xff0c;支持OneDrive、WebDAV和Google Drive等绝大多数云服务器&#xff0c;可以在将文件上传到云时对文件进行加密&#xff0c;同时还可在任何云或计算机之间同步文件夹。一个软件就可…

微软没强迫?Win 10 版本号追踪网站 Buildfeed 关闭

百度智能云 云生态狂欢季 热门云产品1折起>>> 近日&#xff0c;迫于各方压力&#xff0c;知名 Windows 10 版本号追踪网站 Buildfeed 宣布关闭。对于 Windows Insider 用户来说&#xff0c;即时获取最新 Windows 10 预览版本信息很重要&#xff0c;目前微软官方有提…

用apicloud 免费,简单封装一个wap手机网站成android app

APICloud是国内较早布局低代码开发的平台之一&#xff0c;其发布的低代码效率工具Plus Mode&#xff0c;为IT项目中每个角色提供专业工具&#xff0c;将需求分析、产品原型、UI设计、前端开发、后端开发紧密衔接&#xff0c;并基于行业大数据对前置环节进行复用&#xff0c;最终…

好域名怎么选?总结15名网站大佬给我的8条建议!(精华)

写网站上线的文章中提到需要有域名&#xff0c;本来是想在百度里搜一篇“选域名方面”的文章链接过去就好&#xff0c;但是看了好几篇&#xff0c;讲的都太笼统了&#xff0c;看完不知所云&#xff0c;一看就是“互相借鉴”的文章。所以我问了身边的几十位大佬&#xff0c;让他…

网站漏洞修复之苹果cms电影系统

2019独角兽企业重金招聘Python工程师标准>>> 苹果cms系统&#xff0c;是目前很多电影网站都在使用的一套网站系统&#xff0c;开源&#xff0c;免费&#xff0c;扩展性较好&#xff0c;支持一键采集&#xff0c;伪静态化&#xff0c;高并发的同时承载&#xff0c;获…

蜻蜓fm收音机电脑版_网页版全网音乐搜索解析下载网站,完全免费使用,支持网易酷狗酷我虾米百度一听咪咕荔枝蜻蜓 喜马拉雅全民K歌...

关注我们一起玩耍吧&#xff01;微信公众号&#xff1a;微友集市我们不生产资源我们做互联网搬运工这里是“微友集市”&#xff0c;我们坚持分享优质的资源&#xff0c;让更多人能用到更好的资源&#xff0c;少花冤枉钱。如果你有什么需要&#xff0c;可以给我们留言&#xff0…

8x8点阵字体在线生成器_字体字形网站合集

求字体&#xff0c;提供中文和英文字体库下载、识别与预览服务。传送门&#xff1a;http://www.qiuziti.com字体之家&#xff0c;提供各种字体打包下载&#xff0c;中文字体、英文字体、PS字体、艺术字体、手机软件、字体工具等。传送门&#xff1a;http://www.17ziti.com站长字…

.net mvc 获取iis基本登录网站登录账号_超赞!用Java实现了第三方qq账号登录...

传智汇传智播客旗下IT互联网精英社区作者&#xff1a;人间蒸发来源&#xff1a;zuidaima.com/blog/4725615031700480.htmQQ互联注册一个账号网站地址&#xff1a;https://connect.qq.com/&#xff0c;添加一个应用&#xff0c;具体怎么申请以及需要填写的信息&#xff0c;腾讯官…

eclipse tomcat新建一个_Eclipse搭建本地动态网站环境

准备Eclipse和Tomcat完成Web容器的配置在Eclipse中配置Tomcat (web容器)1、选择window->show view->other->servers 下面出现了servers点击 no servers are available click this link to create a new server -> 选择Tomcat7(下载的是7)->点击下一步->browe…

sqlite用户名密码_黑客利用工具轻易获取管理员账户密码,你的网站危险了

首先&#xff0c;先简单介绍下sqlmap简介&#xff1a;sqlmap是一种开源的工具&#xff0c;可以自动检测和利用SQL注入以及接入该库的服务器。它拥有非常强大的检测引擎、具有多种特性的器、通过库指纹提取访问底层文件系统并通过外带连接执行命令。支持的数据库&#xff1a;MyS…

服装设计网页制作_小众精选样机在线制作网站,大量免费的模型PSD分层

样机素材是设计行业的专用名词&#xff0c;又叫模板。是设计图案模拟到实物或场景展示的可重复套用模型。是将设计图案应用到一个实物效果图中进行展示&#xff0c;让设计图案看起来更加形象逼真。在国内也称样机素材为&#xff1a;标志模板、模拟机、贴图样机、智能贴图。用途…

kali如何制作php字典_sqlmap如何用dirsearch.py协助osshell拿到目标网站shell

本文首发于FreeBuf→https://www.freebuf.com/sectool/256588.html沙漏安全团队欢迎真正热爱技术的你&#xff01;SQLMAPsqlmap是一个开源渗透测试工具&#xff0c; 它可以自动检测和利用SQL注入漏洞并接管数据库服务器。它具有强大的检测引擎&#xff0c;同时有众多功能&#…

前端2个下拉框关联_前端SEO优化

前端SEO优化原文链接&#xff1a;https://juejin.im/post/6844903824428105735 作者&#xff1a;dhonor一、搜索引擎工作原理在搜索引擎网站的后台会有一个非常庞大的数据库&#xff0c;里面存储了海量的关键词&#xff0c;而每个关键词又对应着很多网址&#xff0c;这些网址是…

db2 删除索引_网站索引量直在下降是什么原因?

所谓网站索引量&#xff0c;就是指搜索弓|擎把你的网页内容索取到数据库中。简单理解就是网站中有多少页面可以作为搜索候选结果&#xff0c;就是网站的索引量。网站的索引量越高,说明参与排名的机会就越大。那么&#xff0c;在网站SEO优化过程中&#xff0c;索引量一直在下降&…