修正 PHP5 升级 PHP8 微信支付/支付宝 SDK支付问题

修正 PHP5 升级 PHP8 微信支付/支付宝 SDK支付问题

更换AlmaLinux服务器后,PHP从5.6升级到了8.0版本,发现 微信、支付宝的网站支付都不能使用。调试踩坑:

1、支付二维码不能显示

原因:phpqrcode/phpqrcode 依赖 gd 库
解决:安装 gd、php-gd

2、微信支付SDK异常

原因:PHP8 废弃了相关函数
解决:选用相应替代

  • 文件:weipay_v3/lib/WxPay.Api.php
// 原代码
public static function notify($config, $callback, &$msg)
{
   if (!isset($GLOBALS['HTTP_RAW_POST_DATA'])) {
             # 如果没有数据,直接返回失败
             return false;
     }
     //如果返回成功则验证签名
   try {
           //获取通知的数据
           $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
           $result = WxPayNotifyResults::Init($config, $xml);
   } catch (WxPayException $e){
           $msg = $e->errorMessage();
......
// 替换后
public static function notify($config, $callback, &$msg)
 {
	$xml = file_get_contents("php://input");
	if (empty($xml)) {
	       # 如果没有数据,直接返回失败
	       return false;
	}
	//如果返回成功则验证签名
	try {
	       //获取通知的数据
	       $result = WxPayNotifyResults::Init($config, $xml);
	} catch (WxPayException $e){
	       $msg = $e->errorMessage();
......
  • 文件:weipay_v3/lib/WxPay.Data.php
// 原代码
libxml_disable_entity_loader(true);
// 替换后
libxml_set_external_entity_loader(function ($public, $system, $context) {
	// 可以抛出异常、return 等操作
	throw new WxPayException("异常:禁用外部实体加载!");
});
3、支付宝SDK异常

原因:PHP8 废弃了相关函数
解决:选用相应替代

  • 文件:alipay_sdk/aop/AopClient.php
// 原代码
class AopClient {
	protected function buildRequestForm($para_temp) {
		$sHtml = "<form id='alipaysubmit' name='alipaysubmit' action='".$this->gatewayUrl."?charset=".trim($this->postCharset)."' method='POST'>";
		while (list ($key, $val) = each ($para_temp)) {
			if (false === $this->checkEmpty($val)) {
			//$val = $this->characet($val, $this->postCharset);
			$sHtml.= "<input type='hidden' name='".$key."' value='".$val."'/>";
		}
}

// 替换后
class AopClient {
	protected function buildRequestForm($para_temp) {
		$sHtml = "<form id='alipaysubmit' name='alipaysubmit' action='".$this->gatewayUrl."?charset=".trim($this->postCharset)."' method='POST'>";
		foreach ($para_temp as $key => $val) {
			if (false === $this->checkEmpty($val)) {
			//$val = $this->characet($val, $this->postCharset);
			$val = str_replace("'","&apos;",$val);
			//$val = str_replace("\"","&quot;",$val);
			 $sHtml.= "<input type='hidden' name='".$key."' value='".$val."'/>";
		}
3、其他
  • mcrypt 废弃,使用openssl、或 “phpseclib/phpseclib”。
  • PHP8 内的 openssl 3 支持des-ecb,使用命令行显示是支持的。
  • 不要轻易生级。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值