/*** 支付成功后的微信支付异步通知*/
@RequestMapping(value="/wxpay")
public void wxpay(HttpServletRequest request, HttpServletResponse response) throws Exception {log.info("支付成功后的微信支付异步通知");// 获取微信支付结果PayResult payResult = wxOrderService.getWxPayResult(request.getInputStream());boolean isPaid = payResult.getReturn_code().equals("SUCCESS") ? true : false;// 查询该笔订单在微信那边是否成功支付// 支付成功,商户处理后同步返回给微信参数PrintWriter writer = response.getWriter();if (isPaid) {String merchantOrderId = payResult.getOut_trade_no();            // 商户订单号String wxFlowId = payResult.getTransaction_id();Integer paidAmount = payResult.getTotal_fee();//          System.out.println("================================= 支付成功 =================================");// ====================== 操作商户自己的业务,比如修改订单状态等 start ==========================String merchantReturnUrl = paymentOrderService.updateOrderPaid(merchantOrderId, paidAmount);// ============================================ 业务结束, end ==================================log.info("************* 支付成功(微信支付异步通知) - 时间: {} *************", DateUtil.getCurrentDateString(DateUtil.DATETIME_PATTERN));log.info("* 商户订单号: {}", merchantOrderId);log.info("* 微信订单号: {}", wxFlowId);log.info("* 实际支付金额: {}", paidAmount);log.info("*****************************************************************************");// 通知天天吃货服务端订单已支付
//          String url = "http://192.168.1.2:8088/orders/notifyMerchantOrderPaid";MultiValueMap<String, String> requestEntity = new LinkedMultiValueMap<>();requestEntity.add("merchantOrderId", merchantOrderId);String httpStatus = restTemplate.postForObject(merchantReturnUrl, requestEntity, String.class);log.info("*** 通知天天吃货后返回的状态码 httpStatus: {} ***", httpStatus);// 通知微信已经收到消息,不要再给我发消息了,否则微信会10连击调用本接口String noticeStr = setXML("SUCCESS", "");writer.write(noticeStr);writer.flush();} else {System.out.println("================================= 支付失败 =================================");// 支付失败String noticeStr = setXML("FAIL", "");writer.write(noticeStr);writer.flush();}}
/*** @Description: 支付结果封装类*/
public class PayResult {private String return_code;             // 返回状态码private String appid;                   // 公众账号IDprivate String mch_id;                 // 商户号private String nonce_str;             // 随机字符串private String sign;                    // 签名private String result_code;                // 业务结果private String openid;                   // 用户标识private String trade_type;               // 交易类型private String bank_type;                // 付款银行private int total_fee;                   // 总金额private int cash_fee;                 // 现金支付金额private String transaction_id;         // 微信支付订单号private String out_trade_no;          // 商户订单号private String time_end;                // 支付完成时间private String return_msg;             // 返回信息private String device_info;              // 设备号private String err_code;              // 错误代码private String err_code_des;         // 错误代码描述private String is_subscribe;           // 是否关注公众账号private String fee_type;             // 货币种类private String cash_fee_type;            // 现金支付货币类型private String coupon_fee;               // 代金券或立减优惠金额private String coupon_count;           // 代金券或立减优惠使用数量private String coupon_id_$n;         // 代金券或立减优惠IDprivate String coupon_fee_$n;          // 单个代金券或立减优惠支付金额private String attach;                 // 商家数据包
}
@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);
}
/*** @Description: 支付中心的支付状态 10:未支付 20:已支付 30:支付失败 40:已退款*/
public enum PaymentStatus {WAIT_PAY(10, "未支付"),PAID(20, "已支付"),PAY_FAILED(30, "支付失败"),SUCCESS(40, "已退款");public final Integer type;public final String value;PaymentStatus(Integer type, String value){this.type = type;this.value = value;}}
@PostMapping("notifyMerchantOrderPaid")
public Integer notifyMerchantOrderPaid(String merchantOrderId) {orderService.updateOrderStatus(merchantOrderId, OrderStatusEnum.WAIT_DELIVER.type);return HttpStatus.OK.value();
}

微信支付 - 支付中心回调通知相关推荐

  1. 微信支付分(五)--回调通知

    文章目录 1.介绍 2.代码 3.注意点 1.介绍 代码地址: https://github.com/xm646236438/wechat_pay_score/tree/master SpringBo ...

  2. 项目对接支付宝支付,内网穿透实现监听支付宝的支付成功异步回调通知

    调试的话使用支付宝的沙箱环境来进行调试 调试的时候因为是本地调试,没有上线的域名,无法被支付宝的异步回调请求所打到,这种情况下可以使用内网穿透来进行解决 内网穿透步骤: 内网穿透的几个常用软件 1.n ...

  3. 微信支付V3版本回调+验签流程

    本文主要是接前面2篇微信V3支付参数准备和微信V3支付整合进项目中的后续之微信支付后的回调. 一.回调验签流程介绍 二.核心流程操作 本文主要是接前面2篇微信V3支付参数准备和微信V3支付整合进项目中 ...

  4. 微信小程序开发之webview组件内网页实现微信原生支付

    前言.背景 本人目前的工作岗位是安卓工程师,在这之前对于前端和后台的知识基本是白纸,只是在日常的工作项目中有需要和小伙伴进行对接的时候接触了那么一丢丢,对于前端和后台的一些专业描述和理解有不当之处还请 ...

  5. 微信H5支付及通知回调

    一. H5支付配置 1.在微信商户平台中进行登录并申请相关功能和配置 1.1微信商户平台https://pay.weixin.qq.com/index.php/core/home/loginretur ...

  6. 微信支付回调通知实现

    一 准备 1 配置ngrok 将ngrok映射到本地8170端口,并启动 2 添加工具类 在common_util中添加工具类StreamUtils package com.atguigu.guli. ...

  7. PHP微信APP支付回调通知

    微信支付,在回调中不光要处理自己的业务逻辑,同时要通知微信你已经处理完了,不需要在通知了,否则微信会以15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6 ...

  8. python wechatpay微信支付回调_python服务器 实现app微信支付:支付异步通知

    # -*- coding: utf-8 -*- import tornado.httpserver import tornado.ioloop import tornado.options impor ...

  9. 微信支付宝服务器在哪里,支付宝支付与微信支付服务端回调notify_url数据的区别...

    这两天优化了一下支付宝支付和微信支付订单回调的问题,之前我们的订单都是用手动回调给服务器,现在改成支付宝和微信原生的异步回调,结果并没有像我们想象的那么简单,支付宝是很顺利的解决回调,用一般的方式接收 ...

最新文章

  1. Python TeamViewer批量提交密码重置--分析与实现
  2. Python教程:跳出多层循环for、while
  3. rowid 对应mysql_请教一下相当于MySQL中Oracle的RowID
  4. php 段落加上标签,php – 如何在段落中添加ReadMore
  5. ogg 查看某条更新_明道云Web 6.1更新:日历视图上线
  6. C语言知识分享:面向对象和面向过程到底是怎么回事?
  7. 利用Python脚本编写一个学生平均成绩
  8. 非确定性算法_《长安十二时辰》背后的文娱大脑:如何提升爆款的确定性?
  9. ADB工具包下载及安装
  10. 标签条码打印机开发大纲
  11. 计算机主机与显示器的接口类型,电脑显示器接口类型哪个好?VGA、DVI、HDMI、DP接口区别对比科普...
  12. ipv4和计算机地址是什么意思,什么是IP地址?IPV4和IPV6又有什么区别?
  13. Python编程之找完数
  14. sklearn--make_blobs函数及相应参数简介
  15. 阿里云视频直播功能升级
  16. 唤醒手腕Python全栈工程师学习笔记(微机实验篇)
  17. windows微信公众号采集系统
  18. java流式编程(六)Collector接口
  19. javaScript:语法和使用
  20. 科学前沿,AI共创 ┃ AI for Science 助力各行业高质量发展

热门文章

  1. RSA javascript加密 lua解密
  2. 论一只爬虫的自我修养
  3. 27.怎样在Swift中声明typedef?
  4. Git常用命令备忘(一) 转载
  5. 用jQuery写的最简单的表单验证
  6. [SoapUI] 在Test Step 下加Script Assertion,用 messageExchange 获取当前步骤的response content...
  7. 1900美元,你想要机器女朋友,还是想要女朋友?
  8. Struts2之路第一天
  9. zigbee 协议栈数据类型及转换
  10. 不同编程语言的取模运算%