传的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也通过了。
调用接口就报错签名错误。无解。
我整整折腾了一天,如果确实验签通过的话,一般这种情况,大概率是参数多了或者缺少必填参数造成的,请务必仔细检查下,我也是联系腾讯技术支持客服后,才检查发现自己的缘故,如果遇到情况,请参考官方示例(保证参数名称一样,顺序一样的情况下再试,很多时候把红包或者别的接口迁移过来会出现多参数的问题。另外看看付款到零钱的接口是不是被暂停了):
<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
我也遇到一样的问题,请问下最后是怎么解决的?谢谢
请问解决了吗?我也遇到这种情况了 代码里面的签名跟官网的校验工具生成的是一样的 但是就是报错说签名错误
大佬你的问题是咋解决的,我的也是验证通过了,但是调用api 就是签名错误
贴上我用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
]);
}