WechatMiniProgramLogic.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | saiadmin [ saiadmin快速开发框架 ]
  4. // +----------------------------------------------------------------------
  5. namespace plugin\saiadmin\app\logic\miniProgram;
  6. use plugin\saiadmin\app\model\miniProgram\WechatMiniProgram;
  7. use plugin\saiadmin\basic\think\BaseLogic;
  8. use plugin\saiadmin\exception\ApiException;
  9. /**
  10. * 微信小程序绑定逻辑层
  11. */
  12. class WechatMiniProgramLogic extends BaseLogic
  13. {
  14. private const CONFIG_FIELDS = [
  15. 'mini_program_name',
  16. 'appid',
  17. 'appsecret',
  18. 'original_id',
  19. 'mchid',
  20. 'api_key',
  21. 'apiv3_key',
  22. 'apiclient_cert',
  23. 'apiclient_key',
  24. 'certificate_serial_no',
  25. 'service_id',
  26. ];
  27. public function __construct()
  28. {
  29. $this->model = new WechatMiniProgram();
  30. }
  31. public function add(array $data): mixed
  32. {
  33. $data = $this->normalizeConfig($data);
  34. $this->ensureAppidAvailable($data['appid']);
  35. return parent::add($data);
  36. }
  37. public function edit($id, array $data): mixed
  38. {
  39. $data = $this->normalizeConfig($data);
  40. $this->ensureAppidAvailable($data['appid'], (int) $id);
  41. unset(
  42. $data['id'],
  43. $data['partner_id'],
  44. $data['partner_nickname'],
  45. $data['partner_account'],
  46. $data['partner_name'],
  47. $data['created_by'],
  48. $data['create_time']
  49. );
  50. return parent::edit($id, $data);
  51. }
  52. private function normalizeConfig(array $data): array
  53. {
  54. foreach (self::CONFIG_FIELDS as $field) {
  55. if (array_key_exists($field, $data) && is_string($data[$field])) {
  56. $data[$field] = trim($data[$field]);
  57. }
  58. }
  59. return $data;
  60. }
  61. private function ensureAppidAvailable(string $appid, ?int $ignoreId = null): void
  62. {
  63. $query = $this->model->where('appid', '=', $appid);
  64. if ($ignoreId !== null) {
  65. $query->where('id', '<>', $ignoreId);
  66. }
  67. if ($query->count() > 0) {
  68. throw new ApiException('该小程序 APPID 已经绑定');
  69. }
  70. }
  71. }