PaymentCompany.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace App\Http\Controllers\admin;
  3. use App\Constants\HttpStatus;
  4. use App\Http\Controllers\Controller;
  5. use App\Services\Payment\PaymentProviderCatalog;
  6. use App\Services\Payment\PaymentProviderConfig;
  7. use App\Services\Payment\PaymentProviderService;
  8. use Illuminate\Database\Eloquent\ModelNotFoundException;
  9. use Illuminate\Validation\Rule;
  10. use Illuminate\Validation\ValidationException;
  11. class PaymentCompany extends Controller
  12. {
  13. public function list(PaymentProviderService $service)
  14. {
  15. return $this->run(function () use ($service) {
  16. $params = request()->validate([
  17. 'page' => ['nullable', 'integer', 'min:1'], 'limit' => ['nullable', 'integer', 'min:1', 'max:100'],
  18. 'payment_company' => ['nullable', Rule::in(PaymentProviderCatalog::codes())],
  19. 'status' => ['nullable', 'integer', 'in:0,1'], 'data_type' => ['nullable', 'integer', 'in:1,2'],
  20. ]);
  21. return $service->listing($params);
  22. });
  23. }
  24. public function status(PaymentProviderService $service)
  25. {
  26. return $this->run(function () use ($service) {
  27. $params = request()->validate([
  28. 'payment_company' => ['required', Rule::in(PaymentProviderCatalog::codes())],
  29. 'status' => ['required', 'integer', 'in:0,1'],
  30. ]);
  31. $service->setStatus($params['payment_company'], (int)$params['status']);
  32. return [];
  33. });
  34. }
  35. public function config(PaymentProviderConfig $config)
  36. {
  37. return $this->run(function () use ($config) {
  38. $params = request()->validate([
  39. 'payment_company' => ['required', Rule::in(PaymentProviderCatalog::codes())],
  40. ]);
  41. return $config->show($params['payment_company']);
  42. });
  43. }
  44. public function saveConfig(PaymentProviderConfig $config)
  45. {
  46. return $this->run(function () use ($config) {
  47. $params = request()->validate([
  48. 'payment_company' => ['required', Rule::in(PaymentProviderCatalog::codes())],
  49. 'config' => ['required', 'array'],
  50. ]);
  51. return $config->save($params['payment_company'], $params['config']);
  52. });
  53. }
  54. private function run(callable $callback)
  55. {
  56. try {
  57. return $this->success($callback());
  58. } catch (ValidationException $e) {
  59. return $this->error(HttpStatus::CUSTOM_ERROR, $e->validator->errors()->first());
  60. } catch (ModelNotFoundException $e) {
  61. return $this->error(HttpStatus::CUSTOM_ERROR, '支付公司不存在');
  62. } catch (\PDOException $e) {
  63. report($e);
  64. return $this->error(HttpStatus::CUSTOM_ERROR, '支付公司操作失败,请稍后重试');
  65. } catch (\InvalidArgumentException | \RuntimeException $e) {
  66. return $this->error(HttpStatus::CUSTOM_ERROR, $e->getMessage());
  67. }
  68. }
  69. }