This commit is contained in:
gaofeng
2026-08-12 10:06:28 +08:00
parent a9e31077d2
commit 5334714544
4 changed files with 123 additions and 4 deletions

View File

@@ -40,4 +40,57 @@ final class CustomerCenter extends Base
return $this->ok((array)($result['data'] ?? []));
}
public function applicant()
{
$userId = $this->requireLogin();
if (!is_int($userId)) {
return $userId;
}
$applicantId = (int)$this->request->param('applicant_id', 0);
if ($applicantId <= 0) {
return $this->fail('参数错误');
}
$result = (new CustomerCenterService())->applicant($userId, $applicantId);
if ((int)($result['code'] ?? 0) !== 1) {
return $this->fail((string)($result['msg'] ?? '服务异常,请稍后重试'));
}
return $this->ok((array)($result['data'] ?? []));
}
public function saveApplicant()
{
$userId = $this->requireLogin();
if (!is_int($userId)) {
return $userId;
}
$result = (new CustomerCenterService())->saveApplicant($userId, $this->postData());
if ((int)($result['code'] ?? 0) !== 1) {
return $this->fail((string)($result['msg'] ?? '保存失败,请稍后重试'));
}
return $this->ok((array)($result['data'] ?? []), '保存成功');
}
public function removeApplicant()
{
$userId = $this->requireLogin();
if (!is_int($userId)) {
return $userId;
}
$applicantId = (int)$this->request->param('applicant_id', 0);
if ($applicantId <= 0) {
return $this->fail('参数错误');
}
$result = (new CustomerCenterService())->removeApplicant($userId, $applicantId);
if ((int)($result['code'] ?? 0) !== 1) {
return $this->fail((string)($result['msg'] ?? '移除失败,请稍后重试'));
}
return $this->ok([], '已移除');
}
}

View File

@@ -5,8 +5,10 @@ namespace app\miniapi\controller;
use api\Httpcurl;
use app\miniapi\service\Context\MiniAppContext;
use app\miniapi\service\CustomerCenter\CustomerCenterService;
use app\miniapi\service\Payment\MiniPayService;
use app\miniapi\service\Product\ProductService;
use think\facade\Log;
class Evus extends Base
{
@@ -74,6 +76,8 @@ class Evus extends Base
return $this->fail($result['msg'] ?? '提交失败,请联系管理员');
}
$this->syncApplicantAfterOrderCreated($userId, $orderSn, $data);
if (!empty($data['openid'])) {
$pay = $this->requestMiniPay($context, $orderSn, $totalPrice, $data['openid']);
if ($pay['code'] !== 1) {
@@ -119,7 +123,9 @@ class Evus extends Base
$payload['passport_issue_place'],
$payload['product_value'],
$payload['product_name'],
$payload['product_desc']
$payload['product_desc'],
$payload['customer_applicant_id'],
$payload['customer_profile_version_id']
);
$totalPrice = (string)$product['value'];
$payload['user_id'] = $userId;
@@ -159,4 +165,23 @@ class Evus extends Base
{
return (new MiniPayService())->request($context, $orderSn, $money, $openid, 'miniapi evus mini pay');
}
private function syncApplicantAfterOrderCreated(int $userId, string $orderSn, array $data): void
{
$applicantId = (int)($data['customer_applicant_id'] ?? 0);
if ($applicantId <= 0) {
return;
}
$result = (new CustomerCenterService())->syncEvusApplicant($userId, $applicantId, $orderSn, $data);
if ((int)($result['code'] ?? 0) !== 1) {
// The order already exists, so contact synchronization must never turn a successful order into a failure.
Log::warning(sprintf(
'miniapi evus contact sync failed: applicant_id=%d order_sn=%s msg=%s',
$applicantId,
$orderSn,
(string)($result['msg'] ?? 'unknown')
));
}
}
}

View File

@@ -21,6 +21,37 @@ final class CustomerCenterService
]);
}
public function applicant(int $userId, int $applicantId): array
{
return $this->request('applicant', $userId, ['applicant_id' => $applicantId]);
}
public function saveApplicant(int $userId, array $params): array
{
return $this->request('saveApplicant', $userId, $params);
}
public function removeApplicant(int $userId, int $applicantId): array
{
return $this->request('removeApplicant', $userId, ['applicant_id' => $applicantId]);
}
public function syncEvusApplicant(
int $userId,
int $applicantId,
string $orderSn,
array $profile
): array {
return $this->request('syncEvusApplicant', $userId, [
'applicant_id' => $applicantId,
'order_sn' => $orderSn,
'profile_json' => json_encode(
$profile,
JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_INVALID_UTF8_SUBSTITUTE
),
], 5);
}
public function payload(int $userId, array $params = []): array
{
return ['user_id' => $userId] + $params;
@@ -28,7 +59,14 @@ final class CustomerCenterService
public function endpoint(string $userUrl, string $action): string
{
if (!in_array($action, ['applicants', 'applications'], true)) {
if (!in_array($action, [
'applicants',
'applications',
'applicant',
'saveApplicant',
'removeApplicant',
'syncEvusApplicant',
], true)) {
return '';
}
@@ -43,7 +81,7 @@ final class CustomerCenterService
return is_string($endpoint) && $endpoint !== $userUrl ? $endpoint : '';
}
private function request(string $action, int $userId, array $params = []): array
private function request(string $action, int $userId, array $params = [], int $timeout = 0): array
{
$url = $this->endpoint(trim((string)config('app.user_url')), $action);
if ($url === '') {
@@ -51,7 +89,7 @@ final class CustomerCenterService
}
$payload = $this->payload($userId, $params);
$response = Httpcurl::request($url, 'post', $payload);
$response = Httpcurl::request($url, 'post', $payload, [], $timeout);
if (!is_array($response) || !isset($response[0]) || !empty($response[3])) {
Log::error('miniapi customer center ' . $action . ' request failed');
return ['code' => 0, 'msg' => '服务异常,请稍后重试', 'data' => []];

View File

@@ -36,6 +36,9 @@ Route::group('miniapi', function () {
Route::get('customer-center/applicants', 'CustomerCenter/applicants');
Route::get('customer-center/applications', 'CustomerCenter/applications');
Route::post('customer-center/applicant', 'CustomerCenter/applicant');
Route::post('customer-center/applicant/save', 'CustomerCenter/saveApplicant');
Route::post('customer-center/applicant/remove', 'CustomerCenter/removeApplicant');
Route::get('ocr/signature', 'Ocr/signature');
Route::post('upload/image', 'Upload/image');