|
|
@@ -30,6 +30,14 @@ class CustomRechargeClass extends BaseClass
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 客户向供货商线上充值:支付渠道回调入账。
|
|
|
+ *
|
|
|
+ * 职责:校验订单与金额、加锁入账、写余额变动与 FIFO 销账。
|
|
|
+ * 入参:payWay 支付方式;customRechargeSn 充值单号;totalFee 回调金额;attach/transactionId 渠道附加信息。
|
|
|
+ * 返回:true 表示已处理或重复回调幂等成功;异常单仍 util::fail。
|
|
|
+ * 关键边界:已 payStatus=1 的重复通知只记日志并 return,避免 util::fail 导致渠道收不到 SUCCESS 而反复重试。
|
|
|
+ */
|
|
|
public static function thirdPay($payWay, $customRechargeSn, $totalFee, $attach, $transactionId)
|
|
|
{
|
|
|
$customRecharge = self::getByCondition(['orderSn' => $customRechargeSn], true);
|
|
|
@@ -45,15 +53,14 @@ class CustomRechargeClass extends BaseClass
|
|
|
Yii::info($msg);
|
|
|
util::fail($msg);
|
|
|
}
|
|
|
- if ($customRecharge->payStatus == 1) {
|
|
|
- noticeUtil::push("充值订单,支付回调错误,已经充值过了 orderSn:{$customRechargeSn}", '15280215347');
|
|
|
- $msg = "充值订单,支付回调错误,已经充值过了 orderSn:{$customRechargeSn}";
|
|
|
- Yii::info($msg);
|
|
|
- util::fail($msg);
|
|
|
- }
|
|
|
$amount = $totalFee;
|
|
|
$id = $customRecharge->id;
|
|
|
$customRecharge = self::getLockById($id);
|
|
|
+ // 加锁后再判已付:防并发双入账,重复回调静默成功以便 NoticeController 回 SUCCESS
|
|
|
+ if ((int)$customRecharge->payStatus === 1) {
|
|
|
+ Yii::info("充值订单重复支付回调,已处理过,幂等跳过 orderSn:{$customRechargeSn}");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
$payDate = date("Y-m-d H:i:s");
|
|
|
$customRecharge->payTime = $payDate;
|
|
|
$customRecharge->payWay = $payWay;
|
|
|
@@ -179,6 +186,7 @@ class CustomRechargeClass extends BaseClass
|
|
|
);
|
|
|
}
|
|
|
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
/**
|