后台回调支付宝

https://blog.csdn.net/u012552275/article/details/78320051   网上找了一个可以起吊支付宝的appdemo ,它集成了服务器端,我先将其分离为app和服务器端,保证app在接收参数后可以启调支付宝
(保证app这边是正确的 不然出错都不知道是服务器出错还是app出错),在
找网上资料修改服务器端,做好app请求接口,和支付宝的服务器回调接口@RequestMapping("pay2.do")@ResponseBodypublic Object pay2(String money){try{AlipayClient alipayClient = new  DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do",PropertiesAlipayUtil.getProperty("appid"),PropertiesAlipayUtil.getProperty("private_key"),"json","UTF-8",PropertiesAlipayUtil.getProperty("public_key"),"RSA2");AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();model.setOutTradeNo(getOutTradeNo() + "");// 订单号。model.setTimeoutExpress("30m");// 设置未付款支付宝交易的超时时间,一旦超时,该笔交易就会自动被关闭。当用户进入支付宝收银台页面(不包括登录页面),会触发即刻创建支付宝交易,此时开始计时。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。// 该参数数值不接受小数点, 如 1.5h,可转换为 90m。model.setTotalAmount("0.01");// 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]这里调试每次支付1分钱,在项目上线前应将此处改为订单的总金额model.setProductCode("QUICK_MSECURITY_PAY");// 销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAYrequest.setBizModel(model);request.setNotifyUrl(PropertiesUtil.getProperty("alipay.callback.url.app")); // 设置后台异步通知的地址,在手机端支付成功后支付宝会通知后台,手机端的真实支付结果依赖于此地址// 根据不同的产品model.setBody("body");// 对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。model.setSubject("111商品的标题/交易标题/订单标题/订单关键字等");//break;// 这里和普通的接口调用不同,使用的是sdkExecuteAlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);// 可以直接给客户端请求,无需再做处理。
//            orders.setAliPayOrderString(response.getBody());
//            baseResult.setData(orders);Map map = new HashMap();
//        map.put("code",201);
//        map.put("message","支付宝下单失败");map.put("orderString",response.getBody());return map;}catch (Exception e){e.printStackTrace();
//            baseResult.setState(-999);
//            baseResult.setMsg("程序异常!");
//            baseResult.setSuccess(false);
//            logger.error(e.getMessage());System.out.println("程序异常!");}return null;}@RequestMapping("alipay_callback.do")@ResponseBodypublic Object alipayCallback(HttpServletRequest request){System.out.println("alipay_callback 回调了"+request);//返回object  因为可能不止是字符串   这个要返回 alipay 按要求的格式返回//支付宝的回调会放到request中供 我们自己取  只要一个参数就好了//自己从新组装mapMap<String, String> params = Maps.newHashMap();//支付宝将回调放request中是数组Map<String, String[]> parameterParams = request.getParameterMap();for(Iterator iterator = parameterParams.keySet().iterator(); iterator.hasNext();){String key = (String) iterator.next();String[] values = parameterParams.get(key);//支付宝将回调放request中是数组String valueStr = "";for(int i = 0; i < values.length ; i++){//遍历数组  拼接之后    1,2,3,4valueStr = (i == values.length -1)? valueStr + values[i]: valueStr + values[i]+",";}自己从新组装mapparams.put(key,valueStr);}logger.info("支付宝回调,sign:{},trade_status:{},参数:{}",params.get("sign"),params.get("trade_status"),params.toString());//验证是不是我们的订单号   总价是不是对的  数量是不是对的 等等//非常重要,验证回调的正确性,是不是支付宝发的,并且能还要避免重复通知,这个说了好多次了ppt里面//我们使用rsa2   256位的进行验证  ctrl+shift+t 查class   ctrl+o 查方法params.remove("sign_type");try {
//            boolean alipoayRSACheckedV2 = AlipaySignature.rsaCheckV2(params, Configs.getAlipayPublicKey(),"utf-8",Configs.getSignType());boolean alipoayRSACheckedV2 = AlipaySignature.rsaCheckV1(params,PropertiesAlipayUtil.getProperty("public_key"),"utf-8", "RSA2");if(!alipoayRSACheckedV2){return ServerResponse.createByErrorMessage("验证不通过,非法请求,在恶意请求我就报网警了");}} catch (AlipayApiException e) {logger.error("支付宝验证回调异常",e);}//todo  验证各种数据  如果正确  减少库存 增加订单  修改状态  在service层做     你们下去自己做吧ServerResponse serverResponse = iOrderService.aliCallback(params);if(serverResponse.isSuccess()){return Const.AlipayCallback.RESPONSE_SUCCESS;}return Const.AlipayCallback.RESPONSE_FAILED;}/*** 要求外部订单号必须唯一。* @return*/public 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;}

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

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

相关文章

解决高版本SpringBoot整合swagger时启动报错:Failed to start bean ‘documentationPluginsBootstrapper‘ 问题

一、控制台的报错信息 2021-12-29 15:15:04 [main] ERROR org.springframework.boot.SpringApplication - Application run failed org.springframework.context.ApplicationContextException: Failed to start bean documentationPluginsBootstrapper; nested exception is j…

java图片格式转化(例如jpg格式转化png)

转载自 java图片格式转化&#xff08;例如jpg格式转化png&#xff09; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Scanner;import javax.imageio.*; public class FormatConversion {public static final Str…

微软开源PowerShell并支持Linux

建议在Wifi 环境下观看视频 class"video_iframe" data-vidtype"1" style" z-index:1; " height"375" width"500" frameborder"0" data-src"https://v.qq.com/iframe/preview.html?vidv0322g7kd3f&width…

招银网络科技笔试

记录一下 招银网络笔试 2017年09月11日 14:32:53 阅读数&#xff1a;2450 Part1. 30道单选 涉及Java&#xff0c;C&#xff0c;多线程&#xff0c;算法&#xff0c;数据结构&#xff0c;CPU&#xff0c;NP问题&#xff0c;SQL语句&#xff0c;IP地址转换&#xff0c;行测。…

mybatisGenerator逆向工程

一、在pom文件中导入依赖和generator插件 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency&…

2016最佳温情小说:雨还在下....

作者 | 李德霞 来源 | 小小说选刊 哗&#xff0c;一道闪电&#xff1b;轰&#xff0c;一个响雷。 暴雨倾盆&#xff0c;天地间浑沌一片…… 老大扑腾腾坐起来&#xff0c;心也跟着扑腾腾地跳。老大拉亮灯&#xff0c;推推身边的媳妇。媳妇一骨碌爬起来&#xff0c;咋&#xf…

java 中 image 和 byte[] 相互转换

转载自 java 中 image 和 byte[] 相互转换只需要一个存储了图片信息的二进制串&#xff08;byte[]&#xff09; 然后&#xff0c;这样&#xff1a; InputStream buffin new ByteArrayInputStream(/*二进制串*/, /*起始位置*/,/*二进制串长度*/)); BufferedImage img ImageIO…

招银网络

记录一下 招银网络笔试 2017年09月11日 14:32:53 阅读数&#xff1a;2451 Part1. 30道单选 涉及Java&#xff0c;C&#xff0c;多线程&#xff0c;算法&#xff0c;数据结构&#xff0c;CPU&#xff0c;NP问题&#xff0c;SQL语句&#xff0c;IP地址转换&#xff0c;行测。…

Java 文件和byte数组转换

转载自 Java 文件和byte数组转换 /** * 获得指定文件的byte数组 */ private byte[] getBytes(String filePath){ byte[] buffer null; try { File file new File(filePath); FileInputStream fis new FileInputStream(file); ByteArrayOutputStream bos new ByteAr…

json大文件导入数据库

json文件导入数据库 使用Navicat的客户端工具也可以实现json文件导入数据库&#xff0c;但是数据量大了之后&#xff0c;字段的值过于冗长可能会导致数据的截取&#xff0c;是的数据导入不是完整的。 所以另辟蹊径使用其他方法 创建一个新的工程用原始的jdbc实现数据的导入 一…

Docker for Windows使用简介

在上一篇文章中&#xff0c;通过演练指导的方式&#xff0c;介绍了在Docker中运行ASP.NET Core Web API应用程序的过程。本文将介绍Docker for Windows的使用。 先决条件 前两周时间&#xff0c;Docker发布了Docker for Windows的正式版&#xff0c;于是就可以在Windows下运行D…

pagehelper 不分页的解决方法

pagehelper 不分页的解 pagehelper PageHelper.startPage(1, 10);只对该语句以后的第一个查询语句得到的数据进行分页, 就算你在PageInfo pa new PageInfo("",对象);语句里面的对象是写的最终得到的数据,该插件还是只会对第一个查询所查询出来的数据进行分页 第一…

最近流行的12个笑话,好笑又有道理

来源 | 悦读文摘&#xff08;ID&#xff1a;yueduwz&#xff09; 01 一个盲人到亲戚家做客&#xff0c;天黑后&#xff0c;他的亲戚好心为他点了个灯笼&#xff0c;说&#xff1a;“天晚了&#xff0c;路黑&#xff0c;你打个灯笼回家吧&#xff01;” 盲人火冒三丈地说&#x…

java 从jar包中读取资源文件

转载自 java 从jar包中读取资源文件 在代码中读取一些资源文件(比如图片&#xff0c;音乐&#xff0c;文本等等)&#xff0c;在集成环境(Eclipse)中运行的时候没有问题。但当打包成一个可执行的jar包&#xff08;将资源文件一并打包&#xff09;以后&#xff0c;这些资源文件找…

json常用的转换

一、json字符串与map的相互转换 首先要导入依赖&#xff0c;用的是fastjson依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.45</version> </dependency>json转map //第一…

JWT【JSON Web Token】 简述

JWT全称JSON Web Token[http://www.jwt.io/]&#xff0c;用于发送可通过数字签名和认证的东西&#xff0c;它包含一个紧凑的&#xff0c;URL安全的JSON对象&#xff0c;服务端可通过解析该值来验证是否有操作权限&#xff0c;是否过期等安全性检查。由于其紧凑的特点&#xff0…

Android增加自定义监听事件

适配器中 public interface ShippingDelOnClickListener {public void onClickListenerShippingDel(int position); }private ShippingDelOnClickListener mShippingDelOnClickListener;public void setShippingDelOnClickListener(ShippingDelOnClickListener shippingDelO…

BufferedInputStream与ImageInputStream

转载自 BufferedInputStream与ImageInputStreamBufferedInputStream读取图片文件&#xff08;jpg格式&#xff09;,但是图片大小在1M到200M之间都有&#xff0c;由于图片太大&#xff0c;不知道怎么处理好&#xff0c;谢谢各位大哥大姐教教小弟&#xff0c;现在只能读取1M以下读…

List自定义对象集合转List<Map<String,Object>>对象

一、List自定义对象集合转List<Map<String,Object>>对象 public static Map<String,Object> object2Map(Object obj) throws Exception{Map<String,Object> map new HashMap<String, Object>(16);Field[] fields obj.getClass().getDeclaredF…

又一大波笑到肾抽筋,笑出六块腹肌的段子

文章来源于网络&#xff0c;侵删 01 我有一个要强的妈妈&#xff0c;记得小时候&#xff0c;我妈骑自行车带我&#xff0c;我脚卡车轮里了&#xff0c;我妈感觉蹬不动&#xff0c;就站起来蹬。 长到两米算我输 02 “单身两年以上是什么体验&#xff1f;”&#xff0c; “单身20…