作者 ZhengBing He

ding

<?php
namespace App\Console\Commands;
use App\Models\WorkOrder\WorkOrderLog;
use App\Services\DingTalkService;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Http;
class WorkOrderDing extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'workorder:ding';
/**
* The console command description.
*
* @var string
*/
protected $description = '售后工单钉钉通知';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
while (true) {
try {
$log = WorkOrderLog::where('ding', 0)->first();
if (!$log) {
sleep(3);
continue;
}
$mobile = $log->manager->mobile;
$response = Http::withBasicAuth(
env('DINGDING_BASIC_USER'),
env('DINGDING_BASIC_PASS')
)->get('https://oa.cmer.com/api/dingding/user/' . $mobile);
if ($response->status() == 200) {
$userid = $response->json()['data']['userid'];
$text = "**您有新的售后工单**<br>";
$text .= "工单ID:{$log->work_order_id}<br>";
$text .= "工单类型:{$log->workOrder->product}<br>";
$text .= "项目:{$log->workOrder->project->title}<br>";
$ding = new DingTalkService();
$resp = $ding->danliao(json_encode([
'text' => $text,
'title' => '售后工单通知',
]), [$userid]);
$log->ding = 1;
}else
$log->ding = 2;
$log->save();
}catch (\Exception $exception){
echo date('Y-m-d H:i:s')." ".$exception->getMessage()."\n";
break;
}
}
}
}
... ...
<?php
namespace App\Services;
use App\DingDepartment;
use App\DingUser;
/**
* 文档 https://apihub.cmer.com/docs/cmerdingtalk.html
*/
class DingTalkService
{
protected $appKey;
protected $appSecret;
protected $robotCode;
protected $headers = [];
protected $bashUrl = 'https://api.cmer.com';
public function __construct()
{
$this->appKey = env('DING_TALK_APP_KEY');
$this->appSecret = env('DING_TALK_APP_SECRET');
$this->robotCode = env('DING_TALK_APP_KEY');
$this->headers = [
"Content-Type" => "application/json",
"apikey" => "UkzZljFv83Z2qBi5YR1o3f2otAVWtug6",
"X-CmerApi-Host" => "cmerdingtalk.p.cmer.com",
];
}
/** 发起请求 */
public function send_request(string $method, string $url, array $payload = [], array $params = [])
{
$client = new \GuzzleHttp\Client();
$options = [
'headers' => $this->headers,
'json' => $payload
];
if (!empty($params))
$options['query'] = $params;
$response = $client->request($method, $url, $options);
return $response;
}
/** 批量发送私聊消息 */
public function danliao(string $text, array $user_ids)
{
$endpoint = '/v1/danliao';
$payload = [
"appKey" => $this->appKey,
"appSecret" => $this->appSecret,
"robotCode" => $this->robotCode,
"msg_param" => $text,
"user_ids" => $user_ids
];
return $this->send_request('POST', $this->bashUrl . $endpoint, $payload);
}
/** 批量发送Ding */
public function danliao_ding(string $text, array $user_ids)
{
$endpoint = '/v1/danliao_ding';
$payload = [
"appKey" => $this->appKey,
"appSecret" => $this->appSecret,
"robotCode" => $this->robotCode,
"content" => $text,
"receiver_user_id_list" => $user_ids
];
return $this->send_request('POST', $this->bashUrl . $endpoint, $payload);
}
}
... ...