downloadZip.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace App\Admin\Actions\Device;
  3. use App\Model\DeviceInfo;
  4. use App\Model\SystemConfig;
  5. use App\Server\DeviceServer;
  6. use EasyWeChat\Factory;
  7. use Encore\Admin\Actions\Action;
  8. use Illuminate\Http\Request;
  9. class downloadZip extends Action
  10. {
  11. protected $selector = '.downloadZip';
  12. public function handle(Request $request)
  13. {
  14. // $request ...
  15. $devices = DeviceInfo::all(['device_name','id']);
  16. $result = [];
  17. $zip_file = public_path('qrcode.zip');
  18. $zip = new \ZipArchive();
  19. $zip->open($zip_file, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);
  20. foreach ($devices as $device){
  21. $r = $this->generateImg($device->id,$device->device_city);
  22. if ($r)
  23. {
  24. $str = str_replace(['/','\\',':','*','"','<','>','|','?'],'_',$device->device_name);
  25. $zip->addFile($r, $str.".png");
  26. }
  27. }
  28. $zip->close();
  29. return $this->response()->download('/qrcode.zip');
  30. }
  31. public function generateImg($device_id,$device_city)
  32. {
  33. $wechat_app = SystemConfig::get('wechat_config');
  34. if (!$wechat_app || !isset($wechat_app['appId']) || !isset($wechat_app['appSecret'])) {
  35. return false;
  36. }
  37. $config = [
  38. 'app_id' => $wechat_app['appId'],
  39. 'secret' => $wechat_app['appSecret'],
  40. 'response_type' => 'array'
  41. ];
  42. $app = Factory::miniProgram($config);
  43. try{
  44. $response = $app->app_code->getQrCode('pages/qrcode/qrcode?id='.$device_id.'&community='.$device_city,300);
  45. }catch (\Exception $exception){
  46. return false;
  47. }
  48. $filename = "error";
  49. if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
  50. $filename = $response->saveAs(public_path('upload/DeviceQRCODE'), request('id').'.jpg');
  51. }
  52. if ($filename == "error")
  53. return false;
  54. return public_path("upload/DeviceQRCODE/{$filename}");
  55. }
  56. public function html()
  57. {
  58. return <<<HTML
  59. <a href="javascript:$.admin.toastr.info('已经提交请求,处理完成会自动下载,请稍等!');" class="btn btn-sm btn-success downloadZip" style="margin-right: 10px;"><i class="fa fa-download"></i>&nbsp;下载设备图片</a>
  60. HTML;
  61. }
  62. }