华为云号码隐私保护AXB AXYB模式代码二次封装

在华为云号码隐私保护给的样例代码上进行二次封装

controller

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.oss.oss_demo.entity.*;
import com.oss.oss_demo.service.AXBInterface;
import com.oss.oss_demo.service.AXYBInterface;
import com.oss.oss_demo.service.impl.AXBInterfaceImpl;
import com.oss.oss_demo.service.impl.AXYBInterfaceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/huaweicloud/secret")
@Api(tags = "华为云号码隐私保护")
public class HuaWeiSecretController {



    private final static String OMPAPPKEY = ""; // APP_Key  AXB
    private final static String OMPAPPSECRET = ""; // APP_Secret  AXB
    private final static String OMPDOMAINNAME = "https://rtcapi.cn-north-1.myhuaweicloud.com:12543"; // APP接入地址

    private String AXYBAPPKEY ="";// AXYB模式APP_Key
    private  String AXYBAPPSECRET  =""; // AXYB模式APP_Secret

    @RequestMapping(value = "axbBindNumber",method = RequestMethod.POST)
    @ApiOperation("隐私号码AXB绑定")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "relationNum",value = "X号码",dataType = "String",required = true),
            @ApiImplicitParam(name = "callerNum",value ="A号码",dataType = "String",required =true ),
            @ApiImplicitParam(name = "calleeNum",value ="B号码",dataType = "String",required =true ),
            @ApiImplicitParam(name = "duration",value ="绑定关系保持时间,单位为秒",dataType = "Long",required =true ),
            @ApiImplicitParam(name = "recordFlag",value = "是否需要针对该绑定关系产生的所有通话录音",dataType = "Boolean"),
            @ApiImplicitParam(name = "recordHintTone",value = "该参数用于设置录音提示音",dataType = "String"),
            @ApiImplicitParam(name = "callerHintTone",value = "设置A拨打X号码时的通话前等待音",dataType = "String"),
            @ApiImplicitParam(name = "calleeHintTone",value = "设置B拨打X号码时的通话前等待音",dataType = "String"),
            @ApiImplicitParam(name = "maxDuration",value = "设置允许单次通话进行的最长时间,单位为分钟",dataType = "Long",required = true),
            @ApiImplicitParam(name = "lastMinVoice",value = "设置通话剩余最后一分钟时的提示音",dataType = "String"),
            @ApiImplicitParam(name = "privateSms",value = "设置该绑定关系是否支持短信功能",dataType = "Boolean")
    })
    public String axbBindNumber( String relationNum,  String callerNum, String calleeNum,  Integer duration,
                                Boolean recordFlag, String recordHintTone, String callerHintTone, String calleeHintTone,
                                Integer maxDuration, String lastMinVoice, Boolean privateSms){
        AXBInterface axb =new AXBInterfaceImpl(OMPAPPKEY, OMPAPPSECRET, OMPDOMAINNAME);
        String result =axb.axbBindNumber(relationNum, callerNum, calleeNum, duration, recordFlag, recordHintTone, callerHintTone, calleeHintTone, maxDuration, lastMinVoice, privateSms);
        return result;
    }

    @RequestMapping(value = "axbModifyNumber",method = RequestMethod.PUT)
    @ApiOperation("修改已设置的AXB绑定关系的相关信息")
    public String axbModifyNumber(String subscriptionId, String callerNum, String calleeNum,Integer duration,
                                  Boolean recordFlag,String callerHintTone,String calleeHintTone,
                                  Integer maxDuration,String lastMinVoice,Boolean privateSms){
        AXBInterface axb =new AXBInterfaceImpl(OMPAPPKEY, OMPAPPSECRET, OMPDOMAINNAME);
        String result =axb.axbModifyNumber(subscriptionId, callerNum, calleeNum, duration, recordFlag, callerHintTone, calleeHintTone, maxDuration, lastMinVoice, privateSms);
        return result;
    }

    @RequestMapping(value = "axbUnbindNumber",method = RequestMethod.DELETE)
    @ApiOperation("解除已设置的AXB绑定关系")
    public String axbUnbindNumber(String subscriptionId, String relationNum){
        AXBInterface axb =new AXBInterfaceImpl(OMPAPPKEY, OMPAPPSECRET, OMPDOMAINNAME);
        String result =axb.axbUnbindNumber(subscriptionId, relationNum);
        return result;
    }

    @RequestMapping(value = "axbQueryBindRelation",method = RequestMethod.GET)
    @ApiOperation("查询已设置的AXB绑定关系的相关信息")
    public String axbQueryBindRelation(String subscriptionId, String relationNum, Integer pageIndex,Integer pageSize){
        AXBInterface axb =new AXBInterfaceImpl(OMPAPPKEY, OMPAPPSECRET, OMPDOMAINNAME);
        String result =axb.axbQueryBindRelation(subscriptionId, relationNum, pageIndex, pageSize);
        return result;
    }

    @RequestMapping(value = "axbGetRecordDownloadLink",method =RequestMethod.GET )
    @ApiOperation("AXB模式获取录音文件的下载地址")
    public String axbGetRecordDownloadLink(String recordDomain, String fileName){
        AXBInterface axb =new AXBInterfaceImpl(OMPAPPKEY, OMPAPPSECRET, OMPDOMAINNAME);
        String result =axb.axbGetRecordDownloadLink(recordDomain, fileName);
        return result;
    }

    @RequestMapping(value ="axbStopCall",method = RequestMethod.POST)
    @ApiOperation("AXB模式终止呼叫")
    public String axbStopCall(String sessionid){
        AXBInterface axb =new AXBInterfaceImpl(OMPAPPKEY, OMPAPPSECRET, OMPDOMAINNAME);
        String result =axb.axbStopCall(sessionid);
        return result;
    }

    @PostMapping(value ="axbCallEventInform")
    @ApiOperation("AXB模式呼叫事件通知接口(华为云推送)")
    public void axbCallEventInform(@RequestBody CallForm callForm) throws ClassNotFoundException, SQLException, ParseException {
        System.out.println("============================");
        System.out.println(callForm);
        System.out.println("========== JSON ============");
        System.out.println(JSON.toJSONString(callForm.toString()));
        System.out.println("============================");
        callFormList.add(callForm);

        Class.forName(JDBC_DRIVER);
        Connection conn = DriverManager.getConnection(DB_URL,USER,PASS);
        String sql ="INSERT INTO HuaWeiCallEventInform (eventType,`timestamp`,sessionId,caller,called,subscriptionId,stateCode,stateDesc)" +
                "values (?,?,?,?,?,?,?,?)";
        PreparedStatement pst = conn.prepareStatement(sql);
        if(callForm.getEventType() != null){
            pst.setString(1,callForm.getEventType());
            pst.setTimestamp(2, UTCtoCST(callForm.getStatusInfo().getTimestamp()));
            pst.setString(3,callForm.getStatusInfo().getSessionId());
            pst.setString(4,callForm.getStatusInfo().getCaller());
            pst.setString(5,callForm.getStatusInfo().getCalled());
            pst.setString(6,callForm.getStatusInfo().getSubscriptionId());
            if(callForm.getStatusInfo().getStateCode() ==null){
                pst.setInt(7,1);
            }else{
                pst.setInt(7,callForm.getStatusInfo().getStateCode());
            }
            pst.setString(8,callForm.getStatusInfo().getStateDesc());
            pst.addBatch();
        }
        pst.executeBatch();
        conn.close();
    }



    private List<FeeInfo> axbFeeFormList = new ArrayList<FeeInfo>();
    @PostMapping(value = "axbCallInform")
    @ApiOperation("AXB模式话单通知接口(华为云推送)")
    public void axbCallInform(@RequestBody FeeForm form) throws ClassNotFoundException, SQLException, ParseException {
        System.out.println("============================");
        System.out.println(form.toString());
        System.out.println("========== JSON ============");
        System.out.println(JSON.toJSONString(form));
        System.out.println("============================");
        axbFeeFormList.addAll(form.getFeeLst());

        Class.forName(JDBC_DRIVER);
        Connection conn = DriverManager.getConnection(DB_URL,USER,PASS);
        String sql ="INSERT INTO HuaWeiCallInform (Direction,Icid,BindNum,SessionId,CallerNum,CalleeNum,FwdDisplayNum,FwdDstNum,CallInTime,FwdStartTime,FwdAlertingTime,FwdAnswerTime," +
                "CallEndTime,FwdUnaswRsn,FailTime,SipStatusCode,RecordFlag,RecordStartTime,RecordObjectName,RecordBucketName,RecordDomain,ServiceType,HostName,SubscriptionId)" +
                "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        PreparedStatement pst = conn.prepareStatement(sql);
        for (FeeInfo f: form.getFeeLst()) {
            if(f.getSessionId() != null){
                pst.setInt(1,f.getDirection());
                pst.setString(2,f.getIcid());
                pst.setString(3,f.getBindNum());
                pst.setString(4,f.getSessionId());
                pst.setString(5,f.getCallerNum());
                pst.setString(6,f.getCalleeNum());
                pst.setString(7,f.getFwdDisplayNum());
                pst.setString(8,f.getFwdDstNum());
                pst.setTimestamp(9,UTCtoCST(f.getCallInTime()));
                pst.setTimestamp(10,UTCtoCST(f.getFwdStartTime()));
                pst.setTimestamp(11,UTCtoCST(f.getFwdAlertingTime()));
                pst.setTimestamp(12,UTCtoCST(f.getFwdAnswerTime()));
                pst.setTimestamp(13,UTCtoCST(f.getCallEndTime()));
                pst.setInt(14,f.getFwdUnaswRsn());
                pst.setString(15,f.getFailTime());
                pst.setInt(16,f.getSipStatusCode());
                pst.setInt(17,f.getRecordFlag());
                pst.setTimestamp(18,UTCtoCST(f.getRecordStartTime()));
                pst.setString(19,f.getRecordObjectName());
                pst.setString(20,f.getRecordBucketName());
                pst.setString(21,f.getRecordDomain());
                pst.setString(22,f.getServiceType());
                pst.setString(23,f.getHostName());
                pst.setString(24,f.getSubscriptionId());
                pst.addBatch();
            }
        }
        pst.executeBatch();
        conn.close();
    }

    @GetMapping(value ="getCallNum")
    @ApiOperation("AXB模式获取被叫号码隐私号")
    @ApiImplicitParams({
            @ApiImplicitParam(name ="areaCode",value ="区号",required = true),
            @ApiImplicitParam(name ="callerNum",value = "主叫号码,如+8613012345678",required = true),
            @ApiImplicitParam(name = "calleeNum",value = "被叫号码,如+8613112345678",required = true)
    })
    public String getCallNum(String areaCode,String callerNum,String calleeNum){
        String axbBindNumberResult =axbBindNumber(areaCode,callerNum,calleeNum,7200,null,null,null,null,1440,null,null);
        JSONObject object =JSONObject.parseObject(axbBindNumberResult);
        String result =object.getString("relationNum");
        return result;
    }

    /**
     * 设置用户A和隐私号码X,AX、用户B和隐私号码Y的绑定关系
     * @param origNum  申请开通AXYB业务的用户号码,填写为全局号码格式(包含国家码),如:+8613800000001或+8675528000002
     * @param areaCode  区号,标示隐私号码归属的区域,申请AX绑定关系时,必须携带此参数;申请YB绑定关系时,该参数可选
     * @param subscriptionId  填写为调用“AXYB模式绑定接口”接口时返回的绑定ID
     * @param duration  绑定关系保持时间,单位为秒,取值范围0~7776000(90天
     * @param recordHintTone  此字段用于设置使用录音功能的提示音,该参数在recordFlag为true时才有效,该参数仅在设置AX绑定时有效
     * @param preVoiceX  设置对X号码播放的个性化通话前等待音,系统边给X号码绑定用户放音(只放一次音)边拨打Y号码绑定用户,该参数仅在设置AX绑定时有效
     * @param preVoiceY  设置对Y号码播放的个性化通话前等待音,系统边给Y号码绑定用户放音(只放一次音)边拨打X号码绑定用户,该参数仅在设置YB绑定时有效
     * @return
     */
    @RequestMapping(value ="xyBindNumber",method = RequestMethod.POST)
    @ApiOperation("设置用户A和隐私号码X,AX、用户B和隐私号码Y的绑定关系")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "origNum",value = "申请开通AXYB业务的用户号码。填写为全局号码格式(包含国家码),如:+8613800000001",
                    dataType = "String",required = true),
            @ApiImplicitParam(name = "areaCode",value = "区号,标示隐私号码归属的区域,申请AX绑定关系时,必须携带此参数;申请YB绑定关系时,该参数可选",
                    dataType = "String"),
            @ApiImplicitParam(name = "subscriptionId",value = "“AXYB模式绑定接口”接口时返回的绑定ID,携带此参数,表示用户要申请的是YB绑定关系,否则表示用户要申请AX绑定关系",
                    dataType = "String"),
            @ApiImplicitParam(name = "duration",value = "绑定关系保
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
这段代码是干什么用的# -*- coding: utf-8 -*- import time import uuid import hashlib import base64 import ssl import urllib.request import hmac from hashlib import sha256 # 必填,请参考"开发准备"获取如下数据,替换为实际值 realUrl = 'https://rtcpns.cn-north-1.myhuaweicloud.com/rest/caas/relationnumber/partners/v1.0' #APP接入地址+接口访问URI APP_KEY = "a1********" #APP_Key APP_SECRET = "cfc8********" #APP_Secret ''' 选填,各参数要求请参考"AXB模式解绑接口" subscriptionId和relationNum为二选一关系,两者都携带时以subscriptionId为准 ''' subscriptionId = '****' #指定"AXB模式绑定接口"返回的绑定ID进行解绑 relationNum = '+86170****0001' #指定X号码(隐私号码)进行解绑 def buildAKSKHeader(appKey, appSecret): now = time.strftime('%Y-%m-%dT%H:%M:%SZ') #Created nonce = str(uuid.uuid4()).replace('-','') #Nonce digist = hmac.new(appSecret.encode(), (nonce + now).encode(), digestmod=sha256).digest() digestBase64 = base64.b64encode(digist).decode() #PasswordDigest return 'UsernameToken Username="{}",PasswordDigest="{}",Nonce="{}",Created="{}"'.format(appKey, digestBase64, nonce, now); def main(): # 请求URL参数 formData = urllib.parse.urlencode({ 'subscriptionId':subscriptionId, 'relationNum':relationNum }) #完整请求地址 fullUrl = realUrl + '?' + formData req = urllib.request.Request(url=fullUrl, method='DELETE') #请求方法为DELETE # 请求Headers参数 req.add_header('Authorization', 'AKSK realm="SDP",profile="UsernameToken",type="Appkey"') req.add_header('X-AKSK', buildAKSKHeader(APP_KEY, APP_SECRET)) req.add_header('Content-Type', 'application/json;charset=UTF-8') # 为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题 ssl._create_default_https_context = ssl._create_unverified_context try: print(formData) #打印请求数据 r = urllib.request.urlopen(req) #发送请求 print(r.read().decode('utf-8')) #打印响应结果 except urllib.error.HTTPError as e: print(e.code) print(e.read().decode('utf-8')) #打印错误信息 except urllib.error.URLError as e: print(e.reason) if __name__ == '__main__': main()
最新发布
06-10

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值