opencart错误:Call to undefined method Loader::library()

前两天部署客户的网站时,发现手机支付宝又不能用了,好奇怪,明明修复好了代码(其实我忘了一个事),然后又是500错误不报错,怎么都不能让其报错,后面终于有错误提示出来了。

opencart错误:Call to undefined method Loader::library()

然后去对应文件看了这行代码:

  1. $this->load->library('alipaywapsubmit');

于是用FTP去看看system下的library文件夹下有没有“alipaywapsubmit.php”文件,去看了确实有的。那就奇怪了,为何不引入呢?于是乎,我找到了system/engine/loader.php文件看了下,这个版本没有这个方法。看来是版本差异问题。那这就尴尬了。只好自己引入啦。

  1. //把这一行
  2. $this->load->library('alipaywapsubmit');
  3. //替换为这个
  4. include_once(DIR_SYSTEM.'library/alipaywapsubmit.php');

也就是用PHP系统函数,引入指定文件,DIR_SYSTEM是常量,在config里已经定义了绝对路径,这里拼接地址引入即可。

opencart错误:Call to undefined method Loader::library()

如果要用这种方式,下面还有个地方要改:

  1. $this->load->library('alipaywapnotify');
  2. //改为
  3. include_once(DIR_SYSTEM.'library/alipaywapnotify.php');

虽然是解决了。但是如果其他插件也因为这个而不兼容怎么办呢?所以我们还是去补充这个方法吧。找到刚才我说的loader.php文件。加入下面代码即可。

  1. public function library($library) {
  2.     $file = DIR_SYSTEM . 'library/' . $library . '.php';
  3.     if (file_exists($file)) {
  4.         include_once($file);
  5.     } else {
  6.         trigger_error('Error: Could not load library ' . $file . '!');
  7.         exit();
  8.     }
  9. }

 

0619更新

本文仅举例说明缺失library的解决方法,但是后面发现异步回调有问题,想起来昨天写这个文章也写了后面“alipaywapnotify”的例子。为了不形成误导,这里说一下:第一个引入可以用加入方法的方式解决。但是下面引入“alipaywapnotify”这个,则不能继续用这个方法。直接用include_one 引入。因为回调这个地方用的是PHP页面,不会走this这个方法,这个页面并不是用OC的一些参数函数来操作。所以下面这一行不应该这样写。(在此感谢TT协助解决异步问题)

拓展

关于异步回调的还有个系统原因:

三步解决回调信息错误-以支付宝付款成功后回调错误为例说明

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

图片 表情