智能拓客内嵌接入方案(企业自用)

前言

该解决方案旨在合作客户通过简单的接入几个接口,即可快速将小蓝本的拓客页面内嵌到已有的系统中。

在接入前,需要联系客户经理开通相应的功能权限。

系统接入时必须接入的有:1、获取跳转登录系统的完整URL;2、接收系统回调的数据

API接口

前置说明

以下所有接口均是由你的服务端发起的http调用,接口响应按标准的restful风格,请求体与响应体如有的,均为json格式

所有的请求头需要包含accessId及accessToken

accessId即系统分配给你的标识ID

accessToken即系统分配给你的访问授权密钥

请求的基础URL为: https://api.xiaolanben.com

标准curl示例

curl -X PUT --header 'Content-Type: application/json' --header 'accessToken: 你的token' --header 'accessId: 你的id' -d '{ \ 
   "dailyLimit": 100, \ 
   "monthlyLimit": 900, \ 
   "totalLimit": 5000, \ 
   "confirmAdd": true, 
 }' 'https://api.xiaolanben.com/blue-crm/api/v1/open/oem/customer/unlockLimit'

系统使用标准的restful风格;所有的错误均以>=400的http状态码返回;具体的错误内容会在响应体中返回

{"trackingId":"我是问题反馈的跟踪ID","errors":[{"code":我是int错误码,"message":"我是错误原因"}]}
如:
{"trackingId":"55fbef73-2cd2-4a13-ad4a-73ba78879a29","errors":[{"code":400,"message":"请输入正确的时间"}]}

获取跳转登录系统的完整URL

POST /blue-crm/api/v1/open/oem/customer/getLoginUrl

入参

参数名数据类型数据域备注
createAccountSTRINGbody登录同是否自动创建账号 1为当手机号未创建过账号时自动创建 0不创建,如果不存在则报错
accountMobileSTRINGbody账号手机号
accountNameSTRINGbody账号名称-一般用人姓名; 当未输入并且自动创建账号时,取手机号末尾4位
returnUrlSTRINGbody非必传。在拓客系统用户免登登录超时或失败时,系统会自动回跳转回该URL(需要符合URL标准格式)
customDomainSTRINGbody非必传。如果在小蓝本配置过自定义域名的,则可以传入该域名(需要符合URL标准格式)。如:https://leads.pi51.cn
appCategoryINTbody非必传,在未传入customDomain有效。如果您开通了多个版本的拓客,则可以通过该值控制想要的版本路径。0通过版/2金融版/3财税版/4会展版/5招商版
routingSTRINGbody非必传。页面路由,不能带#符,具体参考小蓝本官方拓客页路由。如:/newUser/search/companySearch
noHeadBOOLbody非必传。有路由时有效。如果传入true,则不显示拓客页面头部信息
noMenuBOOLbody非必传。有路由时有效。如果传入true,则不显示页面左侧菜单信息

出参

参数名数据类型备注
accountIdINT当前登录员工的账号标识ID,用于数据回调接口时使用
urlSTRING终端获客用户操作的平台URL;用于在前端跳转到使用,链接有效期为30秒

获取我的企业详细信息

GET /blue-crm/api/v1/open/oem/customer/myInfo

入参

出参

参数名数据类型备注
customerIdINT我的企业标识
customerNameSTRING我的企业名称
accountNumINT有效账号数
unlockNumINT总解锁量
availableUnlockNumINT可用解锁量
dailyLimitINT每日每人可解锁企业数量限制
monthlyLimitINT每月每人可解锁企业数量限制
totalLimitINT总的每人可解锁企业数量限制
enableDateSTRING启用时间yyyy-MM-dd
expireDateSTRING有效期至yyyy-MM-dd
gmt51CreateSTRING创建时间yyyy-MM-dd HH:mm:ss
statusINT状态,0未生效/1有效/2已过期/10已删除
statusDescSTRING状态描述

设置默认的解锁量限制配置

PUT /blue-crm/api/v1/open/oem/customer/unlockLimit

入参

参数名数据类型数据域备注
dailyLimitINTbody单个员工每日解锁企业数上限
monthlyLimitINTbody单个员工每月解锁企业数上限
totalLimitINTbody单个员工总解锁企业数据上限

出参

无,响应http码204

获取员工的解锁量限制配置

GET /blue-crm/api/v1/open/oem/customer/account/unlockLimit

入参

出参

参数名数据类型备注
该响应体为数据数组
–idLONG记录标识
–accounts{accountId:accountName}员工账号与账号名称对照表,如{123:”张三”,456:”李四”}
–dailyLimitINT每日解锁企业数上限
–monthlyLimitINT每月解锁企业数上限
–totalLimitINT解锁企业数上限
–gmt51ModifySTRING最后修改时间如2022-01-02 14:23:32

添加员工的解锁量配置限制

POST /blue-crm/api/v1/open/oem/customer/account/unlockLimit

入参

参数名数据类型数据域备注
accountIdsARRAY<INT>body设置的账号ID集合
dailyLimitINTbody每日解锁企业数上限
monthlyLimitINTbody每月解锁企业数上限
totalLimitINTbody解锁企业数上限
confirmAddBOOLEANbody如果未传或为false时,当指定的员工在其它规则中已经存在,系统则会响应409;如果为true,则会强制更新其它规则

出参

参数名数据类型备注
idLONG记录标识
accounts{accountId:accountName}员工账号与账号名称对照表,如{123:”张三”,456:”李四”}
dailyLimitINT每日解锁企业数上限
monthlyLimitINT每月解锁企业数上限
totalLimitINT解锁企业数上限
gmt51ModifySTRING最后修改时间如2022-01-02 14:23:32

修改指定的员工解锁量配置限制

PUT /blue-crm/api/v1/open/oem/customer/account/unlockLimit/{id}

入参

参数名数据类型数据域备注
idLONGpath要修改的具体记录标识ID
accountIdsARRAY<INT>body设置的账号ID集合
dailyLimitINTbody每日解锁企业数上限
monthlyLimitINTbody每月解锁企业数上限
totalLimitINTbody解锁企业数上限
confirmAddBOOLEANbody如果未传或为false时,当指定的员工在其它规则中已经存在,系统则会响应409;如果为true,则会强制更新其它规则

出参

参数名数据类型备注
idLONG记录标识
accounts{accountId:accountName}员工账号与账号名称对照表,如{123:”张三”,456:”李四”}
dailyLimitINT每日解锁企业数上限
monthlyLimitINT每月解锁企业数上限
totalLimitINT解锁企业数上限
gmt51ModifySTRING最后修改时间如2022-01-02 14:23:32

删除指定的员工解锁量配置限制

DELETE /blue-crm/api/v1/open/oem/customer/account/unlockLimit/{id}

入参

参数名数据类型数据域备注
idLONGpath要删除的具体记录标识ID

出参

无,响应http码204

获取生效中及待生效的账号数记录

GET GET /blue-crm/api/v1/open/oem/customer/authLimit

入参

出参

参数 名数据类型备注
该响应体为数组数组
idLONG数据ID
effectiveTimeSTRING生效时间
expireTimeSTRING有效截止时间
limitValueSTRING账号数
statusSTRING状态

获取所有的账号列表

GET /blue-crm/api/v1/open/oem/customer/validAccounts

入参

参数名数据类型数据域备注
keywordSTRINGquery可空。搜索的关键字
pageIndexINTquery页面索引,从1开始
pageSizeINTquery页面大小,最小2,最大100

出参

参数名数据类型备注
pageIndexINT页面索引
pageSizeINT页面大小
totalCountINT总记录数
dataARRAY具体的数据数组
–accountIdINT账号标识ID
–accountNameSTRING账号名称
–accountMobileSTRING账号手机号

新建账号

POST/blue-crm/api/v1/open/oem/customer/account

入参

参数名数据类型数据域备注
accountNameSTRINGbody账号名称(姓名),最少1个字,最多10个字
accountMobileSTRINGbody账号手机号,

出参

参数名数据类型备注
accountIdINT账号标识

编辑账号

PUT /blue-crm/api/v1/open/oem/customer/account/{accountId}

入参

参数名数据类型数据域备注
accountIdINTpath要编辑的账号标识
accountNameSTRINGbody账号名称(姓名),最少1个字,最多10个字
accountMobileSTRINGbody账号手机号,如果不传该值,则是不更新;如果传了,仅可更新还没有登录过或创建过账号的记录

出参

无,响应http码204

删除账号

DELETE /blue-crm/api/v1/open/oem/customer/account/{accountId}

入参

参数名数据类型数据域备注
accountIdINTpath要编辑的账号标识

出参

无,响应http码204

设置数据回调地址

PUT /blue-crm/api/v1/open/oem/customer/callbackUrl

入参

参数名数据类型数据域备注
urlSTRINGbody要设置的完整地址,仅支持域名格式

出参

无,响应http码204

获取页面按钮配置列表

GET /blue-crm/api/v1/open/oem/customer/buttons

入参

出参

参数名数据类型备注
数据列表[]按钮列表
–idLONG记录标识
–buttonIdSTRING按钮回传标识,唯一
–buttonTextSTRING按钮显示文本
–viewPagesARRAY<STRING>显示页面标识代码数组,码列表如下:
searchCompany 找企业列表
advanceSearch 高级搜索列表
exhibitorSearch 找展商
batchQuery 批量查询
companyHome 企业主页
unlockList 解锁列表
mapCompany 地图拓客

增加页面按钮配置

POST/blue-crm/api/v1/open/oem/customer/button

入参

参数名数据类型数据域备注
buttonIdSTRINGbody按钮回传标识,需要唯一;2~16个字府
buttonTextSTRINGbody按钮显示名称,2~8个字符
viewPagesARRAY<STRING>body显示页面的标识码,码列表如下:
searchCompany 找企业列表
advanceSearch 高级搜索列表
exhibitorSearch 找展商
batchQuery 批量查询
companyHome 企业主页
unlockList 解锁列表
mapCompany 地图拓客

出参

参数名数据类型备注
idLONG记录标识
buttonIdSTRING按钮回传标识,唯一
buttonTextSTRING按钮显示文本
viewPagesARRAY<STRING>显示页面标识代码数组

编辑页面按钮配置

PUT /blue-crm/api/v1/open/oem/customer/button/{id}

入参

参数名数据类型数据域备注
idLONGpath记录标识
buttonIdSTRINGbody按钮回传标识,需要唯一;2~16个字府
buttonTextSTRINGbody按钮显示名称,2~8个字符
viewPagesARRAY<STRING>body显示页面的标识码,码列表如下:
searchCompany 找企业列表
advanceSearch 高级搜索列表
exhibitorSearch 找展商
batchQuery 批量查询
companyHome 企业主页
unlockList 解锁列表
mapCompany 地图拓客

出参

参数名数据类型备注
idLONG记录标识
buttonIdSTRING按钮回传标识,唯一
buttonTextSTRING按钮显示文本
viewPagesARRAY<STRING>显示页面标识代码数组

删除页面按钮配置

DELETE /blue-crm/api/v1/open/oem/customer/button/{id}

入参

参数名数据类型数据域备注
idLONGpath记录标识

出参

无,响应http码204

获取解锁分组标签

GET /blue-crm/api/v1/open/oem/customer/unlockTags

入参

出参

参数名数据类型备注
数据列表ARRAY数据数组
–idLONG记录标识
–dictKeySTRING分组的key标识
–dictNameSTRING分组的名称
–dictDescSTRING分组的描述
–orderNoSTRING排序序号

添加解锁分组标签

POST /blue-crm/api/v1/open/oem/customer/unlockTag

入参

参数名数据类型数据域备注
dictNameSTRINGbody分组的名称 1~20字符
dictDescSTRINGbody分组的描述 1~50字符

出参

无,响应http码204

编辑解锁分组标签

PUT /blue-crm/api/v1/open/oem/customer/unlockTag/{id}

入参

参数名数据类型数据域备注
idLONGpath记录标识
dictNameSTRINGbody分组的名称 1~20字符
dictDescSTRINGbody分组的描述 1~50字符

出参

无,响应http码204

删除解锁分组标签

DELETE/blue-crm/api/v1/open/oem/customer/unlockTag/{id}

入参

参数名数据类型数据域备注
idLONGpath记录标识

出参

无,响应http码204

接口回调

该系列接口用于当操作员操作数据后,小蓝本以POST JSON方式向该URL发送业务数据,你方在收到并处理成功后响应结果JSON

所有接口调用超时时长固定为3秒,如果超过3秒未响应,拓客系统则会当成默认处理

数据签名

由小蓝本发送来的数据,在请求的url路径后,会自动追加签名参数data_sign

该签名参数是直接对发送请求的body块字符串进行RSA加签,收到后可以通过RSA的公钥进行验证

RSA签名算法为SHA1WithRSA

RSA签名验证公钥base64编码为

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrYYOJGFKnXyILiSlXdD2vLGbwfEZz3nynNe066y1SCLI1MTDzRRgfdgMVTmPr95uu4nE3iE5O145RzeNF47UUMuYqBsKP9kjc+0qHdM2d90S3NBuL4U1nSkWnxb4Nq/nGpnQ/ItglSJaf4ejLQEEsImPPCyXDDrHqEuIltffkzwIDAQAB
JAVA代码
import java.security.Signature;
import java.security.SignatureException;
import java.nio.charset.Charset;
import java.security.NoSuchAlgorithmException;
import java.security.InvalidKeyException;
import org.apache.commons.codec.binary.Base64;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.security.KeyFactory;


public class RSAUtils {
    private static final String RSA_SIGNATURE_ALGORITHM = "SHA1WithRSA";
    private static final String RSA_ALGORITHM = "RSA";

    /**
     * RSA验签
     *
     * @param content    待验签的内容-取自body块原文
     * @param base64Sign base64待验的签名
     * @param publicKey  验签使用的base公钥
     * @param charset    字符集 固定UTF-8
     * @return 返回验签结果
     */
    public static boolean rsaCheck(String content, String base64Sign, String base64Key, Charset charset)
        throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
        byte[] keyBytes = Base64.decodeBase64(base64Key);
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);
        PublicKey publicKey = keyFactory.generatePublic(keySpec);
        Signature signature = Signature.getInstance(RSA_SIGNATURE_ALGORITHM);
        signature.initVerify(publicKey);
        signature.update(content.getBytes(charset));

        return signature.verify(Base64.decodeBase64(base64Sign.getBytes(charset)));
    }
}
PHP示例
<?php
function rsaCheck($content, $base64Sign, $base64Key) {
    $base64Key="-----BEGIN PUBLIC KEY-----\n".$base64Key."\n-----END PUBLIC KEY-----\n";
    $res = openssl_pkey_get_public($base64Key);
    $detail = openssl_pkey_get_details($res);
    $pkey= $detail['key'];
    $sign=base64_decode($base64Sign);
    return openssl_verify($content, $sign, $pkey);
}
?>

自定义按钮点击回调接口

当终端操作用户在 找企业、地图拓客 等模块,点击自定义的按钮后,则立即触发该接口回调逻辑

如果回调失败,则会直接提示终端操作用户错误信息

当一次圈选大批次数据时,系统内部自动分成400条记录一个子批次进行回调,因此,终端用户点击一次,你可能会收到很多次回调数据

请求参数

参数名数据类型数据域备注
data_signSTRINGquery数据信息体的签名
batchNoSTRINGbody批次号,如果一个点击拆分成多次回调,则批次号会是xxxxx-123样式
customerIdINTbody你的企业ID
accountIdINTbody操作者的账号ID
buttonIdSTRINGbody点击按键的标识ID,由自定义按键处定义
entList数组body回调的企业列表
remarkSTRNGbody添加到OEM弹层用户输入的备注字段
–eidSTRINGbody企业唯一标识
–nameSTRINGbody企业名称
–brandSTRINGbody企业品牌
–logoSTRINGbody企业logo
–contactWayNumINTbody联系人数
–shortNameSTRINGbody企业简称
–companyFrNameSTRINGbody法人名称
–rankDOUBLEbody实力值(小蓝本自有算法值)
–esdateSTRINGbody成立日期
–companyStatusNameSTRINGbody企业状态名称
–phoneCntSTRINGbody活跃手机号数目, 可能会显示为12个,如果没有可能为–
–kpPhoneCntSTRINGbody活跃KP手机号数
–companyFrPidSTRINGbody公司法人pid
–stockCodeSTRINGbody股票代码
–stockShortnameSTRINGbody股票简称
–regcapDOUBLEbody注册资本
–ssNumINTbody参保人数
–statusINTbody状态
–regAreaSTRINGbody注册地
–capTypeNameSTRINGbody资本类型
–regGroupNameSTRINGbody所属集团,小蓝本算法值
–acConamDOUBLEbody实缴资本
–areas字符串数组body所属省市区 如 [“浙江”, “杭州市”, “西湖区”]
–industryphyNameSTRINGbody所属行业
–esageINTbody成立年限
–investAmountDOUBLEbody对外投资
–listingDateLatestSTRINGbody上市日期 yyyy-MM-dd
–opscopeSTRINGbody经营范围
–roundStageSTRINGbody融资阶段
–regDesSTRINGbody企业简介
–emails字符串数组body邮箱 如 [“12345@qq.com”, “12343@163.com”]
–regCapCurNameSTRINGbody注册资本币别
–websiteSTRINGbody网站, 多个时仅返回第一个
–orgTypeName1STRINGbody机构类型 二级分类第1层
–orgTypeName2STRINGbody机构类型 二级分类第2层
–ecoTypeName1STRINGbody经济类型 二级分类第1层
–ecoTypeName2STRINGbody经济类型 二级分类第2层
–contactList数组body联系人列表
—-pidSTRINGbody联系人标识ID
—-nameSTRINGbody联系人名称
—-deptSTRINGbody部门
—-positionSTRINGbody职位
—-phoneSTRINGbody手机
—-telSTRINGbody固话
—-emailSTRINGbodyemail
—-logoSTRINGbodylogo
—-sourceSTRINGbody号码来源字段,注该字段为一个复杂的JSON结构[{“groupName”:”B2B”,”sources”:[{“name”:”xxx”,”url”:”url”}]}]
—-isKpBOOLbody是否是KP
—-eidCountINTbody同一个联系方式的企业数

响应体格式

响应体仅支持JSON格式

字段名数据类型备注
successBOOL如果处理成功则返回true;如果处理失败则返回false; 如果返回的是false,在分批次时,则会中断后续的任务
successNumINT处理成功的企业记录数
failedNumINT处理时过滤忽略处理的企业记录数,如该企业已经被另外一个员工占有时
successContactNumINT处理成功的联系人数
messageSTRING处理成功或失败的提示消息

页面内嵌方案

在用户获取到的免登链接打开的拓客页面,系统支持增加参数方式,嵌入到内部系统中

nohead=1 则会不显示页面头

nomenu=1 则不会显示页面菜单

该两个参数以&nohead=1&nomenu=1方式追加至免登链接中

如果想直接跳转至指定页时,需要在获取到的免登链接中,将目标页面的路由添加到URL中

如:高级搜索页,则是https://leads.pi51.cn/#/newUser/advancedSearch?login_id=xxx&login_key=xxxx&login_sign=xxxx&return_url=xxxx