|
|
@@ -17,12 +17,14 @@ use SixShop\Payment\Contracts\PaymentResponse;
|
|
|
use SixShop\Payment\Entity\ExtensionPaymentEntity;
|
|
|
use SixShop\Payment\Enum\PaymentBizEnum;
|
|
|
use SixShop\Payment\Enum\PaymentStatusEnum;
|
|
|
+use SixShop\Payment\Event\PaymentSuccessEvent;
|
|
|
+use think\facade\Event;
|
|
|
|
|
|
class PaymentProvider implements PaymentProviderInterface
|
|
|
{
|
|
|
public function __construct(
|
|
|
private readonly Config $config,
|
|
|
- private readonly ExtensionPaymentEntity $extensionPaymentEntity
|
|
|
+ private readonly ExtensionPaymentEntity $extensionPaymentEntity,
|
|
|
)
|
|
|
{
|
|
|
}
|
|
|
@@ -72,12 +74,33 @@ class PaymentProvider implements PaymentProviderInterface
|
|
|
|
|
|
#[\Override] public function query(int $recordID): PaymentQueryResult
|
|
|
{
|
|
|
- // todo 接口查询支付状态
|
|
|
+ $payment = $this->extensionPaymentEntity->read($recordID);
|
|
|
+ if ($payment->status === PaymentStatusEnum::PENDING) {
|
|
|
+ $response = TransactionService::queryTrade($payment->transaction_id);
|
|
|
+ // INIT-初始化 CREATE-下单成功 SUCCESS-交易成功 FAIL-交易失败 DEAL-交易处理中 UNKNOWN-未知状态 CLOSE-订单关闭 PART_REFUND-部分退款 REFUND-全部退款(或订单被撤销)
|
|
|
+ $payment->status = match ($response->trade_state) {
|
|
|
+ 'DEAL' => PaymentStatusEnum::PENDING,
|
|
|
+ 'SUCCESS' => PaymentStatusEnum::SUCCESS,
|
|
|
+ 'FAIL' => PaymentStatusEnum::FAIL,
|
|
|
+ 'CLOSE' => PaymentStatusEnum::CLOSED,
|
|
|
+ default => PaymentStatusEnum::PENDING,
|
|
|
+ };
|
|
|
+ if ($payment->status !== PaymentStatusEnum::PENDING) {
|
|
|
+ $payment->status_desc = $response->trade_state_desc;
|
|
|
+ if ($payment->status === PaymentStatusEnum::SUCCESS) {
|
|
|
+ $payment->payment_time = time();
|
|
|
+ $payment->save();
|
|
|
+ Event::trigger(new PaymentSuccessEvent($payment['order_sn'], self::PAYMENT_TYPE, $payment->toArray(), $payment->biz_type));
|
|
|
+ } else {
|
|
|
+ $payment->save();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
return new PaymentQueryResult(
|
|
|
- orderNo: '',
|
|
|
- status: PaymentStatusEnum::PENDING,
|
|
|
- amount: 0,
|
|
|
- raw: []
|
|
|
+ orderNo: $payment['out_trade_no'],
|
|
|
+ status: $payment['status'],
|
|
|
+ amount: (float)$payment['amount'],
|
|
|
+ raw: $payment->toArray()
|
|
|
);
|
|
|
}
|
|
|
|