/*** @Description: 支付成功后的支付宝异步通知*/
@RequestMapping(value="/alipay")
public String alipay(HttpServletRequest request, HttpServletResponse response) throws Exception {log.info("支付成功后的支付宝异步通知");//获取支付宝POST过来反馈信息Map<String,String> params = new HashMap<String,String>();Map<String,String[]> requestParams = request.getParameterMap();for (Iterator<String> 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 signVerified = AlipaySignature.rsaCheckV1(params,aliPayResource.getAlipayPublicKey(),aliPayResource.getCharset(),aliPayResource.getSignType()); //调用SDK验证签名if(signVerified) {//验证成功// 商户订单号String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");// 支付宝交易号String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");// 交易状态String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");// 付款金额String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8");if (trade_status.equals("TRADE_SUCCESS")){String merchantReturnUrl = paymentOrderService.updateOrderPaid(out_trade_no, CurrencyUtils.getYuan2Fen(total_amount));notifyFoodieShop(out_trade_no, merchantReturnUrl);}log.info("************* 支付成功(支付宝异步通知) - 时间: {} *************", DateUtil.getCurrentDateString(DateUtil.DATETIME_PATTERN));log.info("* 订单号: {}", out_trade_no);log.info("* 支付宝交易号: {}", trade_no);log.info("* 实付金额: {}", total_amount);log.info("* 交易状态: {}", trade_status);log.info("*****************************************************************************");return "success";}else {//验证失败log.info("验签失败, 时间: {}", DateUtil.getCurrentDateString(DateUtil.DATETIME_PATTERN));return "fail";}
}
# 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
#alipay.notifyUrl=http://2r49yp.natappfree.cc/payment/notice/alipay
alipay.notifyUrl=http://payment.t.xuexi.com/payment/payment/notice/alipay
# 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
alipay.returnUrl=http://payment.t.xuexi.com/payment/alipayResult
#alipay.returnUrl=http://shop.t.xuexi.com/payment
@Transactional(propagation=Propagation.REQUIRED)
@Override
public String updateOrderPaid(String merchantOrderId, Integer paidAmount) {Example example = new Example(Orders.class);Example.Criteria criteria = example.createCriteria();criteria.andEqualTo("merchantOrderId", merchantOrderId);Orders paidOrder = new Orders();paidOrder.setPayStatus(PaymentStatus.PAID.type);paidOrder.setAmount(paidAmount);int result = ordersMapper.updateByExampleSelective(paidOrder, example);return queryMerchantReturnUrl(merchantOrderId);
}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>支付结果</title>
</head>
<body>
支付结果
<script>window.onload=function(){window.close();}
</script>
</body>
</html>

支付宝支付 - 异步通知与同步通知相关推荐

  1. 记一起因证书引发的支付宝支付异步通知接收不到的事故

    目录 1.事故还原 2.排查过程 3.疑问 4.支付宝技术客服解答 5.解决方法 1.事故还原 客服反馈有用户使用支付宝支付后,订单状态没有改变. 2.排查过程 查看日志,发现没有收到异步通知. 排查 ...

  2. 支付宝支付异步回调 302

    APP从测试环境迁移到生产环境,重新测试发现购买时,支付宝支付成功之后,订单状态未更新,即异步回调接口未执行. 检查发现notify_url是正确的,并且已经支付成功(账户有被扣款),登录蚂蚁金服开放 ...

  3. 支付宝支付异步回调的一些问题

    做了好多次支付宝支付,还是经常掉坑,现在整理下,作为参考 1,关于设置公钥 一定要注意,是"支付宝公钥",不要填应用公钥,不然就坑了 2.关于回调的域名地址 干净些,不要有参数,如 ...

  4. 异步通知和同步通知_CCF NOI 2020 网上同步赛报名通知

    第 37 届全国青少年信息学奥林匹克竞赛(CCF NOI 2020)将于 8 月 16 日-21 日在长沙市第一中学举行,届时将同期举办网上同步赛. 网上同步赛为非正式比赛,旨在给不能到现场参赛的选手 ...

  5. 支付宝支付异步回调成功,页面跳转问题

    问题: 支付宝扫码支付成功异步回调了处理函数,需要返回信息告诉支付宝的.这样导致了我没办法去处理支付成功的页面跳转.想到一种方法就是ajax轮询,但是觉得如果用户一直不扫码,或一直不支付,那轮询就会不 ...

  6. 扎心啊,老铁!支付宝支付,同步通知session失效问题

    今天遇到一个奇怪的问题,pc端调用支付宝网页支付,但是支付成功后的同步通知,sessionId总是变化 搞的一头雾水,相当难受. 原因说一下: return_url  我本地测试配置的是  http: ...

  7. 支付宝手机网页版支付、支付异步回调、退款

    一.微信小程序订单生成支付宝链接至浏览器支付 整体流程 一.微信小程序订单生成支付宝链接至浏览器支付 1.场景需求 2.准备工作 3.搭建项目环境以及实现 二.支付宝支付异步通知 三.退款 1.退款 ...

  8. Android端集成支付宝支付

    Android端集成支付宝支付 1.申请账号及配置变量 支付宝快速接入链接点击打开链接 支付宝扫码或者账号密码登录 下面是支付宝给出的接入介绍 第一步:创建应用并获取APPID 要在您的应用中接入支付 ...

  9. APP端接入支付宝支付接口

    支付宝支付常量配置 AlipayConfig public class AlipayConfig {// 商户appidpublic static final String APPID = " ...

最新文章

  1. python下载大文件-使用请求在python中下载大文件
  2. 鼠标移出DIV层时,触发onMouseOut事件
  3. MassTransit中RequestResponse基本使用
  4. oracle 实现 自增主键功能
  5. 《Raspberry Pi用户指南》——2.3 Debian简介
  6. 2020广西师范大学计算机学院调剂,2020广西师范大学计算机视觉与应用接收考研调剂...
  7. 海报合成_新年元旦创意合成设计之跨年海报!这组海报我打99分!
  8. java text 格式化_java.text.Format
  9. SI4463 空中唤醒教程
  10. 腾讯视频下载器 M3U8、TS获取下载MP4工具
  11. java else 语法错误_Java中带有else的语法错误
  12. Python常见问题 - pip报错 ValueError: Unable to find resource t32.exe in package pip._vendor.distlib
  13. IDEA的粘贴板的一点问题
  14. 怎么修改PDF文件的文字内容
  15. Android高版本上传图片出现旋转问题(三星手机,小米8)
  16. 浏览器产生乱码的原因
  17. 算法:快速排序稳定性
  18. qt 通过ODBC链接MYSQL
  19. HTB靶场系列 Windows靶机 Arctic靶机
  20. office2013安装后ppt无法打开演示文稿

热门文章

  1. BZOJ 1562 变换序列
  2. 使用ML.NET实现猜动画片台词
  3. 【笔记】css 自定义select 元素的箭头样式
  4. android 自己定义水平和圆形progressbar 仅仅定义一些style就能够
  5. 【SAS BASE】SCAN函数
  6. Delphi XE6 TStringHelper中的string类型转换
  7. 小论接口(interface)和抽象类(abstract class)的区别
  8. 对jquery的conflict方法的解读
  9. Flash Alter v1.0 个性化Flash轮播图文播放器
  10. XML电子口岸自动报关项目 真实百万级项目下载