package com.boco.nbd.wios.flow.util; import cn.hutool.core.date.DatePattern; import com.aliyun.oss.ServiceException; import com.aliyuncs.CommonRequest; import com.aliyuncs.CommonResponse; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.http.MethodType; import com.aliyuncs.profile.DefaultProfile; import com.boco.nbd.wios.flow.entity.SecretBindDTO; import com.boco.nbd.wios.manage.contants.WiosConstant; import com.ihidea.core.util.JSONUtilsEx; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Map; /** * 号码隐私保护工具类 * * @author xgl * @version [版本号, 2020年12月21日] */ public class PhoneNumProtectionUtil { private static Logger logger = LoggerFactory.getLogger(PhoneNumProtectionUtil.class); private static final String ALI_APPKEY = "LTAI5tFo5PHXPUEGP7zrbSGe"; private static final String ALI_APPSECRET = "jU3mM34HWPdPKLnao9aF1ZFURt5sj3"; public static final String ALI_POOLKEY = "FC100000118866049"; public static void buySecretNo() throws Exception { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", ALI_APPKEY, ALI_APPSECRET); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain("dyplsapi.aliyuncs.com"); request.setSysVersion("2017-05-25"); // 调用BuySecretNo接口购买号码。 request.setSysAction("BuySecretNo"); request.putQueryParameter("RegionId", "cn-hangzhou"); request.putQueryParameter("PoolKey", ALI_POOLKEY); // 号码类型。其中:1表示虚商号码,即170或171。2表示运营商号码。3表示95号码。 request.putQueryParameter("SpecId", "1"); // 城市 request.putQueryParameter("City", "全国"); CommonResponse response = client.getCommonResponse(request); String responseData = response.getData(); logger.info("[buySecretNo]responseData:{}", responseData); Map map = JSONUtilsEx.deserialize(responseData, Map.class); Object code = map.get("Code"); if (code != null && WiosConstant.OK.equals(code.toString())) { return; } throw new ServiceException("购买失败,错误码:" + code); } public static SecretBindDTO bindAxn(String phone) throws Exception { SecretBindDTO returnValue = new SecretBindDTO(); SimpleDateFormat sdf = new SimpleDateFormat(DatePattern.NORM_DATETIME_PATTERN); Calendar cal = Calendar.getInstance(); cal.add(Calendar.MONTH, 2); DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", ALI_APPKEY, ALI_APPSECRET); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain("dyplsapi.aliyuncs.com"); request.setSysVersion("2017-05-25"); // 调用接口BindAxn添加AXN号码的绑定关系。 request.setSysAction("BindAxn"); request.putQueryParameter("RegionId", "cn-hangzhou"); request.putQueryParameter("PhoneNoA", phone); request.putQueryParameter("Expiration", sdf.format(cal.getTime())); request.putQueryParameter("PoolKey", ALI_POOLKEY); request.putQueryParameter("CallDisplayType", "2"); CommonResponse response = client.getCommonResponse(request); String responseData = response.getData(); logger.info("[bindAxn]phone={},responseData:{}", phone, responseData); Map map = JSONUtilsEx.deserialize(responseData, Map.class); returnValue.setCode(map.get("Code") == null ? null : map.get("Code").toString()); Object obj = map.get("SecretBindDTO"); if (obj != null) { Map<String, Object> objectMap = (Map<String, Object>)obj; returnValue.setSecretNo(objectMap.get("SecretNo") == null ? null : objectMap.get("SecretNo").toString()); returnValue.setSubsId(objectMap.get("SubsId") == null ? null : objectMap.get("SubsId").toString()); } returnValue.setExpiredDate(cal.getTime()); return returnValue; } public static void unbindSubscription(String subsId, String secretNo) throws Exception { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", ALI_APPKEY, ALI_APPSECRET); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain("dyplsapi.aliyuncs.com"); request.setSysVersion("2017-05-25"); // 调用接口UnbindSubscription解除号码的绑定关系。 request.setSysAction("UnbindSubscription"); request.putQueryParameter("RegionId", "cn-hangzhou"); request.putQueryParameter("SubsId", subsId); request.putQueryParameter("SecretNo", secretNo); request.putQueryParameter("PoolKey", ALI_POOLKEY); CommonResponse response = client.getCommonResponse(request); String responseData = response.getData(); logger.info("[unbindSubscription]subsId={},secretNo={},responseData:{}", subsId, secretNo, responseData); Map map = JSONUtilsEx.deserialize(responseData, Map.class); Object code = map.get("Code"); if (code != null && WiosConstant.OK.equals(code.toString())) { return; } throw new ServiceException("解绑失败,错误码:" + code); } public static void releaseSecretNo(String secretNo) throws Exception { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", ALI_APPKEY, ALI_APPSECRET); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain("dyplsapi.aliyuncs.com"); request.setSysVersion("2017-05-25"); // 调用接口ReleaseSecretNo释放号码。 request.setSysAction("ReleaseSecretNo"); request.putQueryParameter("RegionId", "cn-hangzhou"); request.putQueryParameter("PoolKey", ALI_POOLKEY); // 需要释放的隐私号码,需要填写完整的手机号码 request.putQueryParameter("SecretNo", secretNo); CommonResponse response = client.getCommonResponse(request); String responseData = response.getData(); logger.info("[releaseSecretNo]secretNo={},responseData:{}", secretNo, responseData); Map map = JSONUtilsEx.deserialize(responseData, Map.class); Object code = map.get("Code"); if (code != null && WiosConstant.OK.equals(code.toString())) { return; } throw new ServiceException("释放失败,错误码:" + code); } public static void querySecretNoRemain() throws Exception { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", ALI_APPKEY, ALI_APPSECRET); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain("dyplsapi.aliyuncs.com"); request.setSysVersion("2017-05-25"); // 调用接口QuerySecretNoRemain查询线上可购号码余量。 request.setSysAction("QuerySecretNoRemain"); request.putQueryParameter("RegionId", "cn-hangzhou"); // 号码类型。其中:1表示虚商号码,即170或171。2表示运营商号码。3表示95号码。 request.putQueryParameter("SpecId", "1"); // 号码的归属地。 request.putQueryParameter("City", "杭州"); // 号码前缀,最长18位 request.putQueryParameter("SecretNo", "180"); CommonResponse response = client.getCommonResponse(request); System.out.println(response.getData()); System.out.println(response.getHttpStatus()); } }