携号转网给用户带来了方便,使得运营商之间进入良性竞争。
但是由此带来了一些小问题,原来我们可以清楚的知道139号码是移动运营商 131是联通 133是电信。
可是现在这一切都不能再准确的判断用户的运营商了。这样对于一些依靠运营商对号码进行区分的业务变得困难,比如短信接口,充值接口,有客户找我想办法解决这一问题,但是如何判断所属真实的运营商呢?
解决方案:直接找运营商问是不现实的。我们只能通过公开的渠道来判断。原理很简单 那就是 三大运营商的官网
比如139XXXX8888 目测此号码一定是移动。我们先在移动官网对此号码进行充值,如果号码此号码是移动号码 那么可以继续充值步骤 如果不是移动号码 会有相应的提示,然后再到联通官网做充值测试,最后到电信官网做同样的测试。那么解决问题就非常简单了 每个号码 在三大运营官网 进行充值判断即可。在对此流程做一个自动化处理软件 问题 解决。
凡是总有解决办法。下面附上 软件截图和部分代码。
部分实现逻辑:
switch (qzOrder.myPropDic["原始运营商"])
{
case "中国移动":
GetBaseInfo_YD(qzOrder, ChannelArgs);
if (qzOrder.myPropDic["中国移动"] == "否")
{
GetBaseInfo_LT(qzOrder, ChannelArgs);
if (qzOrder.myPropDic["中国联通"] == "否")
{
GetBaseInfo_DX(qzOrder, ChannelArgs);
if (qzOrder.myPropDic["中国电信"] == "是")
{
qzOrder.myPropDic["新运营商"] = "中国电信";
}
}
else
{
qzOrder.myPropDic["新运营商"] = "中国联通";
}
}
break;
case "中国联通":
GetBaseInfo_LT(qzOrder, ChannelArgs);
if (qzOrder.myPropDic["中国联通"] == "否")
{
GetBaseInfo_YD(qzOrder, ChannelArgs);
if (qzOrder.myPropDic["中国移动"] == "否")
{
GetBaseInfo_DX(qzOrder, ChannelArgs);
if (qzOrder.myPropDic["中国电信"] == "是")
{
qzOrder.myPropDic["新运营商"] = "中国电信";
}
}
else
{
qzOrder.myPropDic["新运营商"] = "中国移动";
}
}
break;
case "中国电信":
GetBaseInfo_DX(qzOrder, ChannelArgs);
if (qzOrder.myPropDic["中国电信"] == "否")
{
GetBaseInfo_YD(qzOrder, ChannelArgs);
if (qzOrder.myPropDic["中国移动"] == "否")
{
GetBaseInfo_LT(qzOrder, ChannelArgs);
if (qzOrder.myPropDic["中国联通"] == "是")
{
qzOrder.myPropDic["新运营商"] = "中国联通";
}
}
else
{
qzOrder.myPropDic["新运营商"] = "中国移动";
}
}
break;
default:
qzOrder.myPropDic["原始运营商"] = "未知";
break;
}
其实关于此类服务 无外乎几种方式实现:
1 自己调用运营商官方充值接口 做充值前预判
2 通过第三方接口实现 本想推荐给大家奈何审核不过