文件最后提交记录最后更新时间
2 年前
2 年前
2 年前
README

0. 版本说明

本示例基于华为云Python SDK开发

1. 简介

基于华为云Python SDK, 与SIM卡的相关操作

2. 开发前准备

已注册华为云, 并完成实名认证; 已获取华为云账号对应的Access Key(AK)和Secret Access Key(SK); 具备开发环境,支持Python3及以上版本

3. 安装SDK

您可以通过加入相应的依赖项获取和安装SDK。

安裝核心库:

pip install huaweicloudsdkcore

安装sdk:

pip install huaweicloudsdkgsl

4. 开始使用

4.1 导入依赖模块

from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkgsl.v3.gsl_client import GslClient
from huaweicloudsdkgsl.v3.model.cut_net_req import CutNetReq
from huaweicloudsdkgsl.v3.model.delete_real_name_request import DeleteRealNameRequest
from huaweicloudsdkgsl.v3.model.down_up_time_for_sim_card_req import DownUpTimeForSimCardReq
from huaweicloudsdkgsl.v3.model.enable_sim_card_request import EnableSimCardRequest
from huaweicloudsdkgsl.v3.model.exceed_cut_net_req import ExceedCutNetReq
from huaweicloudsdkgsl.v3.model.list_sim_cards_request import ListSimCardsRequest
from huaweicloudsdkgsl.v3.model.register_imei_req import RegisterImeiReq
from huaweicloudsdkgsl.v3.model.register_imei_request import RegisterImeiRequest
from huaweicloudsdkgsl.v3.model.reset_sim_card_request import ResetSimCardRequest
from huaweicloudsdkgsl.v3.model.set_exceed_cut_net_request import SetExceedCutNetRequest
from huaweicloudsdkgsl.v3.model.set_speed_value_req import SetSpeedValueReq
from huaweicloudsdkgsl.v3.model.set_speed_value_request import SetSpeedValueRequest
from huaweicloudsdkgsl.v3.model.show_real_named_request import ShowRealNamedRequest
from huaweicloudsdkgsl.v3.model.show_sim_card_request import ShowSimCardRequest
from huaweicloudsdkgsl.v3.model.start_stop_net_request import StartStopNetRequest
from huaweicloudsdkgsl.v3.model.stop_sim_card_request import StopSimCardRequest
from huaweicloudsdkgsl.v3.region.gsl_region import GslRegion

4.2.1 初始化认证信息

auth = BasicCredentials(
     ak=SimCardsApplication.__AK,
     sk=SimCardsApplication.__SK,
     ).with_iam_endpoint(endpoint=SimCardsApplication.__IAM_ENDPOINT)

__IAM_ENDPOINT: 华为云IAM服务访问终端地址,详情见https://developer.huaweicloud.com/endpoint?IAM

4.2.2 初始化客户端

gsl_client = GslClient.new_builder()
   .with_credentials(credentials=auth)
   .with_region(region=GslRegion.CN_NORTH_4)
   .build()

5. 示例代码

使用如下代码对SIM卡进行相关操作,调用前请根据实际情况替换变量:

class SimCardsApplication:
   # 认证用的ak和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
   # 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
   __AK = os.environ["HUAWEICLOUD_SDK_AK"]
   __SK = os.environ["HUAWEICLOUD_SDK_SK"]

   # 华为云IAM服务访问终端地址
   __IAM_ENDPOINT = "https://<IamEndpoint>"

   def __init__(self):
      pass

   @staticmethod
   def main(args):
      # 创建认证
      auth = BasicCredentials(
         ak=SimCardsApplication.__AK,
         sk=SimCardsApplication.__SK,
      ).with_iam_endpoint(endpoint=SimCardsApplication.__IAM_ENDPOINT)

      gsl_client = GslClient.new_builder()
         .with_credentials(credentials=auth)
         .with_region(region=GslRegion.CN_NORTH_4)
         .build()
      # 查询SIM卡实名认证信息
      SimCardsApplication.__show_real_named(gsl_client)
      # 清除SIM卡的实名认证信息
      SimCardsApplication.__delete_real_name(gsl_client)
      # 查询SIM卡列表
      SimCardsApplication.__list_sim_cards(gsl_client)
      # 查询SIM卡详情
      SimCardsApplication.__show_sim_card(gsl_client)
      # 实体卡限速
      SimCardsApplication.__set_speed_value(gsl_client)
      # SIM卡单卡复机
      SimCardsApplication.__reset_sim_card(gsl_client)
      # SIM卡单卡停机
      SimCardsApplication.__stop_sim_card(gsl_client)
      # SIM卡达量断网/恢复在用
      SimCardsApplication.__set_exceed_cut_net(gsl_client)
      # SIM卡申请断网/恢复在用
      SimCardsApplication.__start_stop_net(gsl_client)
      # SIM卡机卡重绑
      SimCardsApplication.__register_imei(gsl_client)
      # 激活实体卡
      SimCardsApplication.__enable_sim_card(gsl_client)

   @staticmethod
   def __delete_real_name(gsl_client):
      sim_card_id = 4084101881827328
      try:
         response = gsl_client.delete_real_name(
            DeleteRealNameRequest(
               sim_card_id=sim_card_id
            )
         )
         print(response)
      except exceptions.ClientRequestException as e:
         SimCardsApplication.__handle_exception(e)

   @staticmethod
   def __enable_sim_card(gsl_client):
      sim_card_id = 3449878700524511
      try:
         response = gsl_client.enable_sim_card(
            EnableSimCardRequest(
               sim_card_id=sim_card_id
            )
         )
         print(response)
      except exceptions.ClientRequestException as e:
         SimCardsApplication.__handle_exception(e)

   @staticmethod
   def __list_sim_cards(gsl_client):
      # 显示的数据数量
      limit = 10
      # 展示的当前页
      offset = 1
      # SIM卡状态-11-未激活
      sim_status = 11
      try:
         response = gsl_client.list_sim_cards(
            ListSimCardsRequest(
               limit=limit,
               offset=offset,
               sim_status=sim_status
            )
         )
         print(response)
      except exceptions.ClientRequestException as e:
         SimCardsApplication.__handle_exception(e)

   @staticmethod
   def __register_imei(gsl_client):
      sim_card_id = 3449878744318976
      bind_type = 1
      imei = "866758045090897"
      try:
         response = gsl_client.register_imei(
            RegisterImeiRequest(
               sim_card_id=sim_card_id,
               body=RegisterImeiReq(
                  imei=imei,
                  bind_type=bind_type
               )
            )
         )
         print(response)
      except exceptions.ClientRequestException as e:
         SimCardsApplication.__handle_exception(e)

   @staticmethod
   def __reset_sim_card(gsl_client):
      sim_card_id = 27
      down_up_switch = 1
      try:
         response = gsl_client.re_sim_card = ResetSimCardRequest(
            sim_card_id=sim_card_id,
            body=DownUpTimeForSimCardReq(
               down_up_switch=down_up_switch
            )
         )
         print(response)
      except exceptions.ClientRequestException as e:
         SimCardsApplication.__handle_exception(e)

   @staticmethod
   def __set_exceed_cut_net(gsl_client):
      # 只支持中国电信
      sim_card_id = 15847632244711
      # 1:设置达量断网域值,2:取消达量断网域值
      action = 1
      # 只能是0,-1,正整数,-1表示无限制,0表示有上网流量产生就会立即断网
      quota = "0"
      try:
         response = gsl_client.exceed_cut_net = SetExceedCutNetRequest(
            sim_card_id=sim_card_id,
            body=ExceedCutNetReq(
               action=action,
               quota=quota
            )
         )
         print(response)
      except exceptions.ClientRequestException as e:
         SimCardsApplication.__handle_exception(e)

   @staticmethod
   def __set_speed_value(gsl_client):
      # 中国电信
      sim_card_id = 15847632244712
      # 不同运营商支持的限速速率不同
      speed_value = 256
      try:
         response = gsl_client.speed_value = SetSpeedValueRequest(
            sim_card_id=sim_card_id,
            body=SetSpeedValueReq(
               speed_value=speed_value
            )
         )
         print(response)
      except exceptions.ClientRequestException as e:
         SimCardsApplication.__handle_exception(e)

   @staticmethod
   def __show_real_named(gsl_client):
      sim_card_id = 3851944051704838
      try:
         response = gsl_client.show_real_named(
            ShowRealNamedRequest(
               sim_card_id=sim_card_id
            )
         )
         print(response)
      except exceptions.ClientRequestException as e:
         SimCardsApplication.__handle_exception(e)

   @staticmethod
   def __show_sim_card(gsl_client):
      sim_card_id = 3851944051704838
      try:
         response = gsl_client.show_sim_card(
            ShowSimCardRequest(
               sim_card_id=sim_card_id
            )
         )
         print(response)
      except exceptions.ClientRequestException as e:
         SimCardsApplication.__handle_exception(e)

   @staticmethod
   def __start_stop_net(gsl_client):
      sim_card_id = 3851944051704842
      # (ADD:断网,DEL:取消断网)
      action = "ADD"
      try:
         response = gsl_client.start_stop_net(
            StartStopNetRequest(
               sim_card_id=sim_card_id,
               body=CutNetReq(
                  action=action
               )
            )
         )
         print(response)
      except exceptions.ClientRequestException as e:
         SimCardsApplication.__handle_exception(e)

   @staticmethod
   def __stop_sim_card(gsl_client):
      sim_card_id = 14
      down_up_switch = 1
      try:
         response = gsl_client.stop_sim_card(
            StopSimCardRequest(
               sim_card_id=sim_card_id,
               body=DownUpTimeForSimCardReq(
                  down_up_switch=down_up_switch
               )
            )
         )
         print(response)
      except exceptions.ClientRequestException as e:
         SimCardsApplication.__handle_exception(e)

   @staticmethod
   def __handle_exception(e):
      print(e.status_code)
      print(e.request_id)
      print(e.error_code)
      print(e.error_msg)


if __name__ == "__main__":
   SimCardsApplication().main(any)

6. 运行结果

调用list_sim_cards查看当前用户下卡在用卡(sim_status为20): 请求参数

GET https://{endpoint}/v1/sim-cards?offset=1&limit=10&sim_status=20

响应:

{
  "limit" : 10,
  "offset" : 1,
  "count" : 1,
  "sim_cards" : [ {
    "sim_card_id" : 4900000000000,
    "account_id" : "04eef84xxxxxxxxxxx",
    "cid" : "8986xxxxxxxxxx",
    "sim_pool_id" : 4940000000,
    "imei" : null,
    "sim_status" : 20,
    "device_status" : null,
    "device_model" : null,
    "act_date" : "2023-09-16T01:14:58.000+00:00",
    "device_status_date" : null,
    "node_id" : null,
    "iccid" : "8986xxxxxxxxxxx",
    "network_type" : null,
    "dbm" : null,
    "signal_level" : null,
    "sim_type" : 3,
    "tag_names" : null,
    "order_id" : 494000000000,
    "expire_time" : "2024-08-26T15:59:59.000+00:00",
    "price_plan_name" : "中国联通消费级每月30M联接服务(1年)",
    "sim_price_plan_id" : null,
    "flow_left" : 30,
    "flow_used" : 0,
    "operator_status" : 5,
    "msisdn" : "86xxxxxxxxx",
    "imsi" : "46xxxxxxxxxx",
    "customer_attribute1" : null,
    "customer_attribute2" : null,
    "customer_attribute3" : null,
    "customer_attribute4" : null,
    "customer_attribute5" : null,
    "customer_attribute6" : null,
    "real_named" : false,
    "cut_net_flag" : false,
    "exceed_cut_net_flag" : false,
    "exceed_cut_net_quota" : null,
    "imei_bind_remain_times" : null,
    "speed_value" : null
  } ]
}

其中响应返回的sim_pool_id,cid等字段可以用于其他API接口的查询条件。

7. 参考

更多信息请参考全球SIM联接 GSL

8. 修订记录

发布日期 文档版本 修订说明
2021-09-28 1.0.1 文档首次发布
2022-04-12 1.0.2 更新依赖,修改部分接口
2022-06-12 1.0.3 更新依赖,新增标签管理,自定义属性管理接口说明
2022-08-02 1.0.4 更新依赖,新增月用量查询接口
2023-11-08 1.0.5 更新文档