java实现支付宝接口---支付

技术标签: spring  java  

java实现实现支付宝接口

蚂蚁沙箱环境 (Beta) 是协助开发者进行接口功能开发及主要功能联调的辅助环境。可以模拟实现支付宝的支付功能。
接下的实现技术是运用到springmvc注解方法实现的支付。

准备工作

  1. 去支付宝开放平台,用你的支付登录开通沙箱支付的服务。支付宝开放平台

  2. 点击右上角的立即入驻之后,确认加入。在这里插入图片描述

  3. 点击导航栏的开发者中心,之后就进入到沙箱应用,再点击右边的设置。在这里插入图片描述

  4. 点击研发服务在这里插入图片描述
    在这里插入图片描述

  5. 使用支付宝秘钥生成器生成自己的私钥和公钥,公钥填至框中,私钥自己保管好。使用工具生成器生成好的密钥会自动给你保存到你的电脑。 然后保存设置。在这里插入图片描述
    在这里插入图片描述

  6. 然后点击查看,可以看到你的公钥和支付宝的公钥,说明你已经配置好了。

  7. 沙箱账号就是买家和商家的账号和密码,还有金额,可以进行充值,手机下载沙箱钱包,用买家账号密码登录即可,就可以扫码付款了,付款的金额就到了商家的账户余额里。

java代码实现支付

  1. 前台发请求的代码,需要获取订单号和订单金额传到后台。
    注意:后台返回的数据格式不能输json类型
    因为json类型的返回的数据
//支付的请求
function topay(price,that){
    
	//获取订单号
	var ono=$(that).attr("id");
	
		$.post("../../apli/pay",{
    ono:ono,price:price},function(data){
    
			$("#apli").html(data);
		},"text")
	}
  1. 支付宝接口的配置类 ApplicationConfig.java
    对应的地方修改成你自己的一些信息。
    特别注意一下异步和同步通知页面路径的处理
public class ApplicationConfig {
    
	    // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
		public static String app_id = "2016102400748299";
	 
		// 商户私钥,您的PKCS8格式RSA2私钥
		public static String merchant_private_key = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDTcUPbyeVtd/a7mgtC/cs1QhvXDo8BJM6";
	 
		// 支付宝公钥
	    public static String alipay_public_key = "SuFoWXQxhVJhPW0Gp7WKtBiPSkVovQoOwY/bFKfyDJSY92oS1mNWjoIzr7vS52fc374rm9fVbZPFau5xu5q6hNmOCekM/W9SEKPyxk4lAB+hQYcgiSjGANBo+v3y55OHQIzrylQIDAQAB";
	 
	    /*
	     * 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数
	     * 必须外网可以正常访问
		 * 一般就是支付成功时,修改数据库之类的操作
		 */
		public static String notify_url = "http://localhost:8080/project/apli/update";
		
		/*
		 * 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数
		 * 通知页面一般用来,支付成功后,需要跳转什么页面之类的处理
		 */
	    public static String return_url = "http://localhost:8080/project/apli/return";
	    
		// 签名方式,注意这里,如果步骤设置的是RSA则用RSA
		public static String sign_type = "RSA2";
	 
		// 字符编码格式
		public static String charset = "utf-8";
	 
		// 支付宝网关
		public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
	 
		// 支付宝网关
		public static String log_path = "C:\\";
	}
  1. ApliConfigController.java类。 具体操作的实现
@RestController
@RequestMapping("/apli")
public class ApliConfigController {
    
	
	@RequestMapping("/pay")		//踩坑记录->这里不可直接return result; 必须要response.getWriter().print(result);或者以map键值对方法返回
	public String toPay(String ono,double price,HttpServletRequest request,HttpServletResponse resp,HttpSession session) throws AlipayApiException, IOException, ServletException {
    

		//获得初始化的AlipayClient
		AlipayClient alipayClient = new DefaultAlipayClient(ApplicationConfig.gatewayUrl, ApplicationConfig.app_id, ApplicationConfig.merchant_private_key, "json", ApplicationConfig.charset, ApplicationConfig.alipay_public_key, ApplicationConfig.sign_type);

		//设置请求参数
		AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
		alipayRequest.setReturnUrl(ApplicationConfig.return_url);
		alipayRequest.setNotifyUrl(ApplicationConfig.notify_url);

		alipayRequest.setBizContent("{\"out_trade_no\":\""+ono +"\"," 
				+ "\"total_amount\":\""+ price +"\"," 
				+ "\"subject\":\""+ " Y呀网站支付 " +"\"," 
				+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
		String result = alipayClient.pageExecute(alipayRequest).getBody();
		resp.setContentType("text/html; charset=utf-8");
		resp.getWriter().print(result);
		return null;
	}

	@RequestMapping("/return")
    public void toIndex(HttpServletResponse resp,HttpSession session) throws IOException{
    
		//取session
		MemberInfo member=(MemberInfo) session.getAttribute("loginUser");
		
		//支付成功跳转页面
		PrintWriter out = resp.getWriter();
		out.print("<script>location.href='../front/page/order.html'</script>");
		
		//支付成功后跳转页面你的session会清空,如果还需要可以在存一次session
		session.setAttribute("loginUser", member);
    }
}

支付宝沙箱支付的官方文档

  1. 沙箱支付文档
    更加深入的学习。
  2. 如若有问题,留言,我们一起探讨…
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45003796/article/details/105916908

智能推荐

jmeter测java模拟器_测试了5款最常见的模拟器,发现与Airtest自动化最配的竟然是......_王瑞恩的博客-程序员宅基地

前言模拟器是我们的测试小伙伴非常喜欢的一款工具。在使用airtest框架做自动化测试的时候,小伙伴们也是非常喜欢用模拟器来作为测试设备的,但是我们也收到过很多关于连接模拟器的问题:①airtest连不上xx模拟器怎么办② xx模拟器连上了但是好卡啊③ 哪款模拟器好用,有没有推荐的呀......别急,今天我们就用AirtestIDE来连接下5家主流的模拟器,看看这几款模拟器,到底谁好用一些。准备工作...

SEO优化常用的网络营销方式都有哪些_老齐SEO的博客-程序员宅基地

随着科学技术的发展,人们收入水平的提高,生产能力的提升,产品日趋多元化,为居民提供了更加丰富的选择。那么,在这个竞争激烈的时代,任何的产品事物都需要紧跟时代的步伐。产品的营销同样如此,在互联网快速发展的今天,如果企业不抓住线上的潜在用户,必死无疑。接下来为大家整理了SEO优化常用的网络营销方式。SEO优化常用的网络营销方式都有哪些1、搜索引擎营销即搜索引擎优化,是通过对网站结 构(内部链接结...

html怎么在td中加风格,html中如何让td里面的文字_Agnes 陳老師的博客-程序员宅基地

公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解。话题:html中如何让td里面的文字问题详情:td height=40 colspan=2 align=centerstrong class=f14&amp;lt回答:给table加个id,如:table width="200" border="1" id="result" 然后遍历其下的所有td,替换字符,写一个函数,让他在页面载入完成...

HarmonyOS 项目如何升级为api version6_你的代码我的心的博客-程序员宅基地

HarmonyOS 项目如何升级为api version6?前言第一步 安装最新的beta版第二步 安装IDE第三部 安装 version sdk 6第四部 修改项目的api 版本依赖验证前言相信很多小伙伴,在接触HarmonyOS项目开发的时候,用的还是之前的版本,可能是api version4或是api version5;但官方文档上很多新的组件特性,都标有+6的样式,想尝鲜但有不知道如何升级,接下来把我刚刚解决的问题分享给大家,仅供参考,我反正是成功了的!第一步 安装最新的beta版V2.2

蓝桥杯——乘积尾零[email protected]@@龙猫的博客-程序员宅基地_蓝桥杯乘积尾零

题目描述如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零?5650 4542 3554 473 946 4114 3871 9073 90 43292758 7949 6113 5659 5245 7432 3051 4434 6704 35949937 1173 6866 3397 4759 7557 3070 2287 1453 98991486 5722 3135 1170 4014 5510 5120 729 2880 90192049 698 4582 4346

巨匠数位学院android app,App Inventor - 零基础Android移动应用开发_weixin_39771260的博客-程序员宅基地

Q:我需要特殊版本的计算机吗?A:任何计算机都可以用于App Inventor开发,包括但不限于各个版本的MS Windows、各个版本的Mac OS X、各种发行版本的Linux。关键是要能上网(相信大家能上MOOC应该就能上网的)。Q:我需要特殊版本的手机吗?A:需要Android系统的智能手机。所以苹果手机、Winphone手机或是老式的功能手机(非智能机)是不行的。但Android手机没有...

随便推点

oracle索引对增删改查的影响,Oracle索引 主键影响查询速度_丛乐的博客-程序员宅基地

要提高查询速度,一般:1.不需要删除的字段,建主键;有可能要被删除的字段,建索引。2.假如一次提交5W个号码,每个都要和数据库里90W号码进行比较5W个号码中哪些号码是90W号码中的。那么将90W号码建一个表,一个字段就是号码字段,然后把该字段设为主键即可。update前100条为0,另外一个程序找状态为0的,要提高速度,要将这100条(所有条)的ID建索引。3.不管对什么字段建的什么索引,该字段...

SpringBoot:Spring容器的启动过程_weixin_30275415的博客-程序员宅基地

一、简述Spring的启动过程就是IoC容器的启动过程,本质上就是创建和初始化Bean的工厂(BeanFactory),BeanFactory是整个SpringIoC的核心,Spring使用BeanFactory来实例化、配置和管理Bean。二、SpringBoot的启动过程在SpringBoot中,SpringApplication封装了一套Spring应用的启动流程,对用...

mysql无法找到事件id100描述_MySQL错误is marked as crashed and last (automatic?) repair failed..._weixin_39791653的博客-程序员宅基地

MySQL运行久了,可能索引就会有问题,用navicat 可以非常方便的进行修复。事件 ID ( 100 )的描述(在资源( MySQL )中)无法找到。本地计算机可能没有必要的注册信息或消息 DLL 文件来从远程计算机显示消息。您可能可以使用 /AUXSOURCE= 标识来检索词描述;查看帮助和支持以了解详细信息。下列信息是事件的一部分:Fatal error: Can’t open and ...

jenkins 项目启动日志_如何实现类似“jenkins”的滚动日志功能?_贾扬清的博客-程序员宅基地

本文实现了一个类似jenkins滚动日志的小功能,如果你正在做发布系统类似的东西,这个功能会非常有用。滚动日志jenkins的日志能够滚动显示,关闭后重新进入依然能够继续滚动,非常棒。做这种效果,直接想到的有两种方式:1)Websocket2)轮询获取可是我太笨了,websocket代码对我来说有点复杂。另外我还没想清楚如果关了日志窗口重新进入,ws会有什么样的反应。所以我们还是轮询吧。通过c...

计算机应用后期影音制作,影音制作工具(ImTOO Movie Maker)_weixin_39885166的博客-程序员宅基地

ImTOO Movie Maker是一款影音制作工具,可以帮助用户从视频中快速创建高清质量和标准清晰度的电影,这样就可以在流行的设备上分享您的创作。有需要的小伙伴欢迎来西西下载体验。软件特色:以AVI、MPEG-1/2/4、DivX、XviD、ASF、MOV、RM、WMV格式输出电影,以便在iPod、iPhone、psP、PS3、Zune、Xbox、Wii和DS等设备上播放。通过电影制作软件,您可...

mysql 5.7安装完密码是多少_mysql 5.7 安装及修改/重置密码_程序猿创造营的博客-程序员宅基地

之前在小型机上装了feroda系统,装了mysql后,发现无法找到root用户密码,mysqld_safe也不能用,最后发现一片文章,原来mysql5.7可以通过my.cnf配置文件设置不验证密码。记录下全文。1、mysql安装检查:yum list installed | grep mysql 如果已经有的话执行命令yum -y remove mysql-libs.x86_64卸载已经安装的my...

推荐文章

热门文章

相关标签