首先我们需要到微信后台配置回调的域名信息 必须是备案通过了的然后在springboot里面放行回调地址
/** * 支付回调通知 * * @param request 请求参数 */ @RequestMapping("/notify") public void wxNotify(HttpServletRequest request) { orderService.wxNotify(request); }
@Override public void wxNotify(HttpServletRequest request) { log.info("支付回调"); // 使用requestBody 错误,顺序不一致 String data = wxPayManager.readData(request); JSONObject jsonObject = JSONObject.parseObject(data); // 获取微信签名 String sign = request.getHeader("Wechatpay-Signature"); // 获取时间戳 String timestamp = request.getHeader("Wechatpay-Timestamp"); // 获取证书序列号 String serial = request.getHeader("Wechatpay-Serial"); // 获取加密数据 JSONObject resource = jsonObject.getJSONObject("resource"); // 获取密文 String ciphertext = resource.getString("ciphertext"); // 附加数据 String associatedData = resource.getString("associated_data"); // 随机字符串 String nonce = request.getHeader("Wechatpay-Nonce"); // 验证微信签名 Boolean valid = wxPayManager.validSign(timestamp, nonce, data, sign, serial); if (valid) { String nonce2 = resource.getString("nonce"); String decrypt = wxPayManager.decryptToString(associatedData, nonce2, ciphertext); if (StringUtils.hasLength(decrypt)) { JSONObject object = JSONObject.parseObject(decrypt); String outTradeNo = object.getString("out_trade_no"); // 查询订单 OrderEntity order = super.getOne(Wrappers.lambdaQuery(OrderEntity.class).eq(OrderEntity::getOrderNo, outTradeNo)); if (order != null) { // 未支付的 if (order.getStatus() == 1) { String tradeState = object.getString("trade_state"); // 支付成功,更改状态 if ("SUCCESS".equals(tradeState)) { // 更改订单状态 this.updateTradeStatus(outTradeNo, PayTypeEnum.WECHAT_PAY); } } } else { throw new ServiceException("订单信息有误"); } } } else { throw new ServiceException("验证签名有误"); } }
文章来源:https://uudwc.com/A/eP515
具体项目地址:code-miniprogram: 源码字节 流量主资源变现小程序 有流量就能躺着赚钱,如今疫情严峻的情况下,很多实体企业都收到影响,所有萌生了创业的想法,靠工资只能解决温饱问题,只有足够的外快才能让我们富足。来源码字节,手把手搭建平台流量主项目,让每个人都可以自己创业。文章来源地址https://uudwc.com/A/eP515