Spring使用阿里云号码隐私服务

Spring使用阿里云号码隐私服务

产品简介

官方地址

现在主要支持以下几种类型的使用场景

image-20240130145754657

接下来主要是验收AXN分机号类型的使用

产品使用

开通服务

在阿里云控制台中找到号码隐私保护

image-20240130150136280

注意:开通号码隐私服务的前提是账号已经进行了企业认证

新增资质

image-20240130150419509

image-20240130150440330

填写相关信息,提交申请,等待审核。

添加场景

image-20240130150617597

image-20240130150628686

创建号码池

image-20240130150712156

创建要使用哪种类型的号码池,一个号码池只能使用同一类型的号码。

号码池创建之后,好像无法进行删除,只能进行修改操作

号码池创建之后必须配置使用场景,不然无法购买号码

申请号码

image-20240130151249598

image-20240130151321969

填写需要购买号码的相应信息。

提交之后,等待号码调拨完成

调拨完成之后进行购买

image-20240130151519066

号码支付购买之后就会放入对应的号码池

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就会转接到为该虚拟号设置的默认号码上,无法进入输入分机号的步骤。

image-20240130153802048

简单来说,绑定过X的再拨打X号码只会转接到默认号码,如果未设置默认号码那就是空号。

如果要实现两个号码之间通过分机号能互相拨通,那就只能分别绑定不同的隐私号码X

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值