Spring使用阿里云号码隐私服务
产品简介
现在主要支持以下几种类型的使用场景
接下来主要是验收AXN分机号类型的使用
产品使用
开通服务
在阿里云控制台中找到号码隐私保护
注意:开通号码隐私服务的前提是账号已经进行了企业认证
新增资质
填写相关信息,提交申请,等待审核。
添加场景
创建号码池
创建要使用哪种类型的号码池,一个号码池只能使用同一类型的号码。
号码池创建之后,好像无法进行删除,只能进行修改操作
号码池创建之后必须配置使用场景,不然无法购买号码
申请号码
填写需要购买号码的相应信息。
提交之后,等待号码调拨完成
调拨完成之后进行购买
号码支付购买之后就会放入对应的号码池
SpringBoot调用api
导入Maven坐标
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dyplsapi20170525</artifactId>
<version>2.0.5</version>
</dependency>
自定义配置
yml配置
# 阿里云号码隐私
aliyun:
dyplsapi:
# 自己创建的号码池key
pool-key: xxxx
# 输入自己阿里云账号的ak
access-key-id: xxxx
access-key-secret: xxxx
java读取配置
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.dyplsapi")
public class DyplsapiProperties {
private String poolKey;
private String accessKeyId;
private String accessKeySecret;
}
号码操作工具类
@Slf4j
public class DyplsapiUtils {
public static Client createDyplsapiClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config()
.setAccessKeyId(accessKeyId)
.setAccessKeySecret(accessKeySecret);
return new Client(config);
}
public static BuySecretNoResponse BuySecretNo(Client client, String poolKey, Long specId, String city) throws Exception {
BuySecretNoRequest req = new BuySecretNoRequest()
.setPoolKey(poolKey)
.setSpecId(specId)
.setCity(city);
BuySecretNoResponse resp = client.buySecretNo(req);
if (!com.aliyun.teautil.Common.equalString(resp.body.code, "OK")) {
log.error("--------------------购买号码失败--------------------");
throw new TeaException(TeaConverter.buildMap(
new TeaPair("code", resp.body.code),
new TeaPair("message", resp.body.message)
));
}
log.info("--------------------购买号码成功--------------------");
return resp;
}
/**
* 分机号码绑定
* @param client 链接客户端
* @param poolKey 指定号码池
* @param phoneA 要转换的真实号码
* @param phoneNoX 要绑定的隐私号码(非必须-为null则在号码池内随机)
* @return
* @throws Exception
*/
public static BindAxnExtensionResponse BindAxnExtension(Client client, String poolKey, String phoneA, String phoneNoX) throws Exception {
BindAxnExtensionRequest req = new BindAxnExtensionRequest()
.setPoolKey(poolKey)
.setPhoneNoA(phoneA)
.setPhoneNoX(phoneNoX)
.setExpiration("2099-09-05 12:00:00");
BindAxnExtensionResponse resp = client.bindAxnExtension(req);
if (!com.aliyun.teautil.Common.equalString(resp.body.code, "OK")) {
log.error("--------------------绑定失败--------------------");
throw new TeaException(TeaConverter.buildMap(
new TeaPair("code", resp.body.code),
new TeaPair("message", resp.body.message)
));
}
log.info("------------绑定成功-------------");
return resp;
}
public static UpdateSubscriptionResponse UpdateSubscription(Client client, String subsId, String phoneNoX, String operateType) throws Exception {
UpdateSubscriptionRequest req = new UpdateSubscriptionRequest()
.setSubsId(subsId)
.setPhoneNoX(phoneNoX)
.setOperateType(operateType);
UpdateSubscriptionResponse resp = client.updateSubscription(req);
if (!com.aliyun.teautil.Common.equalString(resp.body.code, "OK")) {
log.error("--------------------修改绑定关系失败--------------------");
throw new TeaException(TeaConverter.buildMap(
new TeaPair("code", resp.body.code),
new TeaPair("message", resp.body.message)
));
}
log.info("------------修改绑定关系成功-------------");
return resp;
}
public static void UnbindSubscription(Client client,String poolKey, String subsId, String secretNo) throws Exception {
UnbindSubscriptionRequest req = new UnbindSubscriptionRequest()
.setPoolKey(poolKey)
.setSubsId(subsId)
.setSecretNo(secretNo);
UnbindSubscriptionResponse resp = client.unbindSubscription(req);
if (!com.aliyun.teautil.Common.equalString(resp.body.code, "OK")) {
log.error("解绑失败");
throw new TeaException(TeaConverter.buildMap(
new TeaPair("code", resp.body.code),
new TeaPair("message", resp.body.message)
));
}
log.info("解绑成功;虚拟号:{}",secretNo);
}
}
使用的时候只要想传入配置参数,再初始化连接客户端,再调用相关操作即可
注意事项
号码复用次数问题
AXN分机号支持同时绑定200次不同的手机号。不可以为同一个号码绑定相同虚拟号码。简单来说就是为同一个号码设置相同的虚拟号下面的不同分机号是不可行的。
号码之间互相拨打问题
绑定了同一个虚拟号下面不同分机号的手机号,是不可以互相拨打的。
例如:X是虚拟号码1707777,小明的手机号是1303333绑定了X虚拟号,并且分配的分机号为101。这时候,未绑定过X虚拟号码(或者绑定的是其他的虚拟号)的小黑可以通过拨打1707777+101转接到小明。如果小黑的手机号也跟X进行了绑定,那么小黑再次拨打就会1707777就会转接到为该虚拟号设置的默认号码上,无法进入输入分机号的步骤。
简单来说,绑定过X的再拨打X号码只会转接到默认号码,如果未设置默认号码那就是空号。
如果要实现两个号码之间通过分机号能互相拨通,那就只能分别绑定不同的隐私号码X