You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP HyperPay支付网关新增ApplePay选项 三元改if/else报500错误

错误原因

  • 原有三元运算符本身存在语法错误:原代码连续写了两个?符号,缺少对应分支的冒号分隔符,新增ApplePay后三元的分支逻辑完全混乱,哪怕不改写if/else也无法正确运行
  • 封装的paymentMethods函数存在多个语法/逻辑问题:
    • 函数内部无法直接访问外部的$request变量,PHP会抛出未定义变量错误
    • 每个分支中env()调用后多余的.属于无效的字符串拼接符,没有后续拼接内容直接触发语法解析错误
    • 所有分支都没有使用return返回对应值,函数调用后不会返回任何entityId内容
    • 没有兜底默认分支,如果payment_option不属于三个预设值,会返回空值导致支付请求失败
  • 如果不封装函数直接写if分支,PHP不允许在字符串拼接的表达式中直接插入if语句,也会触发语法错误

正确修改方案

方案1:if/else分支写法(可读性高,方便后续扩展)

先单独处理entityId的取值逻辑,再拼接请求参数:

// 先判断支付方式获取对应entityId
if($request->payment_option == 'hyperpay_mada'){
    $entityId = env('HYPERPAY_MADA_ENTITY');
} elseif($request->payment_option == 'hyperpay_visa'){
    $entityId = env('HYPERPAY_VISA_ENTITY');
} elseif($request->payment_option == 'hyperpay_applepay'){
    $entityId = env('HYPERPAY_APPLEPAY_ENTITY');
} else {
    // 兜底默认值,可根据业务需求调整
    $entityId = env('HYPERPAY_VISA_ENTITY');
}

$data = "entityId=" . $entityId .
        "&amount=" . str_replace(',','',number_format($order->grand_total,2)) .
        "&currency=SAR" .
        "&billing.city=" .$order->city.
        "&billing.state=" .$order->city.
        "&billing.postcode=0000".
        "&billing.country=SA".
        "&customer.givenName=" .$order->name.
        "&paymentType=DB" .
//            "&testMode=EXTERNAL" .
        "&customer.email=" . (!empty(session('shipping_info')['email']) && session('shipping_info')['email'] != 'null' && session('shipping_info')['email'] != null ? session('shipping_info')['email'] :'shopcustomer'. rand(10000, 99999).'@parduswear.com') .
        "&merchantTransactionId=" . uniqid();

方案2:数组映射写法(更简洁,新增支付方式无需修改分支逻辑)

// 维护支付方式和entityId的映射关系
$paymentEntityMap = [
    'hyperpay_mada' => env('HYPERPAY_MADA_ENTITY'),
    'hyperpay_visa' => env('HYPERPAY_VISA_ENTITY'),
    'hyperpay_applepay' => env('HYPERPAY_APPLEPAY_ENTITY'),
];
// 取值,不存在的支付方式走默认值
$entityId = $paymentEntityMap[$request->payment_option] ?? env('HYPERPAY_VISA_ENTITY');

// 后续$data拼接逻辑和方案1完全一致,直接使用$entityId即可

内容的提问来源于stack exchange,提问作者Abdulrahman Mushref

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:18:04