springboot 微信小程序支付回调

springboot 微信小程序支付回调springboot支付回调验签逻辑首先我们需要到微信后台配置回调的域名信息必须是备案通过了的然后在springboot里面放行回调地址

首先我们需要到微信后台配置回调的域名信息 必须是备案通过了的然后在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("验证签名有误");
    }
}

具体项目地址:code-miniprogram: 源码字节 流量主资源变现小程序 有流量就能躺着赚钱,如今疫情严峻的情况下,很多实体企业都收到影响,所有萌生了创业的想法,靠工资只能解决温饱问题,只有足够的外快才能让我们富足。来源码字节,手把手搭建平台流量主项目,让每个人都可以自己创业。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/39233.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注