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

智能推荐

urllib_败不惶绥的博客-程序员宅基地

[转]python 网络爬虫2014-2-25阅读910 评论0一、网络爬虫的定义网络爬虫,即Web Spider,是一个很形象的名字。把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。网络蜘蛛是通过网页的链接地址来寻找网页的。从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地

推荐系统之用户标签,以及基于标签的算法_戎梓漩的博客-程序员宅基地_用户标签的公式

目录一、用户标签1、维度2、阶段3、打标签的方式4、如何给用户推荐标签二、基于标签的算法1、SimpleTagBased2、NormTagBased3、TagBased-TFIDF一、用户标签1、维度用户标签,如年龄、工作、性别等行为标签,如消费金额、消费频次等消费标签,如点击、收藏、购买等内容分析,浏览内容,如科技、娱乐、新闻类等2、阶段用户生命周期的三个阶段获客:如何进行拉新,通过更精准的营销获取客户;粘客:个性化推荐,搜索排序,场景运营等;留客:流失率预测,分析关键节点降低

【Unity】利用协程实现非Mono类延迟调用方法_萧然CS的博客-程序员宅基地

1. 利用协程可以实现方法延时调用2. 继承CustomYieldInstruction类,可以自定义yield指令using System.Collections;using System.Collections.Generic;using UnityEngine;using System;public class DelayToInvoke{ //内部类 private class TaskBehaviour : MonoBehaviour { }

第二章 复杂网络基本概念和基础理论_Raver & Leaper的博客-程序员宅基地_复杂网络理论

复杂网络、超网络、博弈论、复杂网络博弈、图论、复杂网络动力学模型

【Android】DateUtil(时间工具类)_mozhimen的博客-程序员宅基地_android 时间工具类

DateUtil,时间工具类Crazy Coding/** * @author Mozhimen / Kolin Zhao * @date 2020/4/5 */public class DateUtil { public final static String format_yyyyMMddhhmmss = "yyyy-MM-dd HH:mm:ss"; public final static String format_yyyyMMddhhmm = "yyyy-MM-d

随便推点

centos 7 ping不通外网(详解)yum报错Could not retrieve mirrorlist http://mirrorlist.centos.org/_YKbsmn的博客-程序员宅基地_centos7ping不通外网

最近换了硬盘,然后重弄了虚拟机,pia的一下就一直ping不通外网。网上也是找了很多方法,一直没解决!!特此记录一下。可以先尝试第2、3步,还没有解决的话,还原虚拟机的默认配置!!然后重新2、3步配置一下静态ip地址即可解决此问题。方法:第一步:还原默认配置(可先不尝试)编辑 -&gt; 虚拟机网络编辑器 -&gt; 还原默认配置第二步:注意虚拟网络编辑器的子网地址和网关地址编辑 -&gt; 虚拟机网络编辑器第三步:配置静态ip进入配置文件vim .

关闭串口_new_abc的博客-程序员宅基地

发版本的时候需要把串口打印关闭:

HTTP和HTTPS的区别_鸢尾 的博客-程序员宅基地

HTTP和HTTPS的区别HTTPS和HTTP的区别主要如下:1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。4、http的连接很简单,是无状态的;HTTPS协议是由SSL+H...

喵的Unity游戏开发之路 - 互动环境(有影响的运动_普通网友的博客-程序员宅基地

修正我改进了轨道摄像机的1.4节“使焦点居中”,以便更好地实现焦点居中和焦点半径限制的相互作用。调整OrbitCamera.UpdateFocusPoint如下: void UpdateFocusPoint () { previousFocusPoint = focusPoint; Vector3 targetPoint = focus.position; if (focusRadius &gt; 0f) { float distance = Vector..

C语言课程设计-车辆信息管理系统_辰小夏的博客-程序员宅基地_车辆信息管理系统c语言

C语言课程设计-车辆信息管理系统1.录入车辆信息功能2.浏览车辆信息功能3.查询车辆信息功能4.修改车辆信息功能5.删除车辆信息功能6.排序浏览车辆信息功能。

vue 左侧导航栏选中样式 elment ui_前端方程程的博客-程序员宅基地

.el-menu-item:hover { background: #2b5dbe !important; border-radius: 10px 0px 0px 10px; } .el-menu-item.is-active { background: #1D33A2 !important; // border-radius: 10px 0px 0px 10px; color: #fff!important; i { color: #fff

推荐文章

热门文章

相关标签