NotifyService.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <?php
  2. declare(strict_types=1);
  3. namespace SixShop\Lakala\Service;
  4. use SixShop\Lakala\Config;
  5. use SixShop\Lakala\OpenAPISDK\V3\Api\LakalaNotifyApi;
  6. use SixShop\Lakala\OpenAPISDK\V3\Model\ModelTradeNotify;
  7. use SixShop\Lakala\PaymentProvider;
  8. use SixShop\Payment\Enum\PaymentStatusEnum;
  9. use SixShop\Payment\Model\ExtensionPaymentModel;
  10. use think\facade\Log;
  11. use function SixShop\Core\error_response;
  12. use function SixShop\Core\throw_logic_exception;
  13. class NotifyService
  14. {
  15. private LakalaNotifyApi $notifyApi;
  16. public function __construct(private Config $config, private PaymentProvider $paymentProvider)
  17. {
  18. $this->notifyApi = new LakalaNotifyApi($this->config->getV3Config());
  19. }
  20. public function notify(): void
  21. {
  22. $notify = $this->notifyApi->notiApi();
  23. Log::debug('lakala notify '. json_encode($notify));
  24. $inBody = $notify->getOriginalText();
  25. if (!json_validate($inBody)) {
  26. throw_logic_exception('lakala notify json error');
  27. }
  28. $bodyArr = json_decode($inBody, true);
  29. $payment = ExtensionPaymentModel::where(['transaction_id' => $bodyArr['trade_no']])->findOrEmpty();
  30. if ($payment->isEmpty()) {
  31. throw_logic_exception('lakala notify transaction_id error');
  32. }
  33. if ($payment->status != PaymentStatusEnum::PENDING) {
  34. throw_logic_exception('lakala notify transaction_id status error');
  35. }
  36. $this->paymentProvider->query($payment->id);
  37. Log::debug('lakala notified success {transaction_id}', ['transaction_id' => $payment->transaction_id]);
  38. }
  39. }