WechatTemplateMessageJob.php 2.35 KB
<?php

namespace App\Jobs;

use App\Helpers\ServiceHelper;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use function array_key_exists;

class WechatTemplateMessageJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

//    private const API_URI = 'cgi-bin/message/template/send';

    /**
     * @var array<string,mixed>
     */
    private array $data;

    /**
     * Create a new job instance.
     *
     * @param string              $openId
     * @param string              $template
     * @param array<string,mixed> $data
     * @param string              $url
     * @param string              $page
     */
    public function __construct(string $openId, string $template, array $data = [], string $url = '', string $page = '')
    {
        $this->data = ['openId' => $openId, 'template' => $template, 'data' => $this->formatData($data), 'page' => $page, 'url' => $url];
    }

    /**
     * Execute the job.
     *
     * @return void
     * @throws \JsonException
     */
    public function handle(): void
    {
        //Access_Token 问题,暂时访问Admin服务推送接口
        ServiceHelper::sendWechatOfficial($this->data);
    }

    /**
     * @param array<string,mixed> $data
     * @return array<string,array<string,string>>
     */
    protected function formatData(array $data): array
    {
        $formatted = [];

        foreach ($data as $key => $value) {
            if (is_array($value)) {
                if (array_key_exists('value', $value)) {
                    $formatted[$key] = $value;
                    continue;
                }

                if (count($value) >= 2) {
                    $value = [
                        'value' => $value[0],
                        'color' => $value[1],
                    ];
                }
            } else {
                $value = ['value' => (string)$value,];
            }

            $formatted[$key] = $value;
        }

        return $formatted;
    }

    /**
     * @param string $page
     * @return array<string,string>
     */
    protected function formatMiniPage(string $page): array
    {
        return ['appid' => config('easywechat.mini_app.default.app_id'), 'pagepath' => $page];
    }
}