事情起因

嘛,作为我们百万计划中的第一步,就是先来搞一下这个支付接口网关,本人才高中所以也没啥办法申请到营业执照,那只有使用第三方支付接口啦,彩虹易支付作为最被广泛使用的第三方支付接口源码,没料到SDK却会在PHP8.0中报错(可能是我下载到很旧的版本,不清楚不知道)

反正,无论是在我测试发起支付,支付回调的时候,都会报错500,我只好把整份SDK的源码读一遍,然后把一些过时的地方改一下了。

远古版本的foreach?

貌似发现了一个很远古版本的foreach,使用whilelisteach来实现的,改一下这个试试看w

原本的代码(不止这一处哦):

function createLinkstring($para) {
    $arg  = "";
    while (list ($key, $val) = each ($para)) {
        $arg.=$key."=".$val."&";
    }
    //去掉最后一个&字符
    $arg = substr($arg,0,count($arg)-2);
    
    //如果存在转义字符,那么去掉转义
    if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
    
    return $arg;
}

更改后的代码:

function createLinkstring($para) {
    $arg  = "";
    foreach($para as $key => $val) {
        $arg.=$key."=".$val."&";
    }
    //去掉最后一个&字符
    $arg = substr($arg,0,strlen($arg)-1);
    //如果存在转义字符,那么去掉转义
    if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
    
    return $arg;
}

注意: 这里其实也把原本的count改为strlen了,但是改了之后记得要把-2改为-1,不然回调的时候验证会失败哦!

神奇的get_magic_quotes_gpc()?

然后还是报错,我估计就是这个get_magic_quotes_gpc过时了,去php官网一看果然是这样,所以再改一下w

原本的代码:

function createLinkstring($para) {
    $arg  = "";
    foreach($para as $key => $val) {
        $arg.=$key."=".$val."&";
    }
    //去掉最后一个&字符
    $arg = substr($arg,0,strlen($arg)-1);
    //如果存在转义字符,那么去掉转义
    if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
    
    return $arg;
}

更改后的代码:

function createLinkstring($para) {
    $arg  = "";
    foreach($para as $key => $val) {
        $arg.=$key."=".$val."&";
    }
    //去掉最后一个&字符
    $arg = substr($arg,0,strlen($arg)-1);
    //如果存在转义字符,那么去掉转义
    $arg = stripslashes($arg);
    
    return $arg;
}

总结

改完之后大概就可以使用了,其实也是瞎改,但是最起码能用,不会报500了。