收藏
回答

大家好,这边小菜鸟遇到了一个问题,关于签名

这边使用的v3接口,要构造header里的Authorization

这边遇到问题

使用https://tools.aifuwu.net/wechat-pay-tools/apiv3-request-signaturev3签名验证工具验证后,签名一致

但是发起接口后始终返回签名错误,请问这个要如何排查呢

回答关注问题邀请回答
收藏

2 个回答

  • Memory (私信不回复)
    Memory (私信不回复)
    2025-09-07

    body 如果计算的时候是字符串,那么你请求的时候不是就会有问题

    2025-09-07
    有用 1
    回复 11
    • 庞
      2025-09-08
      额 大佬 没理解 能详细说说吗
      2025-09-08
      回复
    • Memory (私信不回复)
      Memory (私信不回复)
      2025-09-08回复
      2025-09-08
      回复
    • 庞
      2025-09-08
      我这边发起请求的body和签名的body都是json过后的字符串
      2025-09-08
      回复
    • Memory (私信不回复)
      Memory (私信不回复)
      2025-09-08回复
      贴代码
      2025-09-08
      回复
    • 庞
      2025-09-08
      $originBody = [
          "appid" => "wx612a655e6dc42689",
          "out_batch_no" => "ML".time(),
          "batch_name" => "商户提现",
          "batch_remark" => "测试",
          "total_amount" => "1",
          "total_num" => "1",
          "transfer_detail_list" => [
              [
              "out_detail_no" =>"MLcash".time().rand(10000,99999),
              "transfer_amount" => "1",
              "transfer_remark" => "商户提现测试",
              "openid" => "o15S37cWeEq1qYy1ySBr3i-dLG3c",
              ]
          ]
      ];
      $body = json_encode($originBody, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
      $url = "https://api.mch.weixin.qq.com/v3/transfer/batches";


      $params = array( "url" => $url, "method" => "POST", "body" => $body );
      # 商户号
      $mch_id = "1499339842";


      $url_parts = parse_url($url);
      $canonical_url = $url_parts["path"] . ((!empty($url_parts["query"]) ? "?" . $url_parts["query"] : ""));


      $http_method = $params["method"];
      $timestamp = time();


      $nonce = random(8);












      $message = $http_method . "\n" . $canonical_url . "\n" . $timestamp . "\n" . $nonce . "\n" . $body . "\n";










      $mch_private_key = openssl_pkey_get_private(file_get_contents("apiclient_key.pem"));
      openssl_sign($message, $raw_sign, $mch_private_key, "sha256WithRSAEncryption");
      $sign = base64_encode($raw_sign);






      $schema = "WECHATPAY2-SHA256-RSA2048";
      $merchant_id = $mch_id;
      $serial_no = "76424E3229AEB58C946AE180124547BAE432B8F8";
      $token = sprintf("mchid=\"%s\",nonce_str=\"%s\",timestamp=\"%d\",serial_no=\"%s\",signature=\"%s\"", $merchant_id, $nonce, $timestamp, $serial_no, $sign);
      $result = $schema . " " . $token;






      $header = [
          "Authorization" => $result,
          "Accept" => "application/json",
          "Content-Type" => "application/json",
      ];






      $response = ihttp_request($url, $params, $header);




      print_r($response);
      2025-09-08
      回复
    查看更多(6)
  • 智能回答 智能回答 本次回答由AI生成
    2025-09-07
    有用
    回复 1
    • 庞
      2025-09-07
      https://pay.weixin.qq.com/doc/v3/merchant/4012458841
      商家转账接口
      Array
      (
          [url] => https://api.mch.weixin.qq.com/v3/transfer/batches
          [method] => POST
          [body] => {"appid":"wx612a655e6dc42689","out_batch_no":"ML1757240805","batch_name":"商户提现","batch_remark":"测试","total_amount":"1","total_num":"1","transfer_detail_list":[{"out_detail_no":"MLcash175724080590362","transfer_amount":"1","transfer_remark":"商户提现测试","openid":"o15S37cWeEq1qYy1ySBr3i-dLG3c"}]}
      )
      Array
      (
          [Authorization] => WECHATPAY2-SHA256-RSA2048 mchid="1499339842",nonce_str="to8wQ8aG",timestamp="1757240805",serial_no="76424E3229AEB58C946AE180124547BAE432B8F8",signature="ySfYbVO0dOZjssxdjSQhIAZgNwQSx6+aJ06gHkmTSYLXk6VruOsm9s7r8jiW2jm+VDxLJrjuW1Vlm4dkDnJxRtfkknzUsILDzdqKDRgd5UhgxClFmr2KshbozLizn/pqLQ6V7g4qlBJBhshxpJL+lVVSqKeEcBamWp5DJLgwP55EJEKRdBKZxHqR1qEtAgPoYJm9JVXVX2eL6AImdXcFTEGL2KJmeE1IXUXSgk9XOKwo21uOUvRl2a/h/stOgiGRhAUV4mXvdh0GqEed03hQIyyt0Atdy9jOGyYcs/8F+iXQkPcgPrLUcbPxnmh54B7GriNFVfwqb+KulsYNoB0DEQ=="
          [Accept] => application/json
          [Content-Type] => application/json
          [Wechatpay-Serial] => 36FB2601FAF732E2B03FAE935FBA82B2CF3B7934
      )


      返回401 签名错误
      2025-09-07
      回复
登录 后发表内容