6
回答
thinkphp openssl_get_privatekey() 方法返回 Resource id #75
华为云4核8G,高性能云服务器,免费试用   

支付宝接口真的是一个问题接一个问题啊!~明显感觉没有微信支付来的干脆。。。好了不吐槽了,直接上问题:

今天在写支付宝签名的时候用到了php中 openssl_get_privatekey 这个函数,传的值是文件路径名(路径绝对正确),但是返回给我的并不是true或者false,而是“Resource id #75” ,然后我肯定首选是去百度,百度了一下,发现没有人出现和我类似的问题,那么大神们问题来了,为什么会返回“Resource id #75”这个值,是没开启openssl_get_privatekey 这个函数吗?如果没开启,那我应该如何启用!求解。

PHP
举报
刘晓帅
发帖于3年前 6回/3K+阅
共有6个答案 最后回答: 1年前
补充下,我是在支付完成后回调里面遇到的这个问题,支付宝的demo里判断的是true和false ,而我返回的是空,然后我就顺藤摸瓜的找到了openssl_get_privatekey的所在位置,发现openssl_get_privatekey 函数返回的是“Resource id #75
php5以后用openssl_pkey_get_private()这个函数来代替。而且需要把你从支付宝网站拷贝出来的私钥字符串根据标准私钥格式换行一下才可以用,最好连开头结尾的begin 和end 也加上。linux上需要把私钥文件设置可读权限。
--- 共有 1 条评论 ---
刘晓帅请问正常返回值应该是什么 3年前 回复

压根就不需要这玩意.


验证:

if (!empty($_POST))
{
    foreach($_POST as $key => $data)
    {
        $_GET[$key] = $data;
    }
}
 
/* 检查数字签名是否正确 */
ksort($_GET);
reset($_GET);
 
$sign = '';
foreach ($_GET AS $key=>$val)
{
    if ($key != 'sign' && $key != 'sign_type' && $key != 'code')
    {
        $sign .= "$key=$val&";
    }
}
 
$sign = substr($sign, 0, -1) . 你的key;
 
if (md5($sign) != $_GET['sign'])
{
    return false;
}else{
    return true;
}



--- 共有 1 条评论 ---
刘晓帅哥,我是RSA加密,有好的解决办法吗,而且我现在用base64_decode()解码以后是乱码 3年前 回复

请问这个问题是否已解决,能否把加密过程代码发我一份,这个问题困扰我好久了!531921644@qq.com,非常感谢!

顶部