Opencart 2.0安装Paypal Express时出现error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version错误的解决方案

问题描述

在下的跨境电商网站接到Paypal通知说“Paypal Standard”支付方式即将停止官方维护,建议尽快安装“Paypal Express”。

我的网站使用的Opencart 2.0搭建,按照官方给出文档在后台进行了插件安装,然而安装后Paypal Express使用并不正常,具体表现为,再结算页面最后一步点击付款按钮时,直接跳转到第一步。

一个值得注意的地方是,线上网站会出现上述问题,而我本地的副本安装后则可以正常使用Paypal Express。

排查过程

  1. 通过分析代码,发现Opencart的Paypal Express插件php文件中有以下代码
    file
  2. 进一步跟踪,发现具体的报错内容为:
    error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

    明显说的是和SSL有关的错误。

  3. 由于线上网站会出现上述问题,而我本地的副本安装后则可以正常使用。加之线上网站有SSL证书,本地的是普通http,所以我一开始误以为是https导致的某种错误。经过一系列的网上查询,发现应该不是SSL证书的问题。
  4. 于是进一步再各搜索引擎搜索以下错误代码:
    error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
  5. 通过某篇机器翻译的文章,大概了解到有可能是使用的CURL函数的问题。
  6. 于是查了下服务器PHP环境,发现已经安装了CURL,本地副本也安装了CURL,唯一的区别是两个CURL的版本不同(服务器是php5.3,本地是php5.6,所以自带的CURL版本也不一样)。
  7. 抱着试试看的心态,我把服务器上的php升级为了php5.6,重启后发现问题解决。

解决方案及结论

CURL用于访问某个远程地址,当访问的地址是https地址的时候,低版本的CURL会出问题。
所以解决方案很简单,就是把php升级到5.6版本即可。

P.S.

如果想要修改Paypal Express的图标,请在Opencart语言包中修改。