Skip to main content

企业自主注册接口

企业注册类接口只对部分客户开放,需要业务配合。对接前请和华住的商务沟通,签署补充协议

创建企业卡

接口地址:/external/company/createOnline

请求方式:POST

请求参数说明:
参数名类型参数说明字段长度是否必填备注
cardIdstring公司卡号varchar(32)TMC模式的渠道卡或直连卡号
cardPassWordstring公司卡密码varchar(50)TMC模式的渠道卡对应的验证码 或直连卡号对应的验证码
companyNamestring企业名称varchar(50)
companyTaxpayerIdstring税号varchar(50)
legalPersonstring法人姓名varchar(20)
mailboxSuffixstring企业邮箱后缀varchar(500)多个邮箱用,隔开
addressstring公司地址varchar(100)
contactFullNamestring联系人姓名varchar(20)
contactMobilestring联系人手机varchar(11)
contactEmailstring联系人邮箱varchar(50)
contactSexstring性别varchar(1)M:男
W:女
contactIdNoTypestring证件类型varchar(10)C01 居民身份证
C06 护照
C07 其他
contactIdNostring证件号码varchar(20)
idNoAttachstring联系人附件varchar(200)调用6.1.6图片上传接口返回的图片url
licenseAttachstring公司营业执照varchar(200)调用6.1.6图片上传接口返回的图片url
levelCodestring公司卡级别varchar(1)B 金卡 公司注册资金≥3亿
C 玫瑰金 公司注册资金≥50万&<3亿
D 银卡 公司注册资金<50万 1.不传默认银卡 2.接口不支持直接开通铂金卡,可以先按照金卡提交,待和华住签完协议后联系商务升级
fillStatusvarchar(1)A 已补全
C 不需要
vnoHeaderstring来源渠道varchar(10)对接时华住提供
provinceCodestring所在省
cityCodestring所在市

请求示例:

{
"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状态码string200:处理成功
407:公司名称重复
403:公司已托管TMC 其他状态码为处理失败
message返回描述string状态码不为200时返回失败描述
content企业信息ExternalCompanyDTO状态码为200时返回企业外卡号
需对接方保存 后续操作华住企业卡需传入
ExternalCompanyDTO :
参数名说明说明类型备注
cardNo企业卡号string卡号请保存,后续绑定和查询需要
extCardNo企业外卡号string
status状态stringW:待激活
I:启⽤
X:停⽤
启用状态的卡才可以绑定员工

返回示例

{
"code": "200",
"message": "成功",
"content":{
"cardNo":"VCENTCRM1032609419",
"extCardNo":"0023MD132",
"status":"W"
}
}

企业信息补全

接口地址:/external/company/completionOnline

请求方式:POST

请求参数说明:
参数名类型参数说明字段长度是否必填备注
cardIdstring公司卡号varchar(32)TMC模式的渠道卡或直连卡号
cardPassWordstring公司卡密码varchar(50)TMC模式的渠道卡对应的验证码 或直连卡号对应的验证码
cardNostring企业卡号varchar(20)
companyFundstring注册资金varchar(10)5 3亿以上
1 50万~3亿
100 小于50万
companyIndustrstring行业类型varchar(10)见下方行业类型说明
hasChinaTopFiveHundredbool是否为中国500强企业4默认为false
hasWorldTopTwoThousandbool是否为全球2000强企业4默认为false
hasCountryOrCauseUnitbool是否为国家单位或国家事业单位4默认为false
hasCountryOwnerbool是否为市级及以上国有控股企业/实际利益人企业4默认为false
marketValuebigint市值15默认为0
最多15位
monthAvgTravelBudgetbigint月均差旅预算15默认为0
最多15位
oneMonthTravelNumberbigint单月差旅出行人次15默认为0
最多10位
yearEndTurnoverbigint年底营业额10默认为0
最多15位
fillStatusvarchar(1)A 已补全
B 未补全
C 不需要
D 已升级
E 已拒绝
activityIdstring来源渠道varchar(10)新对接的客户可忽略

行业类型说明:

编号说明
200000其他
200001零售商业连锁
200002户外体育用品
200003现代农业
200004餐饮连锁
200005酒店连锁
200006生物制药
200007软件开发
200008新能源
200009新材料
200010工业品制造
200011航空服务
200012医疗服务
200013金融服务
200014电信增值
200015文化传播
200016娱乐传媒
200017互联网门户
200018动漫开发
200019网络游戏
200020IT科技
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状态码string200:处理成功 其他状态码为处理失败
message返回描述string状态码不为200时返回失败描述

返回示例

{
"code": "200",
"message": "成功",
"echoToken": "097abc9e-48d0-4f6e-98be-7f8bef8e3ef8"
}

用企业卡号查询企业信息

接口地址:/external/company/search

请求方式:GET

请求参数说明:
参数名类型参数说明是否必填备注
cardIdstring公司卡号TMC模式的渠道卡或直连卡号
cardPassWordstring公司卡密码TMC模式的渠道卡对应的验证码 或直连卡号对应的验证码
cardNostring企业卡号
activityIdstring来源渠道新对接的客户可忽略

请求示例:

/external/company/search?cardId=VCENTCRM1032611873&cardPassWord=026E5988-2FE9-46B3-A8E7-6D062BE041AC&cardNo=VCENTCRM1032611873
返回参数说明:
参数名说明说明类型备注
code状态码string200:处理成功 其他状态码为处理失败
message返回描述string状态码不为200时返回失败描述
content公司信息DomainObj
DomainObj:
参数名说明说明类型备注
name企业名称string
status企业状态stringW:待激活
I:在用
X:停用
memberLevel开卡等级stringC 企业金会员
D 企业银会员
J 企业玫瑰金会员
K 企业铂金会员

返回示例

{
"code": "200",
"message": "成功",
"content": {
"name": "广州市海珠区古老同红餐饮店",
"status": "I",
"memberLevel": "K"
},
"echoToken": "ec45dc97-e138-4e39-8717-47a1cc3791af"
}

企业信息变更(回调接口)

说明:

企业信息变更、企业卡升级/降级、新增托管关系、被托管企业卡停用、解绑时,我们会回调接口通知客户。客户收到回调通知后请调用查询企业信息更新本地信息

回调方式:POST

请求参数**说明**:
参数名类型是否返回说明
encryptionTypestring加密方式,固定为SHA-256
cardNostring企业卡号
reqNostring流水号
operationTypestring通知类型
modify:信息更新
grade:等级变更
bind:绑定TMC
stop:卡下线
unbind:解绑TMC
timeMillislong时间戳
signstring签名

请求示例

{
"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

请求参数说明:
参数名类型参数说明是否必填备注
cardIdstring公司卡号TMC模式的渠道卡或直连卡号
cardPassWordstring公司卡密码TMC模式的渠道卡对应的验证码 或直连卡号对应的验证码
invoiceNostring税号
activityIdstring来源渠道新对接的客户可忽略

请求示例:

/external/company/searchList?cardId=VCENTCRM1032611873&cardPassWord=026E5988-2FE9-46B3-A8E7-6D062BE041AC&invoiceNo=92440105MACBERFE9K
返回参数说明:
参数名说明说明类型备注
code状态码string200:处理成功 其他状态码为处理失败
message返回描述string状态码不为200时返回失败描述
content公司信息List<DomainObj>
DomainObj:
参数名说明说明类型备注
cardNo企业卡号string
name企业名称string
status企业状态stringW:待激活
I:在用
X:停用
memberLevel开卡等级stringC 企业金会员
D 企业银会员
J 企业玫瑰金会员
K 企业铂金会员

返回示例

{
"code": "200",
"message": "成功",
"content": [
{
"name": "广州市海珠区古老同红餐饮店",
"status": "I",
"memberLevel": "K"
}
],
"echoToken": "25991acd-4473-4430-95b6-1d1e9d29c578"
}

上传企业证照

接口地址:/external/uploadPicture

请求方式:POST

此接口配合6.1企业注册接口使用,在企业注册之前上传企业证照。每天限制最多调用200次

请求参数说明:
参数名类型参数说明是否必填备注
cardIdstring公司卡号TMC模式的渠道卡或直连卡号
cardPassWordstring公司卡密码TMC模式的渠道卡对应的验证码 或直连卡号对应的验证码
fileMultipartFile文件支持格式:jpg,jpeg,gif,bmp,png,xls,xlsx,pdf,doc,docx 文件最大限制5M
返回参数说明:
参数名说明说明类型备注
code状态码string200:处理成功 其他状态码为处理失败
message返回描述string状态码不为200时返回失败描述
content公司信息string文件对应的url。将返回值填入企业自主注册接口即可