137 lines
3.8 KiB
PHP
137 lines
3.8 KiB
PHP
<?php
|
||
|
||
namespace App\Console\Commands;
|
||
|
||
use Illuminate\Console\Command;
|
||
use App\Models\ConsultationRecords;
|
||
use App\Models\PayLog;
|
||
|
||
class InterruptCall extends Command
|
||
{
|
||
/**
|
||
* The name and signature of the console command.
|
||
*
|
||
* @var string
|
||
*/
|
||
protected $signature = 'InterruptCall';
|
||
|
||
/**
|
||
* 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 mixed
|
||
*/
|
||
public function handle()
|
||
{
|
||
|
||
$result = ConsultationRecords::where('pay_status',1)->where('status',1)->orderBy('id','desc')->get();
|
||
foreach ($result as $key => $value) {
|
||
$this->InterruptCall($value);
|
||
}
|
||
}
|
||
|
||
//主动挂断通话
|
||
|
||
public function InterruptCall($request)
|
||
{
|
||
//参数缺失
|
||
if(!$request->recorder_id||!$request->trade_no){
|
||
return false;
|
||
}
|
||
$pay = new PayLog();
|
||
$pay->type = 'InterruptCall';
|
||
$pay->trade_no= $request->trade_no;
|
||
$time = time()-strtotime($request->begin_time);
|
||
$Remaining_time = $request->duration*60 -$time;
|
||
|
||
if($Remaining_time>0){
|
||
$pay->remark = '剩余时间'. $Remaining_time.'秒';
|
||
$pay->save();
|
||
return false;
|
||
}
|
||
$request->Remaining_duration = 0;
|
||
$request->save();
|
||
$data = [
|
||
// 以下代码以ax为例,选填参数以实际需求,对应填写
|
||
"corp_key" => "7574596477198833",//企业账户key 必填
|
||
"request_id" => $request->trade_no,// 企业每个请求Id唯一,如果是同一个请求重复提交,则Id保持相同 必填
|
||
"recorder_id" => $request->recorder_id,//企业本次通话唯一标识
|
||
];
|
||
$data['ts'] = time();
|
||
$data['sign'] = $this->sign($data, '8uM2Mxe7EaCU8XXW4FHjaq6m8N3794Xv');//密钥信息
|
||
// print_r(json_encode($data));
|
||
$url = 'http://124.160.62.210:9092/ykt-open/hold/hangup2';//请求地址
|
||
$curl = curl_init($url);
|
||
|
||
curl_setopt_array($curl, array(
|
||
CURLOPT_RETURNTRANSFER => true,
|
||
CURLOPT_ENCODING => "",
|
||
CURLOPT_MAXREDIRS => 10,
|
||
CURLOPT_TIMEOUT => 30,
|
||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
|
||
CURLOPT_CUSTOMREQUEST => "POST",
|
||
CURLOPT_POSTFIELDS => json_encode($data),
|
||
CURLOPT_HTTPHEADER => array(
|
||
"Accept: */*",
|
||
"Accept-Encoding: gzip, deflate",
|
||
"Cache-Control: no-cache",
|
||
"Connection: keep-alive",
|
||
"Content-Type: application/json;charset=utf-8",
|
||
"cache-control: no-cache"
|
||
),
|
||
));
|
||
|
||
$response = curl_exec($curl);
|
||
$err = curl_error($curl);
|
||
curl_close($curl);
|
||
if ($err) {
|
||
$pay->remark = '错误:'.$err;
|
||
$pay->save();
|
||
return false;
|
||
} else {
|
||
$response = json_decode($response,true);
|
||
$pay->remark = $response;
|
||
$pay->save();
|
||
return true;
|
||
}
|
||
|
||
}
|
||
|
||
function sign($data, $key){
|
||
if (isset($data['sign'])) {
|
||
unset($data['sign']);
|
||
}
|
||
$data_str = $this->signStr($data) . '&corp_secret=' . $key;
|
||
return md5($data_str);
|
||
}
|
||
|
||
function signStr($data){
|
||
|
||
$array_keys = array_keys($data);
|
||
asort($array_keys);
|
||
$newData = [];
|
||
foreach ($array_keys as $v) {
|
||
if ($v && !empty($data[$v])) {
|
||
$newData[] = "{$v}={$data[$v]}";
|
||
}
|
||
}
|
||
return implode('&', $newData);
|
||
}
|
||
}
|