最近在做支付寶支付,在本地測試一切正常,上傳到服務器就遇到報錯:
Warning: openssl_sign() [function.openssl-sign]: Unknown signature algorithm. in
后來查了查,是我的服務器上PHP環境支持openssl_sign()但卻不支持 OPENSSL_ALGO_SHA256這樣的參數,問了一下大佬,才發現這個參數是在php5.4.8以上版本才支持,低版本的是使用的SHA256,於是乎試了一下,搞定!
報錯原因是支付寶的demo中AopClient.php文件里使用到了這樣的語句:
if ("RSA2" == $signType) {
openssl_sign($data, $sign, $res,OPENSSL_ALGO_SHA256);
} else {
openssl_sign($data, $sign, $res);
}
解決辦法就是把 OPENSSL_ALGO_SHA256 改成 SHA256
if ("RSA2" == $signType) {
openssl_sign($data, $sign, $res,SHA256);
} else {
openssl_sign($data, $sign, $res);
}
注意:這個文件中共有三處,要全部修改好!
非常感謝linux交流群南寧的朋友,還有原著紫石頭的文章。