一级市场接口

develop
JING 2 weeks ago
parent 31666aeea7
commit c5259358c7
  1. 159
      src/Constant.php
  2. 12
      src/HFPayClient.php
  3. 212
      src/factory/impl/OneLevelFactory.php
  4. 214
      src/factory/object/onelevel/CompanyRequest.php
  5. 14
      src/factory/object/onelevel/CompanyResponse.php
  6. 157
      src/factory/object/onelevel/PeddlarRequest.php
  7. 14
      src/factory/object/onelevel/PeddlarResponse.php
  8. 91
      src/factory/object/onelevel/PersonalRequest.php
  9. 13
      src/factory/object/onelevel/PersonalResponse.php
  10. 73
      src/factory/object/onelevel/UploadRequest.php
  11. 13
      src/factory/object/onelevel/UploadResponse.php

@ -89,4 +89,163 @@ class Constant
const RISK_DIV_TYPE_MASTER = 1; const RISK_DIV_TYPE_MASTER = 1;
const RISK_DIV_TYPE_FEE = 2; const RISK_DIV_TYPE_FEE = 2;
const RISK_DIV_TYPE_OTHER = 3; const RISK_DIV_TYPE_OTHER = 3;
/**
* 一级市场->文件上传->业务类型 trans_type 3:企业开户4:个体户开户 7:个人开户
* */
const ONE_UP_TRANS_TYPE_COMPANY = 3;
const ONE_UP_TRANS_TYPE_PEDDLER = 4;
const ONE_UP_TRANS_TYPE_PERSONAL = 7;
/**
* 一级市场->文件上传->附件类型 attach_type
*
1:营业执照注册号
2:组织结构代码证
3:税务登记证号
4:法人证件
5:开户银行许可证
6:统一社会信用代码
7:快捷协议
8:代扣协议
9:开户电子协议
10:法人证件反面
11:经营照片
12:经营照片(地址照片)
13:经营照片(门头照片)
14:结算卡正面
15:结算卡反面
16:经办人证件
21:个人身份证正面
22:个人身份证反面
23:用户平台合作协议
99.其他
*
* */
const ONE_UP_ATTACH_TYPE_1 = 1;
const ONE_UP_ATTACH_TYPE_2 = 2;
const ONE_UP_ATTACH_TYPE_3 = 3;
const ONE_UP_ATTACH_TYPE_4 = 4;
const ONE_UP_ATTACH_TYPE_5 = 5;
const ONE_UP_ATTACH_TYPE_6 = 6;
const ONE_UP_ATTACH_TYPE_7 = 7;
const ONE_UP_ATTACH_TYPE_8 = 8;
const ONE_UP_ATTACH_TYPE_9 = 9;
const ONE_UP_ATTACH_TYPE_10 = 10;
const ONE_UP_ATTACH_TYPE_11 = 11;
const ONE_UP_ATTACH_TYPE_12 = 12;
const ONE_UP_ATTACH_TYPE_13 = 13;
const ONE_UP_ATTACH_TYPE_14 = 14;
const ONE_UP_ATTACH_TYPE_15 = 15;
const ONE_UP_ATTACH_TYPE_16 = 16;
const ONE_UP_ATTACH_TYPE_21 = 21;
const ONE_UP_ATTACH_TYPE_22 = 22;
const ONE_UP_ATTACH_TYPE_23 = 23;
const ONE_UP_ATTACH_TYPE_99 = 99;
/**
* 一级市场->文件上传->上传类型 handel_type 1:新增 2:更新
* */
const ONE_UP_HANDEL_TYPE_ADD = 1;
const ONE_UP_HANDEL_TYPE_UPDATE = 2;
/**
* 一级市场->
* 个人用户开户接口(后台版)/ 企业用户开户接口(后台版)
* ->账户用途 acct_usage_type
* one-level-seller:一级市场卖家户 salesr-promoter:分销员户
* */
const ONE_COM_ACCT_USAGE_TYPE_ONE = 'one-level-seller';
const ONE_COM_ACCT_USAGE_TYPE_SALESR = 'salesr-promoter';
/**
* 一级市场->个人用户开户接口(后台版)->个人职业 occupation
*
* 01:国家机关、党群机关、企事业单位负责人
02:金融业从业人员
03:房地产业从业人员
04:商贸从业人员
05:自由职业者
06:科教文从业人员
07:制造业从业人员
08:卫生行业从业人员
09:IT业从业人员
10:农林牧渔劳动者
11:生产工作、运输工作和部分体力劳动者
12:退休人员
13:不便分类的其他劳动者
* */
const ONE_PER_OCCUPATION_1 = '01';
const ONE_PER_OCCUPATION_2 = '02';
const ONE_PER_OCCUPATION_3 = '03';
const ONE_PER_OCCUPATION_4 = '04';
const ONE_PER_OCCUPATION_5 = '05';
const ONE_PER_OCCUPATION_6 = '06';
const ONE_PER_OCCUPATION_7 = '07';
const ONE_PER_OCCUPATION_8 = '08';
const ONE_PER_OCCUPATION_9 = '09';
const ONE_PER_OCCUPATION_10 = '10';
const ONE_PER_OCCUPATION_11 = '11';
const ONE_PER_OCCUPATION_12 = '12';
const ONE_PER_OCCUPATION_13 = '13';
/**
* 一级市场->
* 企业用户开户接口(后台版) /个体户开户接口(后台版)
* ->操作类型 operate_type
* A:新增 M:修改
* */
const ONE_COM_OPERATE_TYPE_A = 'A';
const ONE_COM_OPERATE_TYPE_M = 'M';
/**
* 一级市场->
* 企业用户开户接口(后台版)
* ->企业证照类型 corp_license_type
* 1.普通证照 2.三证合一
* */
const ONE_COM_CORP_LIS_TYPE_1 = 1;
const ONE_COM_CORP_LIS_TYPE_2 = 2;
/**
* 一级市场->
* 企业用户开户接口(后台版)
* ->法人证件类型 legal_id_card_type /控股股东(实际控制人) controlling_shareholder -> idCardType
* 10:身份证
11:护照
12:军官证
13:士兵证
14:回乡证
15:户口本
16:警官证
17:台胞证
18:组织机构代码
19:营业执照
20:税务登记证
21:统一社会信用代码证
22:其他
* */
const ONE_COM_ID_CARD_TYPE_10 = 10;
const ONE_COM_ID_CARD_TYPE_11 = 11;
const ONE_COM_ID_CARD_TYPE_12 = 12;
const ONE_COM_ID_CARD_TYPE_13 = 13;
const ONE_COM_ID_CARD_TYPE_14 = 14;
const ONE_COM_ID_CARD_TYPE_15 = 15;
const ONE_COM_ID_CARD_TYPE_16 = 16;
const ONE_COM_ID_CARD_TYPE_17 = 17;
const ONE_COM_ID_CARD_TYPE_18 = 18;
const ONE_COM_ID_CARD_TYPE_19 = 19;
const ONE_COM_ID_CARD_TYPE_20 = 20;
const ONE_COM_ID_CARD_TYPE_21 = 21;
const ONE_COM_ID_CARD_TYPE_22 = 22;
} }

@ -11,6 +11,7 @@ use Tansilu\HfPayLib\factory\impl\ManageFactory;
use Tansilu\HfPayLib\factory\impl\MarketFactory; use Tansilu\HfPayLib\factory\impl\MarketFactory;
use Tansilu\HfPayLib\factory\impl\QueryFactory; use Tansilu\HfPayLib\factory\impl\QueryFactory;
use Tansilu\HfPayLib\factory\impl\TradeFactory; use Tansilu\HfPayLib\factory\impl\TradeFactory;
use Tansilu\HfPayLib\factory\impl\OneLevelFactory;
use Tansilu\HfPayLib\http\IHttpClient; use Tansilu\HfPayLib\http\IHttpClient;
use Tansilu\HfPayLib\http\impl\HFPayHttpClient; use Tansilu\HfPayLib\http\impl\HFPayHttpClient;
@ -102,4 +103,15 @@ class HFPayClient
{ {
return $this->container->make(TradeFactory::class); return $this->container->make(TradeFactory::class);
} }
/**
* 一级市场
*
* @return OneLevelFactory
* @throws DependencyException
* @throws NotFoundException
*/
public function one(): OneLevelFactory
{
return $this->container->make(OneLevelFactory::class);
}
} }

@ -0,0 +1,212 @@
<?php
namespace Tansilu\HfPayLib\factory\impl;
use Tansilu\HfPayLib\exception\BizException;
use Tansilu\HfPayLib\exception\ParamsException;
use Tansilu\HfPayLib\factory\BaseFactory;
use Tansilu\HfPayLib\factory\object\onelevel\UploadRequest;
use Tansilu\HfPayLib\factory\object\onelevel\UploadResponse;
use Tansilu\HfPayLib\factory\object\onelevel\PersonalRequest;
use Tansilu\HfPayLib\factory\object\onelevel\PersonalResponse;
use Tansilu\HfPayLib\factory\object\onelevel\CompanyRequest;
use Tansilu\HfPayLib\factory\object\onelevel\CompanyResponse;
use Tansilu\HfPayLib\factory\object\onelevel\PeddlarRequest;
use Tansilu\HfPayLib\factory\object\onelevel\PeddlarResponse;
/**
* 一级市场管理
*/
class OneLevelFactory extends BaseFactory
{
/**
* 开户
* 上传企业开户,个体户开户的资料文件
*
* 目前支持的文件格式:rar,zip,png,jpg,jpeg,gif,bmp,pdf,doc,docx,csv
* 当业务类型为个人时,身份证正反面和用户平台合作协议必传
* 当业务类型为企业开户时,企业经营信息(营业执照、组织机构代码证、税务登记证)与统一社会代码证二选一必传,法人证件、法人证件反面、结算卡正面、结算卡反面必传
* 当业务类型为个体户开户时,营业执照、法人证件、结算卡正面、结算卡反面必传
* 附件名称不要超过25个字符
* 个人身份证正面和个人身份证反面附件大小不要超过1M,其他附件不要超过5M
*
* @throws BizException
* @throws ParamsException
*
* @see https://hfpay.cloudpnr.com/customers/nft/#/levelOneOpenAccount/uploadFile
*
* 返回码
* S00001 文件名称有误
* S00002 附件编号不能重复
* S00003 上传文件不能为空
* S00004 上传失败,不支持该文件格式
* S00005 上传失败,文件数量超过限制
* S00006 文件上传失败,请稍后重试
* S00007 操作超时,请重试
* S00008 上传失败,文件大小超过限制
* S00009 文件下载失败
* S00010 未查到对账文件或收益文件
*/
public function upload(UploadRequest $params): UploadResponse
{
$request = $params->toParams();
$data = $this->post('/api/alseFile/file01', $request);
if(!$data->isSuccess()) {
throw new BizException('上传失败', $data->getCode());
}
return UploadResponse::make($data->getBody());
}
/**
* 个人用户开户接口(后台版)
* 用于在本平台系统下为个人用户开户。开户时,会有实名验证和身份证OCR验证,请提供真实信息。
* 本接口只能用于一级市场的卖家户、分销员户的开户。开通的用户只具有收款能力(藏品卖家),不具有付款能力。
*
* @throws BizException
* @throws ParamsException
*
* @see https://hfpay.cloudpnr.com/customers/nft/#/levelOneOpenAccount/personalOpenAccount
返回码
A40001 省份地区信息非法
A40002 该用户已开户,身份证号已存在
A40004 黑名单用户,开户失败
A40005 身份校验失败
A40006 身份证格式校验失败
A40007 身份证末位校验失败
A40008 手续费配置异常
A40085 该证件用户开户请求正在处理中,请稍后再试
A40218 附件编号不存在
A40219 缺少附件信息
A40220 开户服务费收取失败
A40211 user_id不能重复开户
A40212 身份证开户数超过最大限制
A40203 用户已开户,无需再提交开户
A40210 年龄不符合要求
A40223 身份证附件识别不一致
A40224 身份证OCR失败
*/
public function personalCreate( PersonalRequest $params) : PersonalResponse
{
$request = $params->toParams();
$data = $this->post('/api/acou/user08', $request);
if(!$data->isSuccess()) {
throw new BizException('一级市场-个人用户开户创建失败', $data->getCode());
}
return PersonalResponse::make($data->getBody());
}
/**
* 企业用户开户接口(后台版)
* 用于在本平台系统下为个人用户开户。开户时,会有实名验证和身份证OCR验证,请提供真实信息。
* 本接口只能用于一级市场的卖家户、分销员户的开户。开通的用户只具有收款能力(藏品卖家),不具有付款能力。
*
* @throws BizException
* @throws ParamsException
*
* @see https://hfpay.cloudpnr.com/customers/nft/#/levelOneOpenAccount/enterpriseOpenAccount
返回码
A40001 省份地区信息非法
A40002 该用户已开户,身份证号已存在
A40004 黑名单用户,开户失败
A40005 身份校验失败
A40006 身份证格式校验失败
A40007 身份证末位校验失败
A40009 控股股东不能超过二十个
A40010 控股股东部分字段为空
A40011 控股股东部分字段长度超长
A40012 控股股东证件类型不存在
A40013 控股股东身份证不合法
A40014 该企业证照类型与证照号不匹配
A40015 该申请号已开户
A40016 该企业营业执照注册号或者社会统一信用码已开户
A40017 该企业开户申请正在审核中,不能修改
A40018 该企业开户申请已被拒绝,不能修改
A40019 该企业开户申请已经通过,不能修改
A40020 未查询到原开户申请号
A40021 该申请号已申请开户
A40022 营业执照注册号或者社会统一信用码已申请开户
A40023 附件信息不存在
A40024 附件数量超出10个限制
A40025 附件文件不存在
A40026 文件已被使用
A40027 该记录非待审核状态
A40028 银行信息不存在
A40031 原企业开户申请状态为关闭,不能修改
A40045 审核拒绝,【具体拒绝原因】
A40046 审核待修改,【具体修改理由】
A40047 开户成功,绑卡失败,【具体绑卡失败原因】
A40054 审核状态错误
H10005 银行卡已存在
A40102 用户不存在
A40103 该用户已开户
A40107 收款方必须开通汇付账户
A40105 开户请求银行处理中,请勿重复提交
A40106 请上传文件
*/
public function companyCreate( CompanyRequest $params) : CompanyResponse
{
$request = $params->toParams();
$data = $this->post('/api/acou/corp05', $request);
if(!$data->isSuccess()) {
throw new BizException('一级市场-企业用户开户创建失败', $data->getCode());
}
return CompanyResponse::make($data->getBody());
}
/**
* 个体商户开户接口(后台版)
* 用于在本平台系统下为个人用户开户。开户时,会有实名验证和身份证OCR验证,请提供真实信息。
* 本接口只能用于一级市场的卖家户、分销员户的开户。开通的用户只具有收款能力(藏品卖家),不具有付款能力。
*
* @throws BizException
* @throws ParamsException
*
* @see https://hfpay.cloudpnr.com/customers/nft/#/levelOneOpenAccount/individualOpenAccount
返回码
A40024 附件数量超出10个限制
A40025 附件文件不存在
A40026 文件已被使用
A40027 该记录非待审核状态
A40028 银行信息不存在
A40032 该个体工商户开户申请审核已通过,不能修改
A40033 该个体工商户开户申请正在审核中,不能修改
A40034 该个体工商户开户申请审核拒绝,不能修改
A40036 原个体户开户请求不存在
A40037 该申请号已开户
A40038 个体户开户申请号已申请开户
A40039 营业执照注册号已被使用
A40045 审核拒绝,【具体拒绝原因】
A40046 审核待修改,【具体修改理由】
A40047 开户成功,绑卡失败,【具体绑卡失败原因】
A40054 审核状态错误
H10005 银行卡已存在
A40102 用户不存在
A40103 该用户已开户
A40107 收款方必须开通汇付账户
A40105 开户请求银行处理中,请勿重复提交
A40106 请上传文件
*/
public function peddlarCreate( PeddlarRequest $params) : PeddlarResponse
{
$request = $params->toParams();
$data = $this->post('/api/acou/solo02', $request);
if(!$data->isSuccess()) {
throw new BizException('一级市场-商户用户开户创建失败', $data->getCode());
}
return PeddlarResponse::make($data->getBody());
}
}

@ -0,0 +1,214 @@
<?php
namespace Tansilu\HfPayLib\factory\object\onelevel;
use Tansilu\HfPayLib\Constant;
use Tansilu\HfPayLib\factory\object\RequestObj;
use Tansilu\HfPayLib\exception\ParamsException;
use Tansilu\HfPayLib\utils\StrFilterHelper;
/**
* @property string $order_date 订单日期 格式为YYYYMMDD,例如:20160307,定长8位String
* @property string $order_id 订单号 由商户生成,必须保证唯一,50位内的字母或数字组合,变长50位String
* @property string $acct_usage_type 账户用途 one-level-seller:一级市场卖家户 salesr-promoter:分销员户,变长30位String
* @property string $user_id 用户ID 外部用户id,变长128位String
* @property string $apply_id 开户申请号 商户下唯一,变长20位String
* @property string $operate_type 操作类型 A:新增 M:修改,定长1位String
* @property string $corp_license_type 企业证照类型 1.普通证照 2.三证合一,定长1位String,可选
* @property string $corp_name 企业名称 企业的公司全称,变长50位String
* @property string $business_code 营业执照注册号 企业的营业执照注册号,营业执照注册号与统一社会信用代码二选一必填,变长30位String,可选
* @property string $institution_code 组织机构代码 企业的组织机构代码证,定长9位String,可选
* @property string $tax_code 税务登记证号 企业的税务登记号,变长30位String,可选
* @property string $social_credit_code 统一社会信用代码 企业的统一社会信用代码,定长18位String,可选
* @property string $license_start_date 证照起始日期 企业的营业证照起始日期,精确到年月日,定长8位String,可选
* @property string $license_end_date 证照结束日期 企业的营业证照结束日期,精确到年月日,支持“永久”,定长8位String,可选
* @property string $corp_business_address 企业经营地址 企业的经营地址,变长250位String,可选
* @property string $corp_reg_address 企业注册地址 企业的注册地址,变长250位String,可选
* @property string $corp_fixed_telephone 企业固定电话 企业的固定电话,变长15位String,可选
* @property string $business_scope 经营范围 企业的经营范围,变长1000位String,可选
* @property string $controlling_shareholder 控股股东(实际控制人) 数据格式:[{"custName":"关羽","idCardType":"10","idCard":"330204199008187881,ratio":"50",shareholderAddr":"上海市"}],变长3000位String
* @property string $legal_name 法人姓名 企业的法人姓名,变长50位String
* @property string $legal_id_card_type 法人证件类型 10:身份证11:护照12:军官证13:士兵证14:回乡证15:户口本16:警官证17:台胞证18:组织机构代码19:营业执照20:税务登记证21:统一社会信用代码证22:其他,定长2位String
* @property string $legal_id_card 法人证件号码 法人的证件号码,与证件类型对应,当用户类型为 2、3时只能为身份证,变长20位String
* @property string $legal_cert_start_date 法人证件起始日期 法人的证件起始日期,精确到年月日,定长8位String
* @property string $legal_cert_end_date 法人证件截止日期 法人的证件结束日期,精确到年月日,支持“永久”,定长8位String
* @property string $legal_mobile 法人手机号码 法人的手机号码,定长11位String
* @property string $contact_name 企业联系人姓名 企业联系人的姓名,变长50位String
* @property string $contact_mobile 联系人手机号 联系人的手机号码,定长11位String
* @property string $contact_email 联系人邮箱 联系人的邮箱地址,变长40位String
* @property string $bank_acct_name 开户银行账户名 企业开户银行账户名,变长50位String
* @property string $bank_id 开户银行 具体见附件:开户银行代号,变长8位String
* @property string $bank_acct_num 开户银行账号 企业开户银行账号,变长32位String
* @property string $bank_branch 开户银行支行名称 企业开户银行的支行名称,变长100位String,可选
* @property string $bank_prov 开户银行省份 银行卡开户省份,定长4位String
* @property string $bank_area 开户银行地区 银行卡开户地区,定长4位String
* @property string $industry 行业 企业行业类别,具体见附件:行业,定长2位String,可选
* @property string $bg_ret_url 商户后台应答地址 通过后台异步通知商户开户结果;注意:1) 使用时不要包含中文 2)必须是外网地址,变长128位String,可选
* @property string $attach_nos 附件信息 配合文件上传接口,使用,多个附件之间用逗号隔开,变长1024位String
* @property string $mer_priv 商户私有域 为商户的自定义字段,该字段在交易完成后由本平台原样返回,变长120位String,可选
* @property string $extension 扩展域,变长512位String,可选
* @property string $legal_nationality 法人国籍,变长128位String,可选
*/
class CompanyRequest
{
use RequestObj;
/**
* @throws ParamsException
*/
public function toParams(): array
{
if(empty($this->data['order_date'])) {
throw new ParamsException('订单日期不能为空', 'order_date');
}
if(empty($this->data['order_id'])) {
throw new ParamsException('订单号不能为空', 'order_id');
}
if(empty($this->data['acct_usage_type'])) {
throw new ParamsException('账户用途不能为空', 'acct_usage_type');
}
if(empty($this->data['user_id'])) {
throw new ParamsException('用户ID不能为空', 'user_id');
}
if(empty($this->data['apply_id'])) {
throw new ParamsException('开户申请号不能为空', 'apply_id');
}
if(empty($this->data['operate_type'])) {
throw new ParamsException('操作类型不能为空', 'operate_type');
}
if(!in_array($this->data['operate_type'], [Constant::ONE_COM_OPERATE_TYPE_A, Constant::ONE_COM_OPERATE_TYPE_M])) {
throw new ParamsException('操作类型不正确', 'operate_type');
}
if(empty($this->data['corp_license_type'])) {
throw new ParamsException('企业证照类型不能为空', 'corp_license_type');
}
if(!in_array($this->data['corp_license_type'], [Constant::ONE_COM_CORP_LIS_TYPE_1, Constant::ONE_COM_CORP_LIS_TYPE_2])) {
throw new ParamsException('企业证照类型不正确', 'corp_license_type');
}
//营业执照
if($this->data['corp_license_type'] == Constant::ONE_COM_CORP_LIS_TYPE_1) {
if(empty($this->data['business_code'])) {
throw new ParamsException('营业执照注册号不能为空', 'business_code');
}
if(empty($this->data['institution_code'])) {
throw new ParamsException('组织机构代码不能为空', 'institution_code');
}
if(empty($this->data['tax_code'])) {
throw new ParamsException('税务登记证号不能为空', 'tax_code');
}
}
else
{
//统一社会信用代码
if(empty($this->data['social_credit_code'])) {
throw new ParamsException('统一社会信用代码不能为空', 'social_credit_code');
}
}
if(empty($this->data['corp_name'])) {
throw new ParamsException('企业名称不能为空', 'corp_name');
}
if(empty($this->data['license_start_date'])) {
throw new ParamsException('证照起始日期不能为空', 'license_start_date');
}
if(empty($this->data['license_end_date'])) {
throw new ParamsException('证照结束日期不能为空', 'license_end_date');
}
if(empty($this->data['corp_business_address'])) {
throw new ParamsException('企业经营地址不能为空', 'corp_business_address');
}
if(empty($this->data['corp_reg_address'])) {
throw new ParamsException('企业注册地址不能为空', 'corp_reg_address');
}
if(empty($this->data['corp_fixed_telephone'])) {
throw new ParamsException('企业固定电话不能为空', 'corp_fixed_telephone');
}
if(empty($this->data['business_scope'])) {
throw new ParamsException('经营范围不能为空', 'business_scope');
}
if(empty($this->data['controlling_shareholder'])) {
throw new ParamsException('控股股东(实际控制人)不能为空', 'controlling_shareholder');
}
$this->data['controlling_shareholder'] = json_encode($this->data['controlling_shareholder'], JSON_UNESCAPED_UNICODE);
if(empty($this->data['legal_name'])) {
throw new ParamsException('法人姓名不能为空', 'legal_name');
}
if(empty($this->data['legal_id_card_type'])) {
throw new ParamsException('法人证件类型不能为空', 'legal_id_card_type');
}
if(empty($this->data['legal_id_card'])) {
throw new ParamsException('法人证件号码不能为空', 'legal_id_card');
}
if(empty($this->data['legal_cert_start_date'])) {
throw new ParamsException('法人证件起始日期不能为空', 'legal_cert_start_date');
}
if(empty($this->data['legal_cert_end_date'])) {
throw new ParamsException('法人证件截止日期不能为空', 'legal_cert_end_date');
}
if(empty($this->data['legal_mobile'])) {
throw new ParamsException('法人手机号码不能为空', 'legal_mobile');
}
if(empty($this->data['contact_name'])) {
throw new ParamsException('企业联系人姓名不能为空', 'contact_name');
}
if(empty($this->data['contact_mobile'])) {
throw new ParamsException('联系人手机号不能为空', 'contact_mobile');
}
if(empty($this->data['contact_email'])) {
throw new ParamsException('联系人邮箱不能为空', 'contact_email');
}
if(empty($this->data['bank_acct_name'])) {
throw new ParamsException('开户银行账户名不能为空', 'bank_acct_name');
}
// 银行ID号 5000多个
//https://cloudpnrcdn.oss-cn-shanghai.aliyuncs.com/hfpay/hfpay-excon-web/customers/nft/resources/%E5%8F%96%E7%8E%B0%E6%94%AF%E6%8C%81%E7%9A%84%E9%93%B6%E8%A1%8C%E4%BF%A1%E6%81%AF.xlsx
if(empty($this->data['bank_id'])) {
throw new ParamsException('开户银行代号不能为空', 'bank_id');
}
if(empty($this->data['bank_acct_num'])) {
throw new ParamsException('开户银行账号不能为空', 'bank_acct_num');
}
if(empty($this->data['bank_branch'])) {
throw new ParamsException('开户银行支行名称不能为空', 'bank_branch');
}
if(empty($this->data['bank_prov'])) {
throw new ParamsException('开户银行省份不能为空', 'bank_prov');
}
if(empty($this->data['bank_area'])) {
throw new ParamsException('开户银行地区不能为空', 'bank_area');
}
if(empty($this->data['industry'])) {
throw new ParamsException('企业行业类别不能为空', 'industry');
}
if(!empty($this->data['bg_ret_url'])) {
StrFilterHelper::fileUrl($this->data['bg_ret_url']);
}
if(empty($this->data['attach_nos'])) {
throw new ParamsException('附件信息不能为空', 'attach_nos');
}
if(empty($this->data['mer_priv'])) {
throw new ParamsException('商户私有域不能为空', 'mer_priv');
}
if(empty($this->data['extension'])) {
throw new ParamsException('扩展域不能为空', 'extension');
}
if(empty($this->data['legal_nationality'])) {
throw new ParamsException('法人国籍不能为空', 'legal_nationality');
}
return $this->data;
}
}

@ -0,0 +1,14 @@
<?php
namespace Tansilu\HfPayLib\factory\object\onelevel;
use Tansilu\HfPayLib\factory\object\ResponseObj;
/**
* 企业开户
*
*/
class CompanyResponse
{
use ResponseObj;
}

@ -0,0 +1,157 @@
<?php
namespace Tansilu\HfPayLib\factory\object\onelevel;
use Tansilu\HfPayLib\Constant;
use Tansilu\HfPayLib\factory\object\RequestObj;
use Tansilu\HfPayLib\exception\ParamsException;
use Tansilu\HfPayLib\utils\StrFilterHelper;
/**
* @property string $order_date 订单日期 格式为YYYYMMDD,例如:20160307
* @property string $order_id 订单号 由商户生成,必须保证唯一,50位内的字母或数字组合
* @property string $acct_usage_type 账户用途 one-level-seller:一级市场卖家户;salesr-promoter:分销员户
* @property string $user_id 用户ID 外部用户id
* @property string $apply_id 开户申请号 商户下唯一
* @property string $operate_type 操作类型 A:新增;M:修改
* @property string $solo_name 个体户名称
* @property string $business_code 营业执照注册号 企业的营业执照注册号
* @property string $license_start_date 证照起始日期 企业的营业证照起始日期,精确到年月日
* @property string $license_end_date 证照结束日期 企业的营业证照结束日期,精确到年月日,支持“永久”
* @property string $solo_business_address 个体户经营地址 个体户的经营地址
* @property string $solo_reg_address 个体户注册地址 个体户的注册地址
* @property string $solo_fixed_telephone 个体户固定电话 企业的固定电话
* @property string $business_scope 经营范围 企业的经营范围
* @property string $legal_name 法人姓名 企业的法人姓名
* @property string $legal_id_card_type 法人证件类型 10:身份证;11:护照;12:军官证;13:士兵证;14:回乡证;15:户口本;16:警官证;17:台胞证;22:其他
* @property string $legal_id_card 法人证件号码 法人的证件号码,与证件类型对应,当用户类型为 2、3时只能为身份证
* @property string $legal_cert_start_date 法人证件起始日期 法人的证件起始日期,精确到年月日
* @property string $legal_cert_end_date 法人证件截止日期 法人的证件结束日期,精确到年月日,支持“永久”
* @property string $legal_mobile 法人手机号码 法人的手机号码
* @property string $contact_name 企业联系人姓名 企业联系人的姓名
* @property string $contact_mobile 联系人手机号 联系人的手机号码
* @property string $contact_email 联系人邮箱 联系人的邮箱地址
* @property string $occupation 职业 01:国家机关、党群机关、企事业单位负责人;02:金融业从业人员;03:房地产业从业人员;04:商贸从业人员;05:自由职业者;06:科教文从业人员;07:制造业从业人员;08:卫生行业从业人员;09:IT业从业人员;10:农林牧渔劳动者;11:生产工作、运输工作和部分体力劳动者;12:退休人员;13:不便分类的其他劳动者
* @property string $bg_ret_url 商户后台应答地址 通过后台异步通知商户开户结果;注意:1)使用时不要包含中文 2)必须是外网地址
* @property string $attach_nos 附件信息 配合文件上传接口,使用,多个附件之间用逗号隔开”a,b”,当用户类型为 2、3时必填
* @property string $bank_acct_num 银行卡号 变长9-32位银行卡号,当用户类型为 2、3时必填
* @property string $bank_prov 省份
* @property string $bank_area 地区
* @property string $mer_priv 商户私有域 为商户的自定义字段,该字段在交易完成后由本平台原样返回
* @property string $extension 扩展域
* @property string $legal_nationality 法人国籍
*/
class PeddlarRequest
{
use RequestObj;
/**
* @throws ParamsException
*/
public function toParams(): array
{
if (empty($this->data['order_date'])) {
throw new ParamsException('订单日期不能为空', 'order_date');
}
if (empty($this->data['order_id'])) {
throw new ParamsException('订单号不能为空', 'order_id');
}
if (empty($this->data['acct_usage_type'])) {
throw new ParamsException('账户用途不能为空', 'acct_usage_type');
}
if (empty($this->data['user_id'])) {
throw new ParamsException('用户ID不能为空', 'user_id');
}
if (empty($this->data['apply_id'])) {
throw new ParamsException('开户申请号不能为空', 'apply_id');
}
if(empty($this->data['operate_type'])) {
throw new ParamsException('操作类型不能为空', 'operate_type');
}
if(!in_array($this->data['operate_type'], [Constant::ONE_COM_OPERATE_TYPE_A, Constant::ONE_COM_OPERATE_TYPE_M])) {
throw new ParamsException('操作类型不正确', 'operate_type');
}
if (empty($this->data['solo_name'])) {
throw new ParamsException('个体户名称不能为空', 'solo_name');
}
if (empty($this->data['business_code'])) {
throw new ParamsException('营业执照注册号不能为空', 'business_code');
}
if (empty($this->data['license_start_date'])) {
throw new ParamsException('证照起始日期不能为空', 'license_start_date');
}
if (empty($this->data['license_end_date'])) {
throw new ParamsException('证照结束日期不能为空', 'license_end_date');
}
if (empty($this->data['solo_business_address'])) {
throw new ParamsException('个体户经营地址不能为空', 'solo_business_address');
}
if (empty($this->data['solo_reg_address'])) {
throw new ParamsException('个体户注册地址不能为空', 'solo_reg_address');
}
if (empty($this->data['solo_fixed_telephone'])) {
throw new ParamsException('个体户固定电话不能为空', 'solo_fixed_telephone');
}
if (empty($this->data['business_scope'])) {
throw new ParamsException('经营范围不能为空', 'business_scope');
}
if (empty($this->data['legal_name'])) {
throw new ParamsException('法人姓名不能为空', 'legal_name');
}
if (empty($this->data['legal_id_card_type'])) {
throw new ParamsException('法人证件类型不能为空', 'legal_id_card_type');
}
if (empty($this->data['legal_id_card'])) {
throw new ParamsException('法人证件号码不能为空', 'legal_id_card');
}
if (empty($this->data['legal_cert_start_date'])) {
throw new ParamsException('法人证件起始日期不能为空', 'legal_cert_start_date');
}
if (empty($this->data['legal_cert_end_date'])) {
throw new ParamsException('法人证件截止日期不能为空', 'legal_cert_end_date');
}
if (empty($this->data['legal_mobile'])) {
throw new ParamsException('法人手机号码不能为空', 'legal_mobile');
}
if (empty($this->data['contact_name'])) {
throw new ParamsException('企业联系人姓名不能为空', 'contact_name');
}
if (empty($this->data['contact_mobile'])) {
throw new ParamsException('联系人手机号不能为空', 'contact_mobile');
}
if (empty($this->data['contact_email'])) {
throw new ParamsException('联系人邮箱不能为空', 'contact_email');
}
if (empty($this->data['occupation'])) {
throw new ParamsException('职业不能为空', 'occupation');
}
if (empty($this->data['bank_acct_num'])) {
throw new ParamsException('银行卡号不能为空', 'bank_acct_num');
}
if (empty($this->data['bank_prov'])) {
throw new ParamsException('省份不能为空', 'bank_prov');
}
if (empty($this->data['bank_area'])) {
throw new ParamsException('地区不能为空', 'bank_area');
}
if (empty($this->data['legal_nationality'])) {
throw new ParamsException('法人国籍不能为空', 'legal_nationality');
}
if(empty($this->data['attach_nos'])) {
throw new ParamsException('附件信息不能为空', 'attach_nos');
}
if(empty($this->data['mer_priv'])) {
throw new ParamsException('商户私有域不能为空', 'mer_priv');
}
if(empty($this->data['extension'])) {
throw new ParamsException('扩展域不能为空', 'extension');
}
if(!empty($this->data['bg_ret_url'])) {
StrFilterHelper::fileUrl($this->data['bg_ret_url']);
}
return $this->data;
}
}

@ -0,0 +1,14 @@
<?php
namespace Tansilu\HfPayLib\factory\object\onelevel;
use Tansilu\HfPayLib\factory\object\ResponseObj;
/**
* 商户开户
*
*/
class PeddlarResponse
{
use ResponseObj;
}

@ -0,0 +1,91 @@
<?php
namespace Tansilu\HfPayLib\factory\object\onelevel;
use Tansilu\HfPayLib\Constant;
use Tansilu\HfPayLib\factory\object\RequestObj;
use Tansilu\HfPayLib\exception\ParamsException;
use Tansilu\HfPayLib\utils\StrFilterHelper;
/**
* @property string $order_date 订单日期 格式为YYYYMMDD,例如:20160307
* @property string $order_id 订单号
* @property string acct_usage_type 账户用途 one-level-seller:一级市场卖家户 salesr-promoter:分销员户
* @property string $user_id 用户ID
* @property string $user_name 用户姓名
* @property string $id_card 证件号
* @property string $id_card_type 证件类型
*
* @property string $user_mobile 手机号
* @property string $occupation 职业
* @property string $card_num 银行卡号
*
* @property string $attach_nos 附件信息
* @property string $mer_priv 商户私有域
* @property string $extension 扩展域
* @property string $bg_ret_url 商户后台应答地址
*/
class PersonalRequest
{
use RequestObj;
/**
* @throws ParamsException
*/
public function toParams(): array
{
if(empty($this->data['order_date'])) {
throw new ParamsException('订单日期不能为空', 'order_date');
}
if(empty($this->data['order_id'])) {
throw new ParamsException('订单号不能为空', 'order_id');
}
if(empty($this->data['acct_usage_type'])) {
throw new ParamsException('账户用途不能为空', 'acct_usage_type');
}
if(empty($this->data['user_id'])) {
throw new ParamsException('用户ID不能为空', 'user_id');
}
if(empty($this->data['user_name'])) {
throw new ParamsException('用户姓名不能为空', 'user_name');
}
if(empty($this->data['id_card'])) {
throw new ParamsException('证件号不能为空', 'id_card');
}
if(empty($this->data['id_card_type'])) {
throw new ParamsException('证件类型不能为空', 'id_card_type');
}
if(!in_array($this->data['id_card_type'], [Constant::ID_TYPE_CARD])) {
throw new ParamsException('证件类型不支持', 'id_card_type');
}
if(empty($this->data['user_mobile'])) {
throw new ParamsException('手机号不能为空', 'user_mobile');
}
if(empty($this->data['occupation'])) {
throw new ParamsException('职业不能为空', 'occupation');
}
if(empty($this->data['card_num'])) {
throw new ParamsException('银行卡号不能为空', 'card_num');
}
if(empty($this->data['attach_nos'])) {
throw new ParamsException('附件信息不能为空', 'attach_nos');
}
if(empty($this->data['mer_priv'])) {
throw new ParamsException('商户私有域不能为空', 'mer_priv');
}
if(empty($this->data['extension'])) {
throw new ParamsException('扩展域不能为空', 'extension');
}
if(!empty($this->data['bg_ret_url'])) {
StrFilterHelper::fileUrl($this->data['bg_ret_url']);
}
return $this->data;
}
}

@ -0,0 +1,13 @@
<?php
namespace Tansilu\HfPayLib\factory\object\onelevel;
use Tansilu\HfPayLib\factory\object\ResponseObj;
/**
* 个人开户
*
*/
class PersonalResponse
{
use ResponseObj;
}

@ -0,0 +1,73 @@
<?php
namespace Tansilu\HfPayLib\factory\object\onelevel;
use Tansilu\HfPayLib\factory\object\RequestObj;
use Tansilu\HfPayLib\exception\ParamsException;
/**
* @property string $attach_no 附件编号
* @property string $trans_type 业务类型 3:企业开户
* 4:个体户开户
* 7:个人开户
*
* @property string $attach_type 附件类型 1:营业执照注册号
* 2:组织结构代码证
* 3:税务登记证号
* 4:法人证件
* 5:开户银行许可证
* 6:统一社会信用代码
* 7:快捷协议
* 8:代扣协议
* 9:开户电子协议
* 10:法人证件反面
* 11:经营照片
* 12:经营照片(地址照片)
* 13:经营照片(门头照片)
* 14:结算卡正面
* 15:结算卡反面
* 16:经办人证件
* 21:个人身份证正面
* 22:个人身份证反面
* 23:用户平台合作协议
* 99.其他
* @property string $attach_desc 文件描述
* @property string $attach_file 文件 传入的中文文件名称为 UTF-8 字符集 URLEncode 编码后的字符串
* @property string $handle_type 上传类型 1新增 2 更新 默认为新增1
*/
class UploadRequest
{
use RequestObj;
/**
* @throws ParamsException
*/
public function toParams(): array
{
if(empty($this->data['attach_no'])) {
throw new ParamsException('附件编号不能为空', 'attach_no');
}
if(empty($this->data['trans_type'])) {
throw new ParamsException('业务类型不能为空', 'trans_type');
}
if(empty($this->data['attach_type'])) {
throw new ParamsException('附件类型不能为空', 'attach_type');
}
if(empty($this->data['attach_desc'])) {
throw new ParamsException('文件描述不能为空', 'attach_desc');
}
if(empty($this->data['attach_file'])) {
throw new ParamsException('文件不能为空', 'attach_file');
}
if(empty($this->data['handle_type'])) {
throw new ParamsException('上传类型不能为空', 'handle_type');
}
return $this->data;
}
}

@ -0,0 +1,13 @@
<?php
namespace Tansilu\HfPayLib\factory\object\onelevel;
use Tansilu\HfPayLib\factory\object\ResponseObj;
/**
* 上传文件
*
*/
class UploadResponse
{
use ResponseObj;
}
Loading…
Cancel
Save