all_wm 2021-07-15 17:26 采纳率: 0%
浏览 98

后端开发微信小程序支付报验签失败

    @GetMapping("/uniorder")
    public JSONObject uniOrder(String orderId, double totalPrice, String openid, HttpServletRequest request) throws Exception {
        // 获取ip
        String SPBILL_CREATE_IP = PayUtilrou.getIp(request);
        //微信支付统一下单接口用的参数先存放在Map中
        Map<String, String> map = new HashMap<>();
        map.put("appid", WxPayConfig.APP_ID);
        map.put("mch_id", WxPayConfig.MCH_ID);
        // openId
        map.put("openid", openid);
        //订单编号
        map.put("out_trade_no", orderId);
        //订单支付金额,单位为分
        map.put("total_fee", String.valueOf((int) (totalPrice * 100)));
        //支持IPV4和IPV6两种格式的IP地址。调用微信支付API的机器IP,写服务器IP即可
        map.put("spbill_create_ip", SPBILL_CREATE_IP);
        //32位随机字符串
        map.put("nonce_str", PayUtilrou.getRandomString());
        //商品描述
        map.put("body", WxPayConfig.BODY);
        //异步接收微信支付结果通知的回调地址
        map.put("notify_url", WxPayConfig.NOTIFY_URL);
        //签名格式 小程序取值如下:MD5
        map.put("sign_type", WxPayConfig.SIGN_TYPE);
        //支付类型 小程序取值如下:JSAPI
        map.put("trade_type", WxPayConfig.TRADE_TYPE);
        //生成符合规格的签名串
        String stringSignTemp = PayUtilrou.getParamStr(map, WxPayConfig.KEY);  //realKey == key
        System.out.println(stringSignTemp);
        //进行MD5运算,并转为大写,获得sign参数的值
        String signValue = MD5(stringSignTemp.toString()).toUpperCase();
        System.out.println(signValue);
        //把sign放入map中
        map.put("sign", signValue);
        //当sign参数有值时
        if (map.get("sign").trim().length() > 0) {
            //map转义为xml格式
            String requestParam = new String(PayUtilrou.mapToXml(map).getBytes(), "utf-8");
            System.out.println(requestParam);
            //发送请求
            String result = PayUtilrou.sendPostParam(WxPayConfig.PAY_URL, requestParam);
            //WxPayConfig.PAY_URL 统一下单接口URL地址
            System.out.println(result);
            // LOG.info("----uniorder result: " + result);
            //将返回的结果从xml字符串转义为map
            Map<String, String> resultMap = PayUtilrou.xmlToMap(result);
            //初步处理验证返回的结果
            String return_code;
            System.out.println(resultMap);
        }
    }

报错

<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[错误的签名,验签失败]]></return_msg></xml>
{return_msg=错误的签名,验签失败, return_code=FAIL}


  • 写回答

1条回答 默认 最新

  • 关注

    System.out.println(result);把result的值发出来看看。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月15日

悬赏问题

  • ¥15 Java与Hbase相关问题
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开
  • ¥45 工程软件单片机设计课题要求
  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上
  • ¥20 WPF 如何实现多语言,label 和cs(live Charts)中是否都能翻译
  • ¥15 STM32F103上电短路问题
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
  • ¥15 (标签-python|关键词-char)