package grace import ( "context" "fmt" "go-nc/configs/global" "time" "github.com/levigross/grequests" "github.com/tidwall/gjson" ) var ctx = context.Background() // 获取token接口 func GetSimToken() (string, error) { // redis 获取token SimToken := global.App.Redis.Get(ctx, "SimToken").Val() if SimToken != "" { return SimToken, nil } ro := &grequests.RequestOptions{ JSON: map[string]interface{}{"id": APP_KEY, "type": "106"}, Headers: GetHeader(), } body, err := grequests.Post(APP_HOST+"/aep/APP_getAccessToken_SBO/v1", ro) if err != nil { fmt.Printf("发送请求时出现错误: %v", err) return "", err } tokenValue := gjson.GetBytes(body.Bytes(), "accessToken").String() // 设置9分钟过期 global.App.Redis.Set(ctx, "SimToken", tokenValue, time.Minute*9).Err() return tokenValue, nil } // 查询指定 sim 卡 func GetSimInfo(iccid string) (*grequests.Response, error) { ro := &grequests.RequestOptions{ Headers: GetHeader(), } body, err := grequests.Get(APP_HOST+"/scc/v1/accounts/"+iccid, ro) if err != nil { global.App.Log.Error("发送请求时出现错误: " + err.Error()) return nil, err } return body, nil } // 查询产品套餐列表 func GetSimPackageTariffPlan() (*grequests.Response, error) { data := NewPagination() ro := &grequests.RequestOptions{ JSON: data, Headers: GetHeader(), } body, err := grequests.Get(APP_HOST+"/scc/v1/products", ro) if err != nil { global.App.Log.Error("发送请求时出现错误: " + err.Error()) return nil, err } return body, nil } // 查询产品套餐详情 func GetSimPackageTariffPlanDetail(productId string) (*grequests.Response, error) { ro := &grequests.RequestOptions{ Headers: GetHeader(), } body, err := grequests.Get(APP_HOST+"/scc/v1/products-detail/"+productId, ro) if err != nil { global.App.Log.Error("发送请求时出现错误: " + err.Error()) return nil, err } return body, nil } // 关闭 SIM 卡 func CloseSim(iccid []string) (*grequests.Response, error) { type CloseSim struct { Accounts string `json:"accounts"` } var iccids []CloseSim for _, v := range iccid { iccids = append(iccids, CloseSim{Accounts: v}) } ro := &grequests.RequestOptions{ JSON: iccids, Headers: GetHeader(), } body, err := grequests.Put(APP_HOST+"/scc/v1/close-accounts", ro) if err != nil { global.App.Log.Error("发送请求时出现错误: " + err.Error()) return nil, err } return body, nil } // 1、package:充值套餐,详细规则如下: // 1.1 若 SIM 未绑定传入的 productId, 则将 productId 与 // SIM 绑定。流量 = productId 的流量、剩余流量=流量、有 // 效天数 = productId 的天数; // 1.2 若 SIM 卡已绑定传入的 productId,则删除之,然后重 // 复 1.1 步骤。 // 2、days:充值天数,详细规则如下: // 2.1 若 SIM 卡未绑传入的 productId,则将 productId 与 // SIM 绑定。流量 = productId 的流量、剩余流量=流量、有 // 效天数 = num; // 2.2 若 SIM 卡已绑定传入的 productId,则新增之,然后重 // 复 2.1 步骤。 // 3、data: 充值流量(单位:MB),详细规则如下: // 3.1 若 SIM 卡未绑定传入的 productId,则将 productId 与 // SIM 绑定。流量=num 参数值、剩余流量=总流量、有效天 // 数=productId 的天数; // 3.2 若 SIM 卡已绑定传入的 productId,则新增之,然后重 // 复 3.1 步骤。 // 4、package_data: 充值套餐的流量,详细规则如下: // 4.1 若 SIM 卡未绑定传入的 productId,则将 productId 与 // SIM 绑定; // 4.2 若 SIM 卡已绑定传入的 productId,则新增之,然后重 // 复 4.1 步骤。 // 5、package_data_time: 充值套餐的流量并延长有效期,详细 // 规则如下: 5.1 若 SIM 卡未绑定传入的 productId,则将 productId 与 // SIM 绑定。 // 5.2 若 SIM 卡已绑定传入的 productId,则新增之,然后重 // 复 5.1 步骤。 // 6、package_data_reset_time: 充值套餐,详细规则如下: // 6.1 若 SIM 未绑定传入的 productId, 则将 productId 与 // SIM 绑定。流量 = productId 的流量、剩余流量=流量、有 // 效天数 = productId 的天数。 // 6.2 若 SIM 卡已绑定传入的 productId,则新增之,然后重 // 复 6.1 步骤。 // 充值 SIM 卡-- 待完善 type RechargeSimPackage struct { Iccid string // iccid Type string // 套餐类型 ProductId int // 套餐id Num string // 套餐数量 } func RechargeSim(opts RechargeSimPackage) (*grequests.Response, error) { ro := &grequests.RequestOptions{ JSON: map[string]interface{}{ "account": opts.Iccid, "type": opts.Type, "productId": opts.ProductId, "num": opts.Num, }, Headers: GetHeader(), } body, err := grequests.Post(APP_HOST+"/scc/v1/top-up/"+opts.Iccid, ro) if err != nil { global.App.Log.Error("发送请求时出现错误: " + err.Error()) return nil, err } return body, nil } // CDR 统计--待完善 // groupBy string 必选 分 组 标 识 , 可 选 值 : ‘ZONE’ 、 ‘PRODUCT 、 // ‘PRODUCT_ZONE’ // startMonth string 必选 开始月份,如 2020-07 // endMonth string 必选 结束月份,如 2020-07 func GetSimCdr(iccid string) (*grequests.Response, error) { ro := &grequests.RequestOptions{ JSON: map[string]interface{}{ "account": iccid, }, Headers: GetHeader(), } body, err := grequests.Post(APP_HOST+"/scc/v1/cdr-stat", ro) if err != nil { global.App.Log.Error("发送请求时出现错误: " + err.Error()) return nil, err } return body, nil } // 暂停 SIM 卡服务 func PauseSim(iccid string) (*grequests.Response, error) { ro := &grequests.RequestOptions{ JSON: map[string]interface{}{"account": iccid}, Headers: GetHeader(), } body, err := grequests.Post(APP_HOST+"/scc/v1/suspend-account", ro) if err != nil { global.App.Log.Error("发送请求时出现错误: " + err.Error()) return nil, err } return body, nil } // 恢复 SIM 卡服务 func ResumeSim(iccid string) (*grequests.Response, error) { ro := &grequests.RequestOptions{ JSON: map[string]interface{}{"account": iccid}, Headers: GetHeader(), } body, err := grequests.Post(APP_HOST+"/scc/v1/restore-account", ro) if err != nil { global.App.Log.Error("发送请求时出现错误: " + err.Error()) return nil, err } return body, nil } // eSIM 订购 // productId int 必选 产品ID // tId string 必选 唯一交易号 func GetSimSetOrder(productId int, tId string) (*grequests.Response, error) { ro := &grequests.RequestOptions{ JSON: map[string]interface{}{ "productId": productId, "tId": tId, }, Headers: GetHeader(), } body, err := grequests.Post(APP_HOST+"/scc/v1/purchase-esim", ro) if err != nil { global.App.Log.Error("发送请求时出现错误: " + err.Error()) return nil, err } return body, nil } // eSIM 订购查询 func GetSimSetOrderQuery(tId string) (*grequests.Response, error) { ro := &grequests.RequestOptions{ JSON: map[string]interface{}{"tId": tId}, Headers: GetHeader(), } body, err := grequests.Get(APP_HOST+"/scc/v1/purchase-esim-query", ro) if err != nil { global.App.Log.Error("发送请求时出现错误: " + err.Error()) return nil, err } return body, nil } // 查询 eSIM 安装状态 func GetSimSetOrderStatus(tId string) (*grequests.Response, error) { ro := &grequests.RequestOptions{ Params: map[string]string{"tId": tId}, Headers: GetHeader(), } body, err := grequests.Get(APP_HOST+"/scc/v1/esim-installation-status", ro) if err != nil { global.App.Log.Error("发送请求时出现错误: " + err.Error()) return nil, err } return body, nil } // CDR 详单查询 // account string 必选 Sim 账户(卡号) // startDate string 必选 开始日期:如 2024-09-29 // endDate string 必选 结束日期:如 2024-09-30 func GetSimCdrDetail(iccid string, startDate, endDate string) (*grequests.Response, error) { ro := &grequests.RequestOptions{ Params: map[string]string{ "account": iccid, "startDate": startDate, "endDate": endDate, }, Headers: GetHeader(), } body, err := grequests.Get(APP_HOST+"/scc/v1/cdr-daily", ro) if err != nil { global.App.Log.Error("发送请求时出现错误: " + err.Error()) return nil, err } return body, nil } // 套餐激活通知(需提供域名)- 待完善