App支付宝支付服务器端验签

php对接支付宝支付宝_APP接入支付宝方法总结——服务器端(PHP) 准备工作APP支付接口:alipay.trade.app.pay服务器端使用框架:TP5登录蚂蚁金服开放平台 --> 创建应用 --> 添加App支付功能。具体查看官方文档下载官方 SDK (PHP版本资源)——当前SDK版本:106 生成时间:2017-07-25 11:46:10将SDK原码放置在TP5的vendor目录下的alipay文件夹(可根据实际使用框架技术进行实际调整)... 阅读详情

支付可以通过支付宝验签或者自己的后台验签

App前端

  • 2.0 订单串本地签名逻辑
  • 注意:本 Demo 仅作为展示用途,实际项目中不能将 RSA_PRIVATE 和签名逻辑放在客户端进行!
    */

{

/**
 * 构造授权参数列表
 *
 * @param pid
 * @param app_id
 * @param target_id
 * @return
 */
public static Map<String, String> buildAuthInfoMap(String pid, String app_id, String target_id, boolean rsa2) {
	Map<String, String> keyValues = new HashMap<String, String>();

	// 商户签约拿到的app_id,如:2013081700024223
	keyValues.put("app_id", app_id);

	// 商户签约拿到的pid,如:2088102123816631
	keyValues.put("pid", pid);

	// 服务接口名称, 固定值
	keyValues.put("apiname", "com.alipay.account.auth");

	// 商户类型标识, 固定值
	keyValues.put("app_name", "mc");

	// 业务类型, 固定值
	keyValues.put("biz_type", "openservice");

	// 产品码, 固定值
	keyValues.put("product_id", "APP_FAST_LOGIN");

	// 授权范围, 固定值
	keyValues.put("scope", "kuaijie");

	// 商户唯一标识,如:kkkkk091125
	keyValues.put("target_id", target_id);

	// 授权类型, 固定值
	keyValues.put("auth_type", "AUTHACCOUNT");

	// 签名类型
	keyValues.put("sign_type", rsa2 ? "RSA2" : "RSA");

	return keyValues;
}

/**
 * 构造支付订单参数列表
 * @param pid
 * @param app_id
 * @param target_id
 * @return
 */
public static Map<String, String> buildOrderParamMap(String app_id, boolean rsa2) {
	Map<String, String> keyValues = new HashMap<String, String>();

	keyValues.put("app_id", app_id);

	keyValues.put("biz_content", "{\"timeout_express\":\"30m\",\"product" +
			"_code\":\"QUICK_MSECURITY_PAY\",\"total_amount\":\"0.01\",\"sub" +
			"ject\":\"1\",\"body\":\"我是测试数据61616\",\"out_trade" +
			"_no\":\"" +  getOutTradeNo() +  "\"}");

	keyValues.put("charset", "utf-8");

	keyValues.put("method", "alipay.trade.app.pay");

	keyValues.put("sign_type", rsa2 ? "RSA2" : "RSA2");

	keyValues.put("timestamp", "2016-07-29 16:55:53");

	keyValues.put("version", "1.0");

	keyValues.put("notify_url", "http://uq74dv.natappfree.cc/tctr/getAlipayP");
	//内网穿透地址
	


	return keyValues;
}

/**
 * 构造支付订单参数信息
 *
 * @param map
 * 支付订单参数
 * @return
 */
public static String buildOrderParam(Map<String, String> map) {
	List<String> keys = new ArrayList<String>(map.keySet());

	StringBuilder sb = new StringBuilder();
	for (int i = 0; i < keys.size() - 1; i++) {
		String key = keys.get(i);
		String value = map.get(key);
		sb.append(buildKeyValue(key, value, true));
		sb.append("&");
	}

	String tailKey = keys.get(keys.size() - 1);
	String tailValue = map.get(tailKey);
	sb.append(buildKeyValue(tailKey, tailValue, true));

	return sb.toString();
}

/**
 * 拼接键值对
 *
 * @param key
 * @param value
 * @param isEncode
 * @return
 */
private static String buildKeyValue(String key, String value, boolean isEncode) {
	StringBuilder sb = new StringBuilder();
	sb.append(key);
	sb.append("=");
	if (isEncode) {
		try {
			sb.append(URLEncoder.encode(value, "UTF-8"));
		} catch (UnsupportedEncodingException e) {
			sb.append(value);
		}
	} else {
		sb.append(value);
	}
	return sb.toString();
}

/**
 * 对支付参数信息进行签名
 *
 * @param map
 *            待签名授权信息
 *
 * @return
 */
public static String getSign(Map<String, String> map, String rsaKey, boolean rsa2) {
	List<String> keys = new ArrayList<String>(map.keySet());
	// key排序
	Collections.sort(keys);

	StringBuilder authInfo = new StringBuilder();
	for (int i = 0; i < keys.size() - 1; i++) {
		String key = keys.get(i);
		String value = map.get(key);
		authInfo.append(buildKeyValue(key, value, false));
		authInfo.append("&");
	}

	String tailKey = keys.get(keys.size() - 1);
	String tailValue = map.get(tailKey);
	authInfo.append(buildKeyValue(tailKey, tailValue, false));

	String oriSign = SignUtils.sign(authInfo.toString(), rsaKey, rsa2);
	String encodedSign = "";

	try {
		encodedSign = URLEncoder.encode(oriSign, "UTF-8");
	} catch (UnsupportedEncodingException e) {
		e.printStackTrace();
	}
	return "sign=" + encodedSign;
}

/**
 * 要求外部订单号必须唯一。
 * @return
 */
private static String getOutTradeNo() {
	SimpleDateFormat format = new SimpleDateFormat("MMddHHmmss", Locale.getDefault());
	Date date = new Date();
	String key = format.format(date);

	Random r = new Random();
	key = key + r.nextInt();
	key = key.substring(0, 15);
	return key;

}

}
后台验签:



@Data
@Component
@Controller
@RequestMapping("/tctr")
public class tctr {

	 @Value("${alipay.publicKey}")
	private String publicKey;
	
	 @Value("${alipay.charset}")
	private String charset;
	 
	@RequestMapping("/getAlipayP")
	@ResponseBody
	public String getAlipayP(HttpServletRequest request,HttpServletResponse response)  {
		//获取支付宝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] + ",";
		  	}
		    //乱码解决,这段代码在出现乱码时使用。
			//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
			params.put(name, valueStr);
		}
		boolean flag = false;
		try {
			
			//传递id 传递金额 out_trade_no    订单金额   实收金额
			System.out.println(params.get("out_trade_no"));
			System.out.println(params.get("trade_status"));
			System.out.println(params.get("total_amount"));
			System.out.println(params.get("receipt_amount"));
			System.out.println(params.get("body"));
			System.out.println(params.get("gmt_create"));
			System.out.println(params.get("gmt_payment"));
			
			/*try {
				response.getWriter().write("success");
			} catch (IOException e) {
				e.printStackTrace();
			}*/
			
			flag = AlipaySignature.rsaCheckV1(params, publicKey, charset,"RSA2");
			//验签方法
			
//			out.println("success");
			
//			if(flag == true){
//				try {
//					//response.getWriter().println("success");
//					response.getWriter().write("success");
//				} catch (IOException e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
//			}
			
			
			System.out.println(flag);
			System.out.println("结束");
		} catch (AlipayApiException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
		/*try {
			response.getWriter().write("success");
		} catch (IOException e) {
			e.printStackTrace();
		}*/
		
//		response.getWriter().write("success");
//		return flag;
		
//		try {
//			response.getWriter().write("success");
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
		
		if(flag){
			return "success";
		}else{
			return "fail";

		}
	
		
		
	}
	
}

支付宝APP支付-php后台签名以及验签 一、 下载php支付宝sdk https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.eCtVsf&treeId=54&articleId=103419&docType=1 二、 查看支付宝App支付请求参数文档,拼接请求参数,签名 App支付请求参数说明 https://doc.open.alipay.com/docs/ 阅读详情

相关推荐

APP接入支付宝支付之服务端实现

  最近公司接了一个外包项目,开发过程中用到了调用微信和支付宝的第三方支付接口,因为之前没用集成过,所以这次用到了之后就想总结一下分享给大家,这里只介绍支付宝的APP支付和提现接口的服务端接入实现。  首先,要接入第三方的接口,最重要的还是先看官方文档,因为不管你从哪里搜索到的文章都是基于官方的文档API说明和使用方法。以前我刚做开发的时间遇到新的东西就喜欢百度找现成其他博主写的教程然后拷过来...

King__Jack的博客 9478

Android支付宝支付

背景当下最流行的第三方支付平台就是支付宝和微信了,这种第三方支付的方式以其极大的方便快捷性,被广泛的使用,如今各大app中都接入了这种模式。官方地址https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.SAJ1pf&treeId=204&articleId=106079&docType=1 前期准备 在支付宝平台注册账号 在开发

qq_27942511的博客 1142

支付宝app支付服务端接入(证书方式)

支付宝支付接入的文档真的非常多,由于密钥配置错误一直返回4000错误码,折腾了小半个下午,特此记录一下。 整体开发流程图如下: 1 首先创建应用,并签约APP支付能力 官方文档:接入前准备 这个过程需要填写、认证一些公司信息。支付宝签约费率为6%。 2 首先按照官方文档生成并配置公钥证书 参考:如何生成及配置公钥证书 首先下载支付宝开放平台开发助手获取CSR文件,选择应用信息内的“接口加签方式”-“公钥证书“-”上传CSR文件”,选择目录支付宝开放平台开发助手/CSR的.c...

zlx312的博客 9803

支付宝网站支付验签的坑。

当客户支付成功后,会按照return_url跳转到你设置的连接中,并返回响应的参数,什么app_id啦,trade_no啦等等等等等等。与阿里技术经过多轮的友好而又细致的会谈,技术经过多次失败的实验后,最终告诉我,应该用异步验签的方式验签。不验签的话,万一哪个捣蛋鬼,自己编了条数据发给咱们,那损失可就大了。当客户发起支付,收到支付通知,咱为了安全,必须对数据进行验签。按照同步的方法,反复验签,永远返回一个false。当时,给我个人感觉,这就应该是同步验签。验签这个事儿,折腾了我整整一天,

helpinfo的专栏 884

支付宝APP支付以及回调验签demo

支付宝APP支付起调接口以及回调页面验签,确实有一些坑,最终搞定,提供源码

LiveReload:释放你的F5,实时预览HTML效果

一、liveReload插件开发背景Web前端开发人员在写页面时,如果修改了HTML or CSS,要想看效果通常的做法就是保存代码就得 Alt+Tab,切换到浏览器(当然,我知道很多开发人员是双屏操作不一定需要切换到浏览器),但是一定要F5刷新才能看自己刚写的代码有没有效果,没有效果就再切换到编辑器下修改,然后再切换到浏览器F5刷新看效果,还没有效果,就再继续修改,如此反复。时间久了,前端自动化...

Char_n的博客 2510

c#实现在线支付

本篇涉及支付宝开放平台、支付宝程序包配置引用、沙箱支付测试、二维码生成器以及异步编程等相关知识。其实在公共平台上关于.net的在线支付资源很少很少,包括这些提供技术的开放平台。这也就是为什么选择支付宝开放平台进行开发(当然是因为微信支付还没有.net语言的SDK包,如果要使用微信方式开发就需要你自己写各种各样的底层方法,这工作量就太大了)。另外我们使用的是支付宝的当面付产品,有其他产品问题也可以参考技术文档寻求帮助。

张哈哈的博客 2137

从SIGGRAPH审稿人视角看:什么样的TOG论文更容易被接收?

本文从SIGGRAPH审稿人视角深入解析TOG论文的审稿标准与投稿策略,揭示如何提升论文接收概率。重点探讨创新性、技术深度、实验验证等核心评分维度,并提供写作技巧与审稿意见应对策略,帮助研究者优化ACM Transactions on Graphics投稿质量。

weixin_33721344的博客 108

C# 实现支付扫码支付功能

本次学习的内容是在winform窗体项目中实现的一个功能——支付宝扫码支付;主要功能通过支付宝包向我们提供的SDK程序包,与支付宝沙箱中的验证/调试接口功能实现;

weixin_48658948的博客 2158

易灵思Trion FPGA实战:5分钟搞定MIPI硬核配置(附Interface Designer避坑指南)

本文详细介绍了易灵思Trion FPGA中MIPI硬核的快速配置方法,通过Interface Designer工具实现从时钟配置到数据收发的全流程实战。特别针对初次接触Trion系列的设计师,提供了六个关键配置陷阱及解决方案,帮助开发者高效完成嵌入式视觉和高速数据传输项目。

eee77的博客 791

【保姆级教程】基于UNet++&MobileNetv3的语义分割模型从训练到RK3588部署:让边缘AI落地效率提升300%

通过SMP库一键构建encoder_name="mobilenet_v2", # 选择MobileNetv3作为骨干encoder_weights="imagenet", # 加载预训练权重加速收敛in_channels=3, # 输入图像通道数(RGB)classes=29, # Cityscapes数据集类别数activation=None # 输出无激活,便于后续损失计算本教程从“模型设计-训练-转换-边缘部署”全链路拆解了。

FJN110的博客 256

关于app集成支付宝应用内支付的问题总结

近来处理了几个app应用的支付宝集成,对其中的一些问题有了些了解,汇总一下,以备自己或者其他人参考。 1、订单签名错误,请检查PARTNER对应的密钥是否正确 这个问题网上很多人问,但千篇一律都是没有给出解决办法的。很不幸的,我也碰到了。一开始以为是自己密钥生成有问题,对着支付宝的开发文档,重复生成密钥,每步都严格按照要求,结果还是无法解决。几近崩溃!后来没办法了,问了支付宝集成开发的

xxc的专栏 1970

Marvell 88Q6113 如何制作一个完整的量产固件88Q6113_flash.bin并进行烧录

本章节介绍如何基于Marvell工具链,制作一个完整的量产固件88Q6113_flash.bin,集成用户自定义的配置文件 config.bin,用于88Q6113的Flash烧录。注:Marvell 88Q5072 与 Marvell 88Q6113 的配置流程是一样的。

老板来份猪脚拼叉烧的博客 2011

ios应用集成支付宝的问题汇总

关于app集成支付宝应用内支付的问题总结 近来处理了几个app应用的支付宝集成,对其中的一些问题有了些了解,汇总一下,以备自己或者其他人参考。 1、订单签名错误,请检查PARTNER对应的密钥是否正确 这个问题网上很多人问,但千篇一律都是没有给出解决办法的。很不幸的,我也碰到了。一开始以为是自己密钥生成有问题,对着支付宝的开发文档,重复生成密钥,每步都严格按照要求,结

5389

全网最全RT-DETR涨点改进,基于官方源码1:1还原,在Ultralytics项目中配置rtdetr-r18、rtdetr-r34、rtdetr-r50、rtdetr-r101版本~小论文大论文必备

本文详细介绍了如何将RT-DETR的ResNet18/34/50/101/154版本移植到ultralytics项目中。主要内容包括:1) RT-DETR核心特点,如高效混合编码器、IoU感知查询选择等;2) 提供完整ResNet核心代码;3) 分步配置指南,包括创建模块文件和修改tasks.py;4) 各版本yaml配置文件的创建方法。该方案可帮助研究者快速实现RT-DETR改进,适用于目标检测相关论文研究。所有配置文件均可正常运行,为实验部署提供了便利。

Ai缝合怪、助力小伙伴高效发论文 3932

【麒麟系统】Rsync文件复制与同步工具

本文摘要: Rsync是一款Linux/Unix系统标配的高效文件同步工具,支持增量传输、SSH加密、断点续传等核心功能,相比SCP具有显著优势。文章详细解析了Rsync的五种标准语法格式和常用参数组合,重点介绍了本地同步、远程SSH同步(推送/拉取)的实操方法,并提供了密钥免密登录配置方案。针对企业运维场景,还讲解了文件过滤、镜像同步(--delete)、迁移同步(--remove-source-files)、空运行预校验(--dry-run)等高级功能,以及带宽限速等优化技巧,帮助用户安全高效地完成各类

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 999

android集成支付宝支付实战

android集成支付宝支付实战最近给APP增加了在线支付功能!先说支付宝支付,快速,方便。而微信支付,没有支付宝方便!

qq_41691068的博客 1128

R语言Rstudio突然无法启动且报错:ERROR system error 42 [str: 一, len: 3, from: UTF-8, to: ISO8859-1]...如何解决

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2848

支付宝签名与验签,return_url和通知页notify_url

1 支付宝签名与验签 签名与验签的作用 首先了解下使用RSA签名与验签的作用是什么? 对数据进行签名后,可以保证数据完整性,机密性和发送方角色的不可抵赖性,可以有效防止请求信息信息被篡改。 以商户服务端(A)、支付宝服务端(B)、发送的消息内容(C)、加密后的签名(D)举例如下: • 签名:商户A将需要发给支付宝B的消息内容C利用app私钥进行加密得到签名D。然后A将C和D一起发给B。 • 验签:支付宝B接收到内容C和签名D后,使用app公钥进行验证,验证签名D解密后的内容是否与内容C相同,相同返回tr

cswhl的博客 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

支付宝之私钥签名公钥验签

8th,March,2016 Tuesday RSA公钥加密算法简介 非对称加密算法。只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。 目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为

Jolie_Yang的博客 2万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

支付宝支付之APP支付接口 服务器端

官方文档:点击打开链接 下载服务器端DEMO 导入项目中 代码部分 // 实例化客户端 AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.SERVER_URI, AlipayConfig.APP_ID, AlipayConfig.RSA2_PRIVATE, "json", AlipayConfig.

sourny的专栏 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

spring boot项目完成支付宝沙箱支付(前后端分离)

流程 1. 支付接口 本地前端界面调用本地的支付接口,后端对商品信息封装,再发送请求到支付宝服务器。 在这之前要在支付宝官网注册沙箱环境https://openhome.alipay.com/platform/appDaily.htm 获得到appid,公钥,私钥等之后可以开始入手代码了 @PostMapping("pay") public String pay(int index) { //获得初始化的AlipayClient,主要是填写配置信息 //config.

weixin_43507224的博客 6523
上一篇: 尚学堂《人工智能开发课程》个人总结笔记-2.1
下一篇: 支付宝退款Api
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值