PaymentManager.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. declare(strict_types=1);
  3. namespace SixShop\Payment;
  4. use SixShop\Payment\Contracts\PaymentProviderInterface;
  5. use SixShop\Payment\Contracts\PaymentQueryResult;
  6. use SixShop\Payment\Contracts\PaymentRefundRequest;
  7. use SixShop\Payment\Contracts\PaymentRefundResult;
  8. use SixShop\Payment\Contracts\PaymentResponse;
  9. use SixShop\Payment\Enum\PaymentBizEnum;
  10. use SixShop\Payment\Event\BeforePayEvent;
  11. use SixShop\Payment\Event\GatheringPaymentEvent;
  12. use SixShop\System\ExtensionManager;
  13. use SixShop\System\Model\ExtensionModel;
  14. use think\facade\Event;
  15. readonly class PaymentManager
  16. {
  17. public function __construct(
  18. private ExtensionManager $extensionManager,
  19. ) {
  20. }
  21. /**
  22. * 获取所有支付方式
  23. *
  24. * @return PaymentInfo[]
  25. */
  26. public function getAllPayment(): array
  27. {
  28. /* @var PaymentInfo[] $paymentList */
  29. $paymentList = Event::trigger(GatheringPaymentEvent::class);
  30. $paymentIDs = array_column($paymentList, 'id');
  31. $statusMap = ExtensionModel::whereIn('id', $paymentIDs)->column(['status','id'], 'id', true);
  32. $payTypeList = extension_config('payment', 'pay_type') ?? [];
  33. foreach ($paymentList as $payment) {
  34. $payment->status = $statusMap[$payment->id]['status'];
  35. $payment->enabled = in_array($payment->id, $payTypeList, true);
  36. }
  37. return $paymentList;
  38. }
  39. /**
  40. * 创建支付订单
  41. */
  42. public function create(string $paymentID, array $order, PaymentBizEnum $bizType = PaymentBizEnum::ORDER_PAY): PaymentResponse
  43. {
  44. Event::trigger(new BeforePayEvent($order, $paymentID, $bizType));
  45. return $this->getPaymentProvider($paymentID)->create($order, $bizType);
  46. }
  47. /**
  48. * 查询支付订单
  49. */
  50. public function query(string $paymentID, $recordID): PaymentQueryResult
  51. {
  52. return $this->getPaymentProvider($paymentID)->query($recordID);
  53. }
  54. /**
  55. * 退款
  56. */
  57. public function refund(string $paymentID, int $recordID, PaymentRefundRequest $param): PaymentRefundResult
  58. {
  59. return $this->getPaymentProvider($paymentID)->refund($recordID, $param);
  60. }
  61. /**
  62. * 查询退款
  63. */
  64. public function refundQuery(string $paymentID, int $refundID): PaymentRefundResult
  65. {
  66. return $this->getPaymentProvider($paymentID)->refundQuery($refundID);
  67. }
  68. public function getPaymentProvider(string $paymentID): PaymentProviderInterface
  69. {
  70. $extension = $this->extensionManager->getExtension($paymentID);
  71. return $extension->getPaymentProvider();
  72. }
  73. }