所以我检查了if语句中的两个条件:
if ($amount !== $payment->price || strtolower($currency) !== strtolower($payment['currency'])) {
Log::info($amount);
Log::info($payment->price);
Log::info(strtolower($currency));
Log::info(strtolower($payment['currency']));
$payment->status = Payment::STATUS_NEEDS_ATTENTION;
$payment->message = Payment::PAYMENT_ERROR;
} else {
$payment->message = Payment::PAYMENT_ERROR;
$payment->status = Payment::STATUS_PAID;
}
我不明白为什么它通过了if
条件这就是我得到的Log::info
,我看到它不应该通过if
条件它应该进入else
[2021-09-30 17:23:31] local.INFO: 1397
[2021-09-30 17:23:31] local.INFO: 1397
[2021-09-30 17:23:31] local.INFO: eur
[2021-09-30 17:23:31] local.INFO: eur
我不明白为什么它满足if条件而不满足其他条件?
可能的解释可能在于您使用的!==
运算符。它们的数据类型可能不同。你可以尝试登录他们的PHPgettype()
,或者var_dump()
来检查他们的数据类型。
为什么w会是的原因吗?不同的包用于支付和购物车可能返回price
作为string
,不同的编码格式,例如
此外,请记住比较2个float
值可能不会返回预期的结果。请确保将它们四舍五入到可接受的范围内,这样可以接受不准确