文件
xionggeshop/addons/shopro_huifu/library/onboard/HuifuOnboardQuery.php

115 行
4.0 KiB
PHP

<?php
namespace addons\shopro_huifu\library\onboard;
use addons\shopro_huifu\library\SdkLoader;
use addons\shopro_huifu\model\Onboard;
class HuifuOnboardQuery
{
protected $sdk;
public function __construct(HuifuOnboardSdk $sdk = null)
{
$this->sdk = $sdk ?: new HuifuOnboardSdk();
}
public function pollAndUpdate(Onboard $row)
{
if (!$row['huifu_id']) {
return $row;
}
if ($row['onboard_status'] === Onboard::STATUS_APPROVED) {
return $row;
}
$applyNo = $row['apply_no'];
if ($applyNo) {
$status = $this->queryApply($row['huifu_id'], $applyNo);
$row = $this->applyRemoteStatus($row, $status);
if ($row['onboard_status'] === Onboard::STATUS_APPROVED) {
return $row;
}
}
$basic = $this->queryBasic($row['huifu_id']);
if ($this->isBasicActive($basic)) {
if (in_array($row['onboard_status'], [Onboard::STATUS_BUSI_PENDING, Onboard::STATUS_BASIC_OK], true)) {
$row->onboard_status = Onboard::STATUS_APPROVED;
$row->reject_reason = '';
$row->resp_snapshot = json_encode($basic, JSON_UNESCAPED_UNICODE);
$row->save();
HuifuOnboardReceiverSync::sync($row);
}
}
return $row;
}
public function queryApply($huifuId, $applyNo)
{
SdkLoader::requireRequest('V2UserApplyQueryRequest.php');
$meta = $this->sdk->newReqMeta();
$request = new \BsPaySdk\request\V2UserApplyQueryRequest();
$request->setHuifuId($huifuId);
$request->setReqSeqId($meta['req_seq_id']);
$request->setReqDate($meta['req_date']);
$request->setApplyNo($applyNo);
$result = $this->sdk->getClient()->postRequest($request);
$safe = $this->sdk->getClient()->safeApiResult($result);
return $safe['ok'] ? $safe['data'] : [];
}
public function queryBasic($huifuId)
{
SdkLoader::requireRequest('V2UserBasicdataQueryRequest.php');
$meta = $this->sdk->newReqMeta();
$request = new \BsPaySdk\request\V2UserBasicdataQueryRequest();
$request->setHuifuId($huifuId);
$request->setReqSeqId($meta['req_seq_id']);
$request->setReqDate($meta['req_date']);
$result = $this->sdk->getClient()->postRequest($request);
$safe = $this->sdk->getClient()->safeApiResult($result);
return $safe['ok'] ? $safe['data'] : [];
}
protected function applyRemoteStatus(Onboard $row, array $data)
{
if (!$data) {
return $row;
}
$stat = strtolower((string) ($data['apply_status'] ?? $data['audit_status'] ?? $data['status'] ?? ''));
$desc = (string) ($data['apply_desc'] ?? $data['resp_desc'] ?? $data['reject_reason'] ?? '');
if (in_array($stat, ['s', 'success', 'approved', '1', '02', '2'], true)) {
$row->onboard_status = Onboard::STATUS_APPROVED;
$row->reject_reason = '';
$row->resp_snapshot = json_encode($data, JSON_UNESCAPED_UNICODE);
$row->save();
HuifuOnboardReceiverSync::sync($row);
return $row;
}
if (in_array($stat, ['f', 'fail', 'failed', 'rejected', '3', '03', '-1'], true)) {
$row->onboard_status = Onboard::STATUS_REJECTED;
$row->reject_reason = $desc ?: '汇付进件审核驳回';
$row->resp_snapshot = json_encode($data, JSON_UNESCAPED_UNICODE);
$row->save();
return $row;
}
$row->onboard_status = Onboard::STATUS_BUSI_PENDING;
$row->resp_snapshot = json_encode($data, JSON_UNESCAPED_UNICODE);
$row->save();
return $row;
}
protected function isBasicActive(array $data)
{
if (!$data) {
return false;
}
$stat = strtolower((string) ($data['user_status'] ?? $data['status'] ?? $data['acct_stat'] ?? ''));
return in_array($stat, ['n', 'normal', 's', 'success', '1'], true);
}
}