我这 “添加分账接收方” 添加后 返回 白屏 也不知道是成功了还是失败了?😅[图片][图片]
php 微信添加分账接收方-验证签名失败调用微信添加分账接收方接口-https://api.mch.weixin.qq.com/pay/profitsharingaddreceiver 该接口根据开发文档提示(https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_3&index=4)需要使用HMAC-SHA256来签名。故使用<2>的方式来签名,但是调用接口后一直报以下错误 "err_code": "SIGN_ERROR", "err_code_des": "验证签名失败" 想问下有可能是哪里的错误。 PS.调用统一下带接口时,用<1>MD5方式签名,统一支付接口调用正常,没有验证签名失败错误。所以使用的key等参数是和MD5时一样的。 $url = "https://api.mch.weixin.qq.com/pay/profitsharingaddreceiver"; $onoce_str = $this->getRandChar(32); $receiver = '{"type":"MERCHANT_ID", "account":"XXXXXX", "name":"XXXX", "relation_type":"STORE_OWNER"}'; $data["mch_id"] = "1502888888"; //服务商号 $data["sub_mch_id"] = "1536888888"; // 特约商户 $data["appid"] = $config_value['appid']; $data["nonce_str"] = $onoce_str; $s = $this->getSignSha256($data, false); // 签名部分参考<2> $data["sign"] = $s; //$data["sign_type"] = "HMAC-SHA256"; // 这一行加或不加结构都一样,还是"验证签名失败" $data["receiver"] = $receiver; // 这个参数放到$s = $this->getSignSha256($data, false);这一行前面的话结果也是一样,还是"验证签名失败"。 $xml = $this->arrayToXml($data); $response = $this->postXmlCurl($xml, $url); <1>getSign【MD5加密签名获取代码】 foreach ($Obj as $k => $v) { $Parameters[strtolower($k)] = $v; } // 签名步骤一:按字典序排序参数 ksort($Parameters); $String = $this->formatBizQueryParaMap($Parameters, false); $key = $config_value['key']; // 签名步骤二:在string后加入KEY $String = $String . "&key=" . $key; // 签名步骤三:MD5加密 $result_ = strtoupper(md5($String)); <2>getSignSha256 【HMAC-SHA256加密签名获取代码】 foreach ($Obj as $k => $v) { $Parameters[strtolower($k)] = $v; } // 签名步骤一:按字典序排序参数 ksort($Parameters); $String = $this->formatBizQueryParaMap($Parameters, false); $key = $config_value['key']; // 签名步骤二:在string后加入KEY $String = $String . "&key=" . $key; // 签名步骤三:sha256加密 $result_ = strtoupper(hash_hmac("sha256", $String, $key));
2022-06-06