PHP 解析错误:语法错误,PHP 8.1 上的错误消息中出现意外标记“public”

2024-01-16

在 PHP 8.1 中运行时会触发上述错误消息。

还没有发现任何明显的地方,即需要更改下面的代码以消除此错误消息。

 public function process_button()
{
    $sid = zen_session_name() . '=' . zen_session_id();
    $formEntries = $this->buildStandardTransactionDetails();
    $formEntries['SuccessURL'] = str_replace('&', '&', zen_href_link(FILENAME_CHECKOUT_PROCESS, $sid, 'SSL', false));
    $formEntries['FailureURL'] = str_replace('&', '&', zen_href_link(FILENAME_CHECKOUT_PROCESS, $sid, 'SSL', false));
    $processButtonString = SagepayUtil::processCryptEntries($formEntries);

    $crypt = SagepayUtil::encryptAndEncode($processButtonString, MODULE_PAYMENT_SAGEPAY_ZC_FORM_PASSWORD);

    $transaction_type = strtoupper(MODULE_PAYMENT_SAGEPAY_ZC_FORM_TXTYPE);
    $this->errorLog(array(
        array('title' => 'Transaction Type', 'content' => $transaction_type),
        array('title' => 'Submit Data', 'content' => $processButtonString)
    ));

    $process_button_string = zen_draw_hidden_field('VPSProtocol', self::SP_PROTOCOL_VERSION) .
        zen_draw_hidden_field('TxType', $transaction_type) .
        zen_draw_hidden_field('Vendor', MODULE_PAYMENT_SAGEPAY_ZC_FORM_VENDOR_NAME) .
        zen_draw_hidden_field('ReferrerID', 'BB5F9F0D-8982-4203-AFD4-AF78017E4B92') .
        zen_draw_hidden_field('Crypt', $crypt);
    return $process_button_string;
}

错误指向第一行代码(如下):

 public function process_button()

完整的 php 文件:

<?php
/**
* sagepay form
*
* @package paymentMethod
* @copyright Copyright 2003-2017 Zen Cart Development Team
* @copyright Portions Copyright 2003 osCommerce
* @copyright Portions Copyright Nixak
* @license http://www.zen-cart.com/license/2_0.txt GNU Public License 
V2.0
* @version $Id: Author: zcwilt  June 2017 New in v1.5.5 $
*/
require_once(DIR_FS_CATALOG . DIR_WS_MODULES . 
'payment/sagepay_zc/SagepayBasket.php');
require_once(DIR_FS_CATALOG . DIR_WS_MODULES . 
'payment/sagepay_zc/SagepayCustomer.php');
require_once(DIR_FS_CATALOG . DIR_WS_MODULES . 
'payment/sagepay_zc/SagepayUtil.php');
 require_once(DIR_FS_CATALOG . DIR_WS_MODULES . 
 'payment/sagepay_zc/sagepay_zc_payment.php');

/**
 * Class sagepay_form
*/
 class sagepay_zc_form extends sagepay_zc_payment
 {

/**
 * @var array
 */
protected $sagepayResponse;

/**
 *
 */
public function __construct()
{
    $this->code = 'sagepay_zc_form';
    parent::__construct();
    $this->form_action_url = 
    'https://live.sagepay.com/gateway/service/vspform-register.vsp';
    if (MODULE_PAYMENT_SAGEPAY_ZC_FORM_TEST_STATUS == 'test') {
    $this->form_action_url = 
   'https://test.sagepay.com/gateway/service/vspform-register.vsp';
    }
    if ((extension_loaded('suhosin') || defined("SUHOSIN_PATCH"))  && 
    ini_get('suhosin.get.max_value_length') < 600) {
        $this->title .= '<span class="">' . TEXT_TITLE_SUHOSIN_ERROR . 
    '</span>';
        $this->description = '<span class="">' . 
    TEXT_DESCRIPTION_SUHOSIN_GET_LENGTH_ERROR . '</span><br><br>' . 
    $this->description;
    if ((extension_loaded('suhosin') || defined("SUHOSIN_PATCH"))  && 
    ini_get('suhosin.get.max_value_length') < 600) {
        $this->title .= '<span class="">' . TEXT_TITLE_SUHOSIN_ERROR . 
    '</span>';
        $this->description = '<span class="">' . 
    TEXT_DESCRIPTION_SUHOSIN_GET_LENGTH_ERROR . '</span><br><br>' . 
    $this->description;
        $this->enabled = false;
    }
    }

    /**
    * @return string
    */
   public function process_button()
    {
    $sid = zen_session_name() . '=' . zen_session_id();
    $formEntries = $this->buildStandardTransactionDetails();
    $formEntries['SuccessURL'] = str_replace('&amp;', '&', 
    zen_href_link(FILENAME_CHECKOUT_PROCESS, $sid, 'SSL', false));
    $formEntries['FailureURL'] = str_replace('&amp;', '&', 
    zen_href_link(FILENAME_CHECKOUT_PROCESS, $sid, 'SSL', false));
    $processButtonString = 
    SagepayUtil::processCryptEntries($formEntries);

    $crypt = SagepayUtil::encryptAndEncode($processButtonString, 
    MODULE_PAYMENT_SAGEPAY_ZC_FORM_PASSWORD);

    $transaction_type = 
    strtoupper(MODULE_PAYMENT_SAGEPAY_ZC_FORM_TXTYPE);
    $this->errorLog(array(
        array('title' => 'Transaction Type', 'content' => 
    $transaction_type),
        array('title' => 'Submit Data', 'content' => 
    $processButtonString)
    ));

    $process_button_string = zen_draw_hidden_field('VPSProtocol', 
    self::SP_PROTOCOL_VERSION) .
        zen_draw_hidden_field('TxType', $transaction_type) .
        zen_draw_hidden_field('Vendor', 
    MODULE_PAYMENT_SAGEPAY_ZC_FORM_VENDOR_NAME) .
        zen_draw_hidden_field('ReferrerID', 'BB5F9F0D-8982-4203-AFD4- 
    AF78017E4B92') .
        zen_draw_hidden_field('Crypt', $crypt);
    return $process_button_string;
    }

   /**
   *
   */
   public function before_process()
    {
    global $messageStack;
    $sagepay_return_data = SagepayUtil::decodeAndDecrypt($_GET['crypt'], 
    MODULE_PAYMENT_SAGEPAY_ZC_FORM_PASSWORD);
    $this->errorLog(array(
        array('title' => 'Response Data', 'content' => 
    $sagepay_return_data)
    ));
    $this->sagepayResponse = 
    SagepayUtil::getResponseTokens($sagepay_return_data);

    $status = $this->sagepayResponse['Status'];
    if (in_array($status, array('OK', 'REGISTERED', 'AUTHENTICATED'))) {
        return;
    }
    $error_message = $this->getResponseErrorMessage($this- 
    >sagepayResponse['Status']);
    $payment_error_return = 'ERROR ' . sprintf($error_message, $this- 
    >sagepayResponse['StatusDetail']);
    $this->errorLog(array(
        array('title' => 'Response Values', 'content' => implode("\n", 
    $this->sagepayResponse))
    ));
    $messageStack->add_session('checkout_payment', 
    $payment_error_return, 'error');
    zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL', 
    true, false));
    }

    /**
    * @param $zf_order_id
   */
    public function after_order_create($zf_order_id)
    {
    global $db;
    $transactionData = $this->sagepayResponse;
    $sagepayTransaction = array();
    $sagepayTransaction[] = array('fieldName' => 'vpstxid', 'value' => 
    $transactionData['VPSTxId'], 'type' => 'string');
    $sagepayTransaction[] = array('fieldName' => 'zen_order_id', 'value' 
    => $zf_order_id, 'type' => 'integer');
    $sagepayTransaction[] = array('fieldName' => 'api_type', 'value' => 
    $this->code, 'type' => 'string');
    $sagepayTransaction[] = array('fieldName' => 'vendor_tx_code', 
    'value' => $transactionData['VendorTxCode'], 'type' => 'string');
    $sagepayTransaction[] = array('fieldName' => 'transaction_status', 
    'value' => $transactionData['Status'], 'type' => 'string');
     $sagepayTransaction[] = array('fieldName' => 'status_detail', 
    'value' => issetorArray($transactionData, 'StatusDetail', ''), 
    'type' => 'string');
    $sagepayTransaction[] = array('fieldName' => 'tx_auth_no', 'value' 
    => issetorArray($transactionData, 'TxAuthNo', ''), 'type' => 
    'string');
    $sagepayTransaction[] = array('fieldName' => 'avs_cv2', 'value' => 
    issetorArray($transactionData, 'AVSCV2', ''), 'type' => 'string');
    $sagepayTransaction[] = array('fieldName' => 'address_result', 
    'value' => issetorArray($transactionData, 'AddressResult', ''), 
    'type' => 'string');
    $sagepayTransaction[] = array('fieldName' => 'postcode_result', 
   'value' => issetorArray($transactionData, 'PostCodeResult', ''), 
   'type' => 'string');
    $sagepayTransaction[] = array('fieldName' => 'cv2_result', 'value' 
    => issetorArray($transactionData, 'CV2Result', ''), 'type' => 
    'string');
    $sagepayTransaction[] = array('fieldName' => 
    'three_d_secure_status', 'value' => issetorArray($transactionData, 
    '3DSecureStatus', ''), 'type' => 'string');
    $sagepayTransaction[] = array('fieldName' => 'cavv_result', 'value' 
    => issetorArray($transactionData, 'CAVV', ''), 'type' => 'string');
    $sagepayTransaction[] = array('fieldName' => 'card_type', 'value' => 
    issetorArray($transactionData, 'CardType', ''), 'type' => 'string');
    $sagepayTransaction[] = array('fieldName' => 'last_4_digits', 
    'value' => issetorArray($transactionData, 'Last4Digits', ''), 'type' 
    => 'string');
    $sagepayTransaction[] = array('fieldName' => 'address_status', 
   'value' => issetorArray($transactionData, 'AddressStatus', ''), 
   'type' => 'string');
    $sagepayTransaction[] = array('fieldName' => 'payer_status', 'value' 
    => issetorArray($transactionData, 'PayerStatus', ''), 'type' => 
    'string');
    $db->perform(TABLE_SAGEPAY_TRANSACTION, $sagepayTransaction);
    }
    }

此函数不是类的一部分。所以删除public关键字只是

function process_button()

Update

编辑完问题后就清楚了,有一个语法错误。右大括号}构造函数末尾缺少。

    public function __construct()
    {
        $this->code = 'sagepay_zc_form';
        parent::__construct();
        $this->form_action_url =
            'https://live.sagepay.com/gateway/service/vspform-register.vsp';
        if (MODULE_PAYMENT_SAGEPAY_ZC_FORM_TEST_STATUS == 'test') {
            $this->form_action_url =
                'https://test.sagepay.com/gateway/service/vspform-register.vsp';
        }
        if ((extension_loaded('suhosin') || defined("SUHOSIN_PATCH"))  &&
            ini_get('suhosin.get.max_value_length') < 600) {
            $this->title .= '<span class="">' . TEXT_TITLE_SUHOSIN_ERROR .
                '</span>';
            $this->description = '<span class="">' .
                TEXT_DESCRIPTION_SUHOSIN_GET_LENGTH_ERROR . '</span><br><br>' .
                $this->description;
            if ((extension_loaded('suhosin') || defined("SUHOSIN_PATCH"))  &&
                ini_get('suhosin.get.max_value_length') < 600) {
                $this->title .= '<span class="">' . TEXT_TITLE_SUHOSIN_ERROR .
                    '</span>';
                $this->description = '<span class="">' .
                    TEXT_DESCRIPTION_SUHOSIN_GET_LENGTH_ERROR . '</span><br><br>' .
                    $this->description;
                $this->enabled = false;
            }
        }
    } // <-- This one is missing

所以既然是类方法,就重新添加public关键字返回。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 解析错误:语法错误,PHP 8.1 上的错误消息中出现意外标记“public” 的相关文章

  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行
  • 如何修复 Laravel 中未找到的“PDF”类

    在我的 Laravel 应用程序中遇到以下错误 CollaboPDFController php 第 14 行中的 FatalErrorException 未找到 PDF 类 这是我的ColaboPDFController php
  • PHP cURL 重定向到本地主机

    我正在尝试使用带有 cURL 的 php 脚本登录外部网页 我是 cURL 的新手 所以我觉得我错过了很多东西 我找到了几个例子并修改了它们以允许访问https页面 最终 我的目标是能够登录页面并在登录后通过指定的链接下载 csv 到目前为
  • PHP 换行符 (\n) 不起作用

    由于某种原因我无法使用 n使用 PHP 输出到文件时创建换行符 上面只写着 n 到文件 我尝试使用 n 同样 它只写 n 如预期 但我一生都无法弄清楚为什么在字符串中添加 n 不会创建新行 我也尝试过 r n但它只是附加 r n 到文件中的
  • 如何在 Laravel 5 中对合并集合进行分页?

    我正在创建一个包含两种类型的对象的流 BluePerson 和 RedPerson 为了创建流 我获取所有这两个对象 然后将它们合并到一个集合中 这样做之后 我需要对它们进行分页 但是分页似乎是针对雄辩的模型和数据库查询 而不是集合 我见过
  • 如何解析cURL返回的header?

    我正在尝试使用 cURL 与 API 进行通信 其中一种方法要求我传递ININ ICWS CSRF Token标题 即WAhtYWxoYXlla1dBY2NvUkRJWCQxZmUxZWFhZS0xZTE0LTQyNGYtYjdhZS0zN
  • 重定向而不是 404 错误页面 - 状态代码不起作用 (Nginx)

    我目前正在迁移到 nginx 服务器 我尝试将其放入名为的 404 ErrorDocument 中404 php 如果我现在尝试访问http mydomain com 404 php 这按预期工作 它将我重定向到 Google 但是一旦我尝
  • 知道何时调用 persist

    我正在使用 Doctrine 2 作为我的 ORM 一切进展顺利 但我一直想知道EntityManager persist 方法 这 持久实体 https www doctrine project org projects doctrine
  • 在 PHP 中拆分 XML

    我有一个带有根元素和多个项目子元素的合并 xml 像这样的东西
  • 如何在 PHP 中将默认日期设置为波斯日期?

    如何在 PHP 中将默认日期设置为波斯日期 说吧 如果我echo这个功能date Y m d 然后它会显示2018 03 05但我想要1396 12 14波斯日期 请检查 http php net manual en intldatefor
  • 在 php 和 mysql 中使用 utf8mb4

    我读过 mysql gt 5 5 3 完全支持每个可能的字符 如果您使用编码utf8mb4对于某个表 列http mathiasbynens be notes mysql utf8mb4 http mathiasbynens be note
  • filter_input() 何时删除 POST 变量的斜杠?

    我创建了一个小型 PHP 脚本 它在 PHP 5 2 17 的服务器上运行magic quotes gpc指令已启用 我没有对 php ini 文件的写访问权限 并且我想从用户输入中删除所有斜杠 即使magic quotes gpc指令被关
  • 同一路由组的多个前缀

    我正在为一所学校编写一个相当简单的网站 该网站有新闻 文章 视频剪辑 等 它的工作方式是在主页中我们向访问者展示一些课程 例如 gt math gt geography gt chemistry 用户在其中选择 1 网站内容会根据用户的选择
  • 内联还有用吗? [复制]

    这个问题在这里已经有答案了 我相信 inline已经过时了 因为我读过here https isocpp org wiki faq inline functions 无论您如何将函数指定为inline 这是允许编译器忽略的请求 编译器可能会
  • 让用户渲染自己的 SVG 文件的安全隐患

    我计划让网站用户上传他们自己的 SVG 文档并使用inkscape or svg2pdf 用户要么未经身份验证 要么经历一个简单的注册过程 所以我预计会有一些黑客尝试 我可以采取哪些过滤措施来最大程度地减少安全威胁 Inkscape 似乎并
  • 扫描 PHP 上传的病毒

    我目前正在使用以下代码来扫描作为申请表的一部分上传的文件 safe path escapeshellarg dir file command usr bin clamscan stdout safe path out int 1 exec
  • PHP:展平数组-最快的方法? [复制]

    这个问题在这里已经有答案了 是否有任何快速方法可以在不运行 foreach 循环的情况下展平数组并选择子键 在本例中为 键 和 值 或者 foreach 始终是最快的方法 Array 0 gt Array key gt string val
  • 我应该使用排队系统来处理付款吗?

    我在用着Slim https www slimframework com和这个结合Stripe 的 PHP 库 https stripe com docs api php在我的应用程序中处理付款 一切都很好 但是直到最近 我在我的系统中发现
  • 使用 html5 分块上传文件

    我正在尝试使用 html5 的文件 API 分块上传文件 然后在服务器端用 php 重新组装它 我正在上传视频 但是当我在服务器端合并文件时 大小增加了 并且它变成了无效文件 请注意 以下 html5 代码仅适用于 chrome 浏览器 在
  • 在 PHP 命令行上显示完整的堆栈跟踪

    Problem 我的 PHP 堆栈跟踪缩写为 Stack trace 0 www html table app create php 128 SoapClient gt call call Array 1 www html table ap

随机推荐

  • 如何检查 Android 资源是否缺少默认值?

    我很好奇如何找到缺少默认值的 Android 资源 例如 可以定义corner radius in dimens sw600dp xml 没有定义它dimens xml 这将导致最小宽度小于 600 dp 的任何设备上运行时崩溃 在上面的例
  • 跳回之前在 Vim 中打开的文件

    在使用 Vim 时 我有时会想查看函数定义或结构定义 所以我会使用C 跳到它 但是 我遇到了一些问题 首先 我不知道如何轻松地跳回来 看来我之前所在的文件已关闭 现在我正在新的文件中 有没有办法跳回来 或者保留一堆打开的文件供我弹回或其他什
  • 如何在 Android 版 Kotlin 上使用“setTextColor(hexaValue)”,

    背景 在 Java 中 我可以使用 TextView 的标准十六进制值直接更改 TextView 的文本颜色 textView setTextColor 0xffffffff white textView setTextColor 0x00
  • 数据更改后 CursorLoader 不更新

    我创建了一个小应用程序 试图了解该应用程序的功能LoaderManager and CursorLoader 课程 我已经实施了LoaderCallbacks
  • 将同步方法包装到可以“等待”的异步方法中

    我有一个同步调用 context User Where u gt u UserID twitterId u Type UserType Show SingleOrDefault 我需要将其包装成一个异步的 我可以使用await关键词 我怎样
  • API网关和微服务通信

    我正在构建微服务架构 我需要沟通方面的帮助 API 网关与服务通信的最佳方法是什么 我的 API 网关将是graphql apollo服务器和服务将是REST APIs 我应该使用 REST 与服务或某些消息系统进行通信吗RabbitMQ
  • 显式脚本结束标记始终转换为自结束标记

    我正在使用 xslt 将 xml 转换为 aspx 文件 在 xslt 中 我有一个脚本标记来包含 jquery js 文件 为了使其能够与 IE 一起使用 脚本标签必须有一个显式的结束标签 由于某种原因 这不适用于下面的 xslt
  • socket.io 是如何工作的? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在使用 socket io 它的
  • DateTime 对象上的不同 timezone_types

    我在 Postgres 上使用 Doctrine2 在一张表中 我有两种不同的日期类型 birthdate date and created at datetimetz 两者都成为 DateTime 对象 但具有不同的timezone ty
  • 为什么 babel-node 不支持 REPL 中的模块加载?

    确定的是babel node 不支持在 REPL 中加载模块 https stackoverflow com questions 36197012 babel node es6 modules arent supported in the
  • 如何在Python中使用线性索引访问二维数组

    我在 MATLAB 中有一段代码 我尝试将该代码转换为 Python 在 MATLAB 中 我可以这样写 x 1 2 3 4 5 6 7 8 9 这只是一个 3x3 矩阵 那么如果我使用x 1 5 MATLAB首先会传递矩阵x转换为 1x9
  • 是否可以使用 Android Animator 为 DialogFragment 条目设置动画?

    我有一个DialogFragment我show 当用户单击我的应用程序上的按钮时 我想设置一个动画来使Z轴旋转DialogFragment当它启动时 即 3d 卡翻转动画 我已经成功使用了windowAnimationStyle和以下样式做
  • firstElementChild 在 Internet Explorer 7 中不起作用...我有什么选择?

    考虑下面的 JavaScript var v if this children length gt 0 v this firstElementChild value 这适用于现代版本的 FireFox 和 Chrome 但是this fir
  • C# 中阻止 Excel 更新屏幕

    我正在使用 VIsual C for Excel 2010 编写一个加载项 该加载项从我们的服务中检索一些数据 并将结果写入特定电子表格的单元格中 但是 我不希望 Excel 显示用值填充单元格 因为这需要花费大量时间 所以我尝试了下面的代
  • 如何使用 VBA 或宏将 Outlook 邮件消息复制到 Excel 中

    我是 VBA 和宏的新手 如果有人帮助我使用 VBA 代码和宏 那将会很有帮助 每天我都会收到大约 50 60 封邮件 其中包含一个标准主题 任务已完成 我已经创建了一条规则 将所有这些邮件移至特定文件夹 任务已完成 每天阅读所有 50 6
  • Matplotlib / PyPlot 中的快速实时绘图

    多年来 我一直在努力在 matplotlib 中实现高效的实时绘图 直到今天我仍然不满意 我想要一个redraw figure函数 实时 更新图形 当代码运行时 并且如果我在断点处停止 将显示最新的绘图 这是一些演示代码 import ti
  • IE 中的多个 CSS 过滤器

    我只是想知道是否可以使用 CSS 在 IE 中应用两个不同的过滤器 所以 我需要使用透明的 PNG 以及一些不透明度div 是否可以同时使用它们 我的透明制造商线如下所示 li item item texture background no
  • android - 包 org.apache.http 不存在 sdk 23 [重复]

    这个问题在这里已经有答案了 我升级到最新的sdk版本23 现在我的一些代码不再工作了 这是我之前用于获取 json 的课程 public class Spots tab1 json static String response null p
  • Angular2路由器通过带有Observable捕获404的Resolve提供Http数据服务

    在我的解析守卫中 我得到一个 Http Observable 以从特定的位置返回用户的 JSONid 我想捕获错误并重新路由到用户概述 如果id不存在 我见过用 Promise 解决这个问题的代码 但没有用 Observable 解决这个问
  • PHP 解析错误:语法错误,PHP 8.1 上的错误消息中出现意外标记“public”

    在 PHP 8 1 中运行时会触发上述错误消息 还没有发现任何明显的地方 即需要更改下面的代码以消除此错误消息 public function process button sid zen session name zen session