You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
5.2 KiB

1 year ago
<?php
namespace App\Repositories;
3 days ago
use App\Exceptions\YuanhePackInfoException;
1 year ago
use App\Models\AppointmentConfig;
1 year ago
use App\Models\Course;
1 year ago
use App\Models\ThirdAppointmentLog;
1 year ago
use App\Models\User;
1 year ago
/**
* 元禾控股
*/
class YuanheRepository
{
public $baseUrl;
public $customerId;
public $authKey;
3 days ago
public $lastRequestTimestamp;
1 year ago
public function __construct()
{
$this->baseUrl = env('YUANHE_BASE_URL');
$this->customerId = env('YUANHE_CUSTOMERID');
$this->authKey = env('YUANHE_AUTHKEY');
1 year ago
}
public function getHeader()
{
3 days ago
$timestamp = (string) floor(microtime(true) * 1000);
$this->lastRequestTimestamp = $timestamp;
1 year ago
$token = $this->customerId . $timestamp . $this->authKey;
$token = md5($token);
1 year ago
$token = strtoupper($token);
1 year ago
$header[] = 'Content-Type: application/json';
1 year ago
$header[] = "customerId: {$this->customerId}";
$header[] = "timestamp: {$timestamp}";
$header[] = "token: {$token}";
return $header;
}
/**
* 公司查询
*/
public function companyInfo($params)
{
1 year ago
$params = json_encode($params);
1 year ago
$url = $this->baseUrl . '/master-service/openapi/businessCollege/enterprise/info';
$header = $this->getHeader();
try {
$result = httpCurl($url, 'POST', $params, $header);
$result = json_decode($result, true);
if ($result['code'] == 200) {
return $result['data'];
} else {
return false;
}
} catch (\Exception $e) {
return false;
}
}
1 year ago
/**
* 公司模糊查询
*/
public function search($params)
{
$url = $this->baseUrl . '/master-service/openapi/businessCollege/enterprise/search';
$header = $this->getHeader();
try {
$result = httpCurl($url, 'GET', $params, $header);
$result = json_decode($result, true);
if ($result['code'] == 200) {
return $result['data'];
} else {
10 months ago
return [];
1 year ago
}
} catch (\Exception $e) {
10 months ago
return [];
1 year ago
}
}
3 days ago
/**
* 查询企业户聚合信息。
*
* 此方法保留元禾响应外层的 code/data/msg/status供调用方判定一次
* 企业户调用是否明确成功;不要像 companyInfo 一样仅返回 data。
*/
public function enterprisePackInfo(array $params): array
{
$url = $this->baseUrl . '/master-service/openapi/businessCollege/enterprise/packInfo';
$header = $this->getHeader();
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params, JSON_UNESCAPED_UNICODE));
if (stripos($url, 'https://') !== false) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSLVERSION, 1);
}
$raw = curl_exec($ch);
$curlError = curl_error($ch);
$httpStatus = (int) curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE) ?: null;
curl_close($ch);
if ($raw === false) {
throw new YuanhePackInfoException(
'元禾 packInfo 网络调用失败:' . ($curlError ?: '未知 cURL 错误'),
$httpStatus ?: null,
$contentType
);
}
$result = json_decode($raw, true);
if (!is_array($result)) {
throw new YuanhePackInfoException(
'元禾 packInfo 响应不是有效 JSON 对象:' . json_last_error_msg(),
$httpStatus ?: null,
$contentType,
$raw
);
}
return $result;
}
1 year ago
/**
* 数据推送
*/
11 months ago
public function pushCourses(Course $course, User $user,&$out)
1 year ago
{
if (empty($user->company)) {
return false;
}
$params = [
11 months ago
'classTeacher' => $course->teacher->name??'',
1 year ago
'courseName' => $course->name,
11 months ago
'description' => $user->company->businessScope??'',
1 year ago
'enterpriseName' => $user->company->company_name,
'creditCode' => $user->company->credit_code,
'groupId' => '1030004',
'openTime' => $course->start_date
];
$params = json_encode($params, JSON_UNESCAPED_UNICODE);
$url = $this->baseUrl . '/master-service/openapi/businessCollege/shareInfo/push';
$header = $this->getHeader();
try {
$result = httpCurl($url, 'POST', $params, $header);
$result = json_decode($result, true);
if ($result['code'] == 200) {
return true;
} else {
11 months ago
$out = $result['msg'];
1 year ago
return false;
}
} catch (\Exception $e) {
11 months ago
$out = $e->getMessage();
1 year ago
return false;
}
}
1 year ago
}