【支付宝】退款接口|【支付宝】退款接口 报 “缺少签名参数”


问题描述:支付宝冲钱接口可以,但是退款接口会报这个错误

【【支付宝】退款接口|【支付宝】退款接口 报 “缺少签名参数”】百度到的这个,然而没用到https://openclub.alipay.com/read.php?tid=2333&fid=46

问题定位:从描述内容可以看到问题sign取不到
解决:我的问题是代码比较旧,支付宝现在都用RSA2的,但是代码里面只有 MD5、RSA两种代码实现,故找不到RSA2的实现方式也就会返回空

【支付宝】退款接口|【支付宝】退款接口 报 “缺少签名参数”
文章图片


protected function makeSign($signStr) { $sign = ''; switch ($this->signType) { case 'MD5': $signStr .= $this->md5Key; // 此处不需要通过 & 符号链接 $sign = md5($signStr); break; case 'RSA': case 'RSA2'://原来没RSA2的处理,会直接default sign返回 '' 导致现在这个报错,RSA用不着了,直接改成给RSA2用 $rsa_private_key = @file_get_contents($this->rsaPrivatePath); $rsa = new RsaEncrypt($rsa_private_key); $sign = $rsa->encrypt($signStr); break; default: $sign = ''; }return $sign; }


然后修改
【支付宝】退款接口|【支付宝】退款接口 报 “缺少签名参数”
文章图片


public function encrypt($data) { if ($this->key === false) { return ''; }$res = openssl_get_privatekey($this->key); if (empty($res)) { throw new \Exception('您使用的私钥格式错误,请检查RSA私钥配置'); }openssl_sign($data, $sign, $res,OPENSSL_ALGO_SHA256); //请注意,原先是只有3个入参,现在多一个入参 openssl_free_key($res); //base64编码 $sign = base64_encode($sign); return $sign; }



    推荐阅读