問題描述:支付寶衝錢接口能夠,可是退款接口會報這個錯誤php
百度到的這個,然而沒用到 https://openclub.alipay.com/read.php?tid=2333&fid=46this
問題定位:從描述內容能夠看到問題sign取不到編碼
解決:個人問題是代碼比較舊,支付寶如今都用RSA2的,可是代碼裏面只有 MD五、RSA兩種代碼實現,故找不到RSA2的實現方式也就會返回空spa
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;
}
而後修改code
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; }