收藏
回答

企业付款到零钱包SIGN_ERROR签名错误?

传的xml如下

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xml>
<mch_appid>????</mch_appid>
<partner_trade_no>15668805829545040</partner_trade_no>
<openid>oYOU6wuwnl5NT2o0eavZd6GgM4yE</openid>
<check_name>NO_CHECK</check_name>
<amount>10</amount>
<desc>hb</desc>
<spbill_create_ip>192.168.99.1</spbill_create_ip>
<appid>????</appid>
<mchid>????</mchid>
<nonce_str>2a7767cda484466a85985c55feb7a00e</nonce_str>
<sign>????</sign>
</xml>


确认商户号没错,appid已经和商户号绑定,key也是用的api安全设置的key。

验证签名https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=20_1也通过了。

调用接口就报错签名错误。无解。

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

5 个回答

  • 刘云⁵ᴳ⁺
    刘云⁵ᴳ⁺
    2022-03-24

    我整整折腾了一天,如果确实验签通过的话,一般这种情况,大概率是参数多了或者缺少必填参数造成的,请务必仔细检查下,我也是联系腾讯技术支持客服后,才检查发现自己的缘故,如果遇到情况,请参考官方示例(保证参数名称一样,顺序一样的情况下再试,很多时候把红包或者别的接口迁移过来会出现多参数的问题。另外看看付款到零钱的接口是不是被暂停了):

    <xml>

    <mch_appid>wxe062425f740c30d8</mch_appid>

    <mchid>10000098</mchid>

    <nonce_str>3PG2J4ILTKCH16CQ2502SI8ZNMTM67VS</nonce_str>

    <partner_trade_no>100000982014120919616</partner_trade_no>

    <openid>ohO4Gt7wVPxIT1A9GjFaMYMiZY1s</openid>

    <check_name>FORCE_CHECK</check_name>

    <re_user_name>张三</re_user_name>

    <amount>100</amount>

    <desc>节日快乐!</desc>

    <spbill_create_ip>10.2.3.10</spbill_create_ip>

    <sign>C97BDBACF37622775366F38B629F45E3</sign>

    </xml>


    题主的参数里面 多了appid

    2022-03-24
    有用
    回复
  • 晨
    2021-03-10

    我也遇到一样的问题,请问下最后是怎么解决的?谢谢

    2021-03-10
    有用
    回复
  • 123
    123
    2020-05-02

    请问解决了吗?我也遇到这种情况了 代码里面的签名跟官网的校验工具生成的是一样的 但是就是报错说签名错误

    2020-05-02
    有用
    回复
  • 陈鹏飞
    陈鹏飞
    2019-11-18

    大佬你的问题是咋解决的,我的也是验证通过了,但是调用api 就是签名错误

    2019-11-18
    有用
    回复
  • Mr.zhao
    Mr.zhao
    2019-08-27

    贴上我用tp5写的企业付款到零钱,你参考一下

    public function sendMoney($amount,$re_openid,$desc='提现',$check_name=''){
       header("Content-Type: text/html; charset=utf-8");
       $total_amount = (100) * $amount;//提现的金额
       $data=array(
       'mch_appid'=> '',//商户账号appid
       'mchid'=> '',//商户号
       'nonce_str'=> $this->createNoncestr(),//随机字符串
       'partner_trade_no'=> date('YmdHis').rand(1000, 9999),//商户订单号
       'openid'=> $re_openid,//用户openid
       'check_name'=>'NO_CHECK',//校验用户姓名选项,
       're_user_name'=> $check_name,//收款用户姓名
       'amount'=>$total_amount,//金额
       'desc'=> $desc,//企业付款描述信息
       'spbill_create_ip'=> '123.196.128.121',//Ip地址
      );
       $secrect_key = '';//API密码
       $data = array_filter($data);//过滤函数
       ksort($data);
       $str ='';
       foreach($data as $k=>$v) {
      $str.=$k.'='.$v.'&';
       }
       $str.='key='.$secrect_key;//把秘钥和字符串拼接起来
       $data['sign'] = strtoupper(md5($str));//用md5得到sign  转换成大写
       $xml = $this->arraytoxml($data);//拼接成xml的格式
       $url='https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; //调用接口
       $res = $this->wx_curl($xml,$url);
       $return = $this->xmltoarray($res);
       $responseObj = simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA);
       $return_code= $responseObj->return_code;  //SUCCESS  如果返回来SUCCESS,则发生成功,处理自己的逻辑
       $result_code= $responseObj->result_code;  //SUCCESS 只有成功才会返回微信订单号payment_no
       $return_msg = $responseObj->return_msg;//如果非空  就是错误原因
       $err_code_des = $responseObj->err_code_des;//如果非空  就是错误原因
       $money = [
          "return_code"=>$return_code,
          "result_code"=>$result_code,
          "return_msg"=>$return_msg,
          "err_code_des"=>$err_code_des
       ];
       return $success = json([
           "status"=>1,
           "content"=>"成功",
           "result"=>$money    
       ]);
    }


    2019-08-27
    有用
    回复
登录 后发表内容
问题标签