AlipayMiniProgramController.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | saiadmin [ saiadmin快速开发框架 ]
  4. // +----------------------------------------------------------------------
  5. namespace plugin\saiadmin\app\controller\miniProgram;
  6. use plugin\saiadmin\app\logic\miniProgram\AlipayMiniProgramLogic;
  7. use plugin\saiadmin\app\validate\miniProgram\AlipayMiniProgramValidate;
  8. use plugin\saiadmin\basic\BaseController;
  9. use plugin\saiadmin\exception\ApiException;
  10. use plugin\saiadmin\service\Permission;
  11. use support\Request;
  12. use support\Response;
  13. /**
  14. * 支付宝小程序配置控制器
  15. */
  16. class AlipayMiniProgramController extends BaseController
  17. {
  18. private const LIST_FIELDS = [
  19. 'id',
  20. 'partner_id',
  21. 'mini_program_name',
  22. 'appid',
  23. 'credit_service_id',
  24. 'create_time',
  25. 'update_time',
  26. ];
  27. public function __construct()
  28. {
  29. $this->logic = new AlipayMiniProgramLogic();
  30. $this->validate = new AlipayMiniProgramValidate();
  31. parent::__construct();
  32. }
  33. #[Permission('支付宝小程序列表', 'core:miniProgram:alipay:index')]
  34. public function index(Request $request): Response
  35. {
  36. $where = $request->more([
  37. ['mini_program_name', ''],
  38. ['appid', ''],
  39. ]);
  40. $query = $this->logic->search($where)->field(self::LIST_FIELDS);
  41. if (!$this->isSuperAdmin()) {
  42. $query->where('partner_id', '=', $this->adminId);
  43. }
  44. return $this->success($this->logic->getList($query));
  45. }
  46. #[Permission('支付宝小程序详情', 'core:miniProgram:alipay:read')]
  47. public function read(Request $request): Response
  48. {
  49. $id = (int) $request->input('id', 0);
  50. if ($id <= 0) {
  51. return $this->fail('参数错误');
  52. }
  53. return $this->success($this->readAccessibleRecord($id));
  54. }
  55. #[Permission('绑定支付宝小程序', 'core:miniProgram:alipay:save')]
  56. public function save(Request $request): Response
  57. {
  58. $data = $request->post();
  59. $this->validate('save', $data);
  60. $data['partner_id'] = $this->adminId;
  61. $id = $this->logic->add($data);
  62. return $id ? $this->success(['id' => $id], '绑定成功') : $this->fail('绑定失败');
  63. }
  64. #[Permission('编辑支付宝小程序', 'core:miniProgram:alipay:update')]
  65. public function update(Request $request): Response
  66. {
  67. $data = $request->post();
  68. $id = (int) ($data['id'] ?? 0);
  69. if ($id <= 0) {
  70. return $this->fail('参数错误');
  71. }
  72. $this->readAccessibleRecord($id);
  73. $this->validate('update', $data);
  74. return $this->logic->edit($id, $data) !== false
  75. ? $this->success([], '修改成功')
  76. : $this->fail('修改失败');
  77. }
  78. #[Permission('删除支付宝小程序', 'core:miniProgram:alipay:destroy')]
  79. public function destroy(Request $request): Response
  80. {
  81. $ids = array_values(array_filter(array_map('intval', (array) $request->post('ids', []))));
  82. if ($ids === []) {
  83. return $this->fail('请选择要删除的数据');
  84. }
  85. foreach ($ids as $id) {
  86. $this->readAccessibleRecord($id);
  87. }
  88. return $this->logic->destroy($ids) ? $this->success([], '删除成功') : $this->fail('删除失败');
  89. }
  90. private function readAccessibleRecord(int $id): array
  91. {
  92. $model = $this->logic->read($id);
  93. $data = is_array($model) ? $model : $model->toArray();
  94. if (!$this->isSuperAdmin() && (int) ($data['partner_id'] ?? 0) !== $this->adminId) {
  95. throw new ApiException('无权访问该支付宝小程序配置');
  96. }
  97. return $data;
  98. }
  99. private function isSuperAdmin(): bool
  100. {
  101. return (int) ($this->adminInfo['is_super'] ?? 0) === 1;
  102. }
  103. }