企业自主注册接口
企业注册类接口只对部分客户开放,需要业务配合。对接前请和华住的商务沟通,签署补充协议
创建企业卡
接口地址:/external/company/createOnline
请求方式:POST
请求参数说明:
参数名 | 类型 | 参数说明 | 字段长度 | 是否必填 | 备注 |
---|---|---|---|---|---|
cardId | string | 公司卡号 | varchar(32) | 是 | TMC模式的渠道卡或直连卡号 |
cardPassWord | string | 公司卡密码 | varchar(50) | 是 | TMC模式的渠道卡对应的验证码 或直连卡号对应的验证码 |
companyName | string | 企业名称 | varchar(50) | 是 | |
companyTaxpayerId | string | 税号 | varchar(50) | 是 | |
legalPerson | string | 法人姓名 | varchar(20) | 是 | |
mailboxSuffix | string | 企业邮箱后缀 | varchar(500) | 是 | 多个邮箱用,隔开 |
address | string | 公司地址 | varchar(100) | 是 | |
contactFullName | string | 联系人姓名 | varchar(20) | 是 | |
contactMobile | string | 联系人手机 | varchar(11) | 是 | |
contactEmail | string | 联系人邮箱 | varchar(50) | 是 | |
contactSex | string | 性别 | varchar(1) | 是 | M:男 W:女 |
contactIdNoType | string | 证件类型 | varchar(10) | 是 | C01 居民身份证 C06 护照 C07 其他 |
contactIdNo | string | 证件号码 | varchar(20) | 是 | |
idNoAttach | string | 联系人附件 | varchar(200) | 是 | 调用6.1.6图片上传接口返回的图片url |
licenseAttach | string | 公司营业执照 | varchar(200) | 是 | 调用6.1.6图片上传接口返回的图片url |
levelCode | string | 公司卡级别 | varchar(1) | 是 | B 金卡 公司注册资金≥3亿 C 玫瑰金 公司注册资金≥50万&<3亿 D 银卡 公司注册资金<50万 1.不传默认银卡 2.接口不支持直接开通铂金卡,可以先按照金卡提交,待和华住签完协议后联系商务升级 |
fillStatus | varchar(1) | A 已补全 C 不需要 | |||
vnoHeader | string | 来源渠道 | varchar(10) | 是 | 对接时华住提供 |
provinceCode | string | 所在省 | 否 | ||
cityCode | string | 所在市 | 否 |
请求示例:
{
"address": "上海市嘉定区丰华路200弄",
"cityCode": "10001",
"companyName": "建设商贸",
"companyTaxpayerId": "3432002720343",
"contactEmail": "121@qqq.com",
"contactFullName": "李四",
"contactIdNo": "JS-001",
"contactIdNoType": "C06",
"contactMobile": "13888890009",
"contactSex": "M",
"fillStatus": "C",
"idNoAttach": "",
"legalPerson": "张三",
"levelCode": "C",
"licenseAttach": "",
"mailboxSuffix": "jiansheshangmao@qqq.com",
"provinceCode": "",
"vnoHeader": "ZQGYPPP"
}
返回参数说明:
参数名 | 说明说明 | 类型 | 备注 |
---|---|---|---|
code | 状态码 | string | 200:处理成功 407:公司名称重复 403:公司已托管TMC 其他状态码为处理失败 |
message | 返回描述 | string | 状态码不为200时返回失败描述 |
content | 企业信息 | ExternalCompanyDTO | 状态码为200时返回企业外卡号 需对接方保存 后续操作华住企业卡需传入 |
ExternalCompanyDTO :
参数名 | 说明说明 | 类型 | 备注 |
---|---|---|---|
cardNo | 企业卡号 | string | 卡号请保存,后续绑定和查询需要 |
extCardNo | 企业外卡号 | string | |
status | 状态 | string | W:待激活 I:启⽤ X:停⽤ 启用状态的卡才可以绑定员工 |
返回示例
{
"code": "200",
"message": "成功",
"content":{
"cardNo":"VCENTCRM1032609419",
"extCardNo":"0023MD132",
"status":"W"
}
}
企业信息补全
接口地址:/external/company/completionOnline
请求方式:POST
请求参数说明:
参数名 | 类型 | 参数说明 | 字段长度 | 是否必填 | 备注 |
---|---|---|---|---|---|
cardId | string | 公司卡号 | varchar(32) | 是 | TMC模式的渠道卡或直连卡号 |
cardPassWord | string | 公司卡密码 | varchar(50) | 是 | TMC模式的渠道卡对应的验证码 或直连卡号对应的验证码 |
cardNo | string | 企业卡号 | varchar(20) | 是 | |
companyFund | string | 注册资金 | varchar(10) | 否 | 5 3亿以上 1 50万~3亿 100 小于50万 |
companyIndustr | string | 行业类型 | varchar(10) | 否 | 见下方行业类型说明 |
hasChinaTopFiveHundred | bool | 是否为中国500强企业 | 4 | 否 | 默认为false |
hasWorldTopTwoThousand | bool | 是否为全球2000强企业 | 4 | 否 | 默认为false |
hasCountryOrCauseUnit | bool | 是否为国家单位或国家事业单位 | 4 | 否 | 默认为false |
hasCountryOwner | bool | 是否为市级及以上国有控股企业/实际利益人企业 | 4 | 否 | 默认为false |
marketValue | bigint | 市值 | 15 | 否 | 默认为0 最多15位 |
monthAvgTravelBudget | bigint | 月均差旅预算 | 15 | 否 | 默认为0 最多15位 |
oneMonthTravelNumber | bigint | 单月差旅出行人次 | 15 | 否 | 默认为0 最多10位 |
yearEndTurnover | bigint | 年底营业额 | 10 | 否 | 默认为0 最多15位 |
fillStatus | varchar(1) | A 已补全 B 未补全 C 不需要 D 已升级 E 已拒绝 | |||
activityId | string | 来源渠道 | varchar(10) | 否 | 新对接的客户可忽略 |
行业类型说明:
编号 | 说明 |
---|---|
200000 | 其他 |
200001 | 零售商业连锁 |
200002 | 户外体育用品 |
200003 | 现代农业 |
200004 | 餐饮连锁 |
200005 | 酒店连锁 |
200006 | 生物制药 |
200007 | 软件开发 |
200008 | 新能源 |
200009 | 新材料 |
200010 | 工业品制造 |
200011 | 航空服务 |
200012 | 医疗服务 |
200013 | 金融服务 |
200014 | 电信增值 |
200015 | 文化传播 |
200016 | 娱乐传媒 |
200017 | 互联网门户 |
200018 | 动漫开发 |
200019 | 网络游戏 |
200020 | IT科技 |
200021 | 软件外包服务 |
请求示例:
{
"activityId": "ZQGYPPP",
"cardNo": "VCENTCRM1032609419",
"companyFund": "1",
"companyIndustr": "200020",
"fillStatus": "A",
"hasChinaTopFiveHundred": false,
"hasCountryOrCauseUnit": false,
"hasCountryOwner": false,
"hasWorldTopTwoThousand": false,
"marketValue": "",
"monthAvgTravelBudget": "1",
"oneMonthTravelNumber": "1",
"yearEndTurnover": "111"
}
返回参数说明:
参数名 | 说明说明 | 类型 | 备注 |
---|---|---|---|
code | 状态码 | string | 200:处理成功 其他状态码为处理失败 |
message | 返回描述 | string | 状态码不为200时返回失败描述 |
返回示例
{
"code": "200",
"message": "成功",
"echoToken": "097abc9e-48d0-4f6e-98be-7f8bef8e3ef8"
}
用企业卡号查询企业信息
接口地址:/external/company/search
请求方式:GET
请求参数说明:
参数名 | 类型 | 参数说明 | 是否必填 | 备注 |
---|---|---|---|---|
cardId | string | 公司卡号 | 是 | TMC模式的渠道卡或直连卡号 |
cardPassWord | string | 公司卡密码 | 是 | TMC模式的渠道卡对应的验证码 或直连卡号对应的验证码 |
cardNo | string | 企业卡号 | 是 | |
activityId | string | 来源渠道 | 否 | 新对接的客户可忽略 |
请求示例:
/external/company/search?cardId=VCENTCRM1032611873&cardPassWord=026E5988-2FE9-46B3-A8E7-6D062BE041AC&cardNo=VCENTCRM1032611873
返回参数说明:
参数名 | 说明说明 | 类型 | 备注 |
---|---|---|---|
code | 状态码 | string | 200:处理成功 其他状态码为处理失败 |
message | 返回描述 | string | 状态码不为200时返回失败描述 |
content | 公司信息 | DomainObj |
DomainObj:
参数名 | 说明说明 | 类型 | 备注 |
---|---|---|---|
name | 企业名称 | string | |
status | 企业状态 | string | W:待激活 I:在用 X:停用 |
memberLevel | 开卡等级 | string | C 企业金会员 D 企业银会员 J 企业玫瑰金会员 K 企业铂金会员 |
返回示例
{
"code": "200",
"message": "成功",
"content": {
"name": "广州市海珠区古老同红餐饮店",
"status": "I",
"memberLevel": "K"
},
"echoToken": "ec45dc97-e138-4e39-8717-47a1cc3791af"
}
企业信息变更(回调接口)
说明:
企业信息变更、企业卡升级/降级、新增托管关系、被托管企业卡停用、解绑时,我们会回调接口通知客户。客户收到回调通知后请调用查询企业信息更新本地信息
回调方式:POST
请求参数**说明**:
参数名 | 类型 | 是否返回 | 说明 |
---|---|---|---|
encryptionType | string | 是 | 加密方式,固定为SHA-256 |
cardNo | string | 是 | 企业卡号 |
reqNo | string | 是 | 流水号 |
operationType | string | 是 | 通知类型 modify:信息更新 grade:等级变更 bind:绑定TMC stop:卡下线 unbind:解绑TMC |
timeMillis | long | 是 | 时间戳 |
sign | string | 是 | 签名 |
请求示例
{
"encryptionType": "SHA-256",
"cardNo": "VCENTCRM1032609419",
"reqNo": "1234512",
"timeMillis": "111111111",
"sign": "abcdsddsfaer121"
}
返回参数说明:
第三方接口收到通知处理成功后,需返回suceess字符串
sign签名生成规则如下:
按照参数首字母从小到大拼接生成待签名的字符串,并在最后拼接&merchantKey,merchantKey是密钥,由华住提供
例如:encryptionType=SHA-256&cardNo=abc&reqNo=srgvdnonrlen&timeMillis=1234567891&merchantKey
sign代码生成示例:
public class SignHelper {
/**
* 获取排序后的未签名字段
*
* @param o
* @return
*/
@SneakyThrows
public static String getUnSignedStr(Object o) {
ArrayList<String> list = new ArrayList<String>();
Class cls = o.getClass();
Field[] fileds = cls.getDeclaredFields();
try {
for (Field f : fileds) {
f.setAccessible(true);
if (f.get(o) != null) {
list.add(f.getName() + "=" + f.get(o) + "&");
}
}
} catch (IllegalAccessException e) {
throw new Exception("不存在代签名字段的属性", e);
}
int size = list.size();
String[] arrayToSort = list.toArray(new String[size]);
Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < size; i++) {
sb.append(arrayToSort[i]);
}
String result = sb.toString();
if (result.endsWith("&")) {
result = result.substring(0, result.length() - 1);
}
return result;
}
/**
* 签名
*
* @param strToSign
* @param merchantKey
* @return
*/
@SneakyThrows
public static String sign(String strToSign, String merchantKey) {
StringBuilder str = new StringBuilder(strToSign);
//假设已排序字符串为strToSign
//添加商户密钥
str.append("&").append(merchantKey);
// 创建加密对象
MessageDigest messageDigest;
try {
messageDigest = MessageDigest.getInstance("SHA-256");
// 传入要加密的字符串,按指定的字符集将字符串转换为字节流
messageDigest.update(str.toString().getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
throw new Exception("生成签名失败", e);
} catch (NoSuchAlgorithmException e1) {
throw new Exception("生成签名失败", e1);
}
byte byteBuffer[] = messageDigest.digest();
// 將 byte数组转换为16进制string
return bytesToHexString(byteBuffer);
}
/**
* bytesToHexString
*
* @param src
* @return
*/
public static String bytesToHexString(byte[] src) {
StringBuilder sb = new StringBuilder("");
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
sb.append(0);
}
sb.append(hv);
}
return sb.toString();
}
}
返回示例
suceess
用税号查询企业信息
接口地址:/external/company/searchList
请求方式:GET
请求参数说明:
参数名 | 类型 | 参数说明 | 是否必填 | 备注 |
---|---|---|---|---|
cardId | string | 公司卡号 | 是 | TMC模式的渠道卡或直连卡号 |
cardPassWord | string | 公司卡密码 | 是 | TMC模式的渠道卡对应的验证码 或直连卡号对应的验证码 |
invoiceNo | string | 税号 | 是 | |
activityId | string | 来源渠道 | 否 | 新对接的客户可忽略 |
请求示例:
/external/company/searchList?cardId=VCENTCRM1032611873&cardPassWord=026E5988-2FE9-46B3-A8E7-6D062BE041AC&invoiceNo=92440105MACBERFE9K
返回参数说明:
参数名 | 说明说明 | 类型 | 备注 |
---|---|---|---|
code | 状态码 | string | 200:处理成功 其他状态码为处理失败 |
message | 返回描述 | string | 状态码不为200时返回失败描述 |
content | 公司信息 | List<DomainObj> |
DomainObj:
参数名 | 说明说明 | 类型 | 备注 |
---|---|---|---|
cardNo | 企业卡号 | string | |
name | 企业名称 | string | |
status | 企业状态 | string | W:待激活 I:在用 X:停用 |
memberLevel | 开卡等级 | string | C 企业金会员 D 企业银会员 J 企业玫瑰金会员 K 企业铂金会员 |
返回示例
{
"code": "200",
"message": "成功",
"content": [
{
"name": "广州市海珠区古老同红餐饮店",
"status": "I",
"memberLevel": "K"
}
],
"echoToken": "25991acd-4473-4430-95b6-1d1e9d29c578"
}
上传企业证照
接口地址:/external/uploadPicture
请求方式:POST
此接口配合6.1企业注册接口使用,在企业注册之前上传企业证照。每天限制最多调用200次
请求参数说明:
参数名 | 类型 | 参数说明 | 是否必填 | 备注 |
---|---|---|---|---|
cardId | string | 公司卡号 | 是 | TMC模式的渠道卡或直连卡号 |
cardPassWord | string | 公司卡密码 | 是 | TMC模式的渠道卡对应的验证码 或直连卡号对应的验证码 |
file | MultipartFile | 文件 | 是 | 支持格式:jpg,jpeg,gif,bmp,png,xls,xlsx,pdf,doc,docx 文件最大限制5M |
返回参数说明:
参数名 | 说明说明 | 类型 | 备注 |
---|---|---|---|
code | 状态码 | string | 200:处理成功 其他状态码为处理失败 |
message | 返回描述 | string | 状态码不为200时返回失败描述 |
content | 公司信息 | string | 文件对应的url。将返回值填入企业自主注册接口即可 |