自有订单系统 嵌入 企客聊侧边栏
应用场景
准备工作
企客聊客户端(其中一端配置即可):
APP: 完成 我的 - 订单账号设置
PC: 完成 设置 - 更多设置 - 自有订单账号设置
接口规范(第三方系统能够从客户端侧边栏中获取到的参数)
{自建CRM系统URL}?Type=WL&PKID={0}&time={1}&neber={2}&UserID={3}
参数名 | 数据类型 | 说明 |
---|---|---|
Type | string | 接口类型.默认值=WL |
Time | string | 时间戳,DateTime时间格式,精确到秒 |
neber | string | 6位随机数 |
PKID | string | 报文体【密文】=> 使用【密钥】解密 |
UserID | string | 自有订单用户名【密文】=> 使用【系统私钥】解密 |
[报文体] 明文参数说明
UserID=&Timestamp=&WX=&TEL=&Number=&sign=&merchantid=&wechat=&uid=&originalId=&dockPwd=
参数名 | 数据类型 | 说明 |
---|---|---|
UserID | string | 自建系统用户名 |
dockPwd | string | 自建系统用户密码(可用于验证用户名是否正确,实现自动登录) |
WX | string | 微信号 |
TEL | string | 手机号码 |
Number | string | 机号 |
merchantid | string | 商户号 |
originalId | string | 原始微信号 |
string | 运营机微信号 | |
uid | string | 预留值 |
Timestamp | int | 时间戳 |
sign | string | 加密盐 |
解密规范
系统私钥 为企客聊后台 - 后勤 - CRM对接配置 中配置的【私钥】参数
下单URL 为企客聊后台 - 后勤 - CRM对接配置 中配置的【下单url】参数
密钥 组成:系统私钥(私钥为空时默认使用下单URL) + “?sign=” + 入参随机数 + 自有订单用户名 + 入参时间戳
/// <summary>
/// 解密方法:Des3Encode(密文, 密钥)
/// </summary>
/// <param name="text"></param>
/// <param name="strKey"></param>
/// <returns></returns>
public static string Des3Decode(string text, string strKey)
{
System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
byte[] key = build3DesKey(strKey);
byte[] iv = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
byte[] data = Convert.FromBase64String(text);
byte[] str2 = Des3DecodeECB(key, iv, data);
return System.Text.Encoding.UTF8.GetString(str2).TrimEnd('\0');
}
/// <summary>
/// DES3 ECB模式解密
/// </summary>
/// <param name="key">密钥</param>
/// <param name="iv">IV(当模式为ECB时,IV无用)</param>
/// <param name="str">密文的byte数组</param>
/// <returns>明文的byte数组</returns>
static byte[] Des3DecodeECB(byte[] key, byte[] iv, byte[] data)
{
MemoryStream msDecrypt = new MemoryStream(data);
TripleDESCryptoServiceProvider tdsp = new TripleDESCryptoServiceProvider();
tdsp.Mode = CipherMode.ECB;
tdsp.Padding = PaddingMode.PKCS7;
CryptoStream csDecrypt = new CryptoStream(msDecrypt,
tdsp.CreateDecryptor(key, iv),
CryptoStreamMode.Read);
byte[] fromEncrypt = new byte[data.Length];
csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
return fromEncrypt;
}
/// <summary>
/// 装成24位字节数组
/// </summary>
/// <param name="keyStr"></param>
/// <returns></returns>
static byte[] build3DesKey(String keyStr)
{
System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
byte[] key = new byte[24];
byte[] temp = utf8.GetBytes(keyStr);
if (key.Length > temp.Length)
{
System.Array.Copy(temp, 0, key, 0, temp.Length);
}
else
{
System.Array.Copy(temp, 0, key, 0, key.Length);
}
return key;
}
/// <summary>
/// base64转string
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public static string getbase64tostring(string text)
{
byte[] data = Convert.FromBase64String(text);
return System.Text.Encoding.UTF8.GetString(data).TrimEnd('\0');
}