AlipayMiniProgramLogic.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | saiadmin [ saiadmin快速开发框架 ]
  4. // +----------------------------------------------------------------------
  5. namespace plugin\saiadmin\app\logic\miniProgram;
  6. use plugin\saiadmin\app\model\miniProgram\AlipayMiniProgram;
  7. use plugin\saiadmin\basic\think\BaseLogic;
  8. use plugin\saiadmin\exception\ApiException;
  9. /**
  10. * 支付宝小程序配置逻辑层
  11. */
  12. class AlipayMiniProgramLogic extends BaseLogic
  13. {
  14. private const CONFIG_FIELDS = [
  15. 'mini_program_name',
  16. 'appid',
  17. 'app_private_key',
  18. 'alipay_public_key',
  19. 'aes_key',
  20. 'credit_service_id',
  21. ];
  22. public function __construct()
  23. {
  24. $this->model = new AlipayMiniProgram();
  25. }
  26. public function add(array $data): mixed
  27. {
  28. $data = $this->normalizeConfig($data);
  29. $this->ensureAppidAvailable($data['appid']);
  30. return parent::add($data);
  31. }
  32. public function edit($id, array $data): mixed
  33. {
  34. $data = $this->normalizeConfig($data);
  35. $this->ensureAppidAvailable($data['appid'], (int) $id);
  36. unset($data['id'], $data['partner_id'], $data['created_by'], $data['create_time']);
  37. return parent::edit($id, $data);
  38. }
  39. private function normalizeConfig(array $data): array
  40. {
  41. foreach (self::CONFIG_FIELDS as $field) {
  42. if (array_key_exists($field, $data) && is_string($data[$field])) {
  43. $data[$field] = trim($data[$field]);
  44. }
  45. }
  46. return $data;
  47. }
  48. private function ensureAppidAvailable(string $appid, ?int $ignoreId = null): void
  49. {
  50. $query = $this->model->where('appid', '=', $appid);
  51. if ($ignoreId !== null) {
  52. $query->where('id', '<>', $ignoreId);
  53. }
  54. if ($query->count() > 0) {
  55. throw new ApiException('该支付宝小程序 APPID 已经绑定');
  56. }
  57. }
  58. }