grace.go 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. package grace
  2. import (
  3. "context"
  4. "fmt"
  5. "go-nc/configs/global"
  6. "time"
  7. "github.com/levigross/grequests"
  8. "github.com/tidwall/gjson"
  9. )
  10. var ctx = context.Background()
  11. // 获取token接口
  12. func GetSimToken() (string, error) {
  13. // redis 获取token
  14. SimToken := global.App.Redis.Get(ctx, "SimToken").Val()
  15. if SimToken != "" {
  16. return SimToken, nil
  17. }
  18. ro := &grequests.RequestOptions{
  19. JSON: map[string]interface{}{"id": APP_KEY, "type": "106"},
  20. Headers: GetHeader(),
  21. }
  22. body, err := grequests.Post(APP_HOST+"/aep/APP_getAccessToken_SBO/v1", ro)
  23. if err != nil {
  24. fmt.Printf("发送请求时出现错误: %v", err)
  25. return "", err
  26. }
  27. tokenValue := gjson.GetBytes(body.Bytes(), "accessToken").String()
  28. // 设置9分钟过期
  29. global.App.Redis.Set(ctx, "SimToken", tokenValue, time.Minute*9).Err()
  30. return tokenValue, nil
  31. }
  32. // 查询指定 sim 卡
  33. func GetSimInfo(iccid string) (*grequests.Response, error) {
  34. ro := &grequests.RequestOptions{
  35. Headers: GetHeader(),
  36. }
  37. body, err := grequests.Get(APP_HOST+"/scc/v1/accounts/"+iccid, ro)
  38. if err != nil {
  39. global.App.Log.Error("发送请求时出现错误: " + err.Error())
  40. return nil, err
  41. }
  42. return body, nil
  43. }
  44. // 查询产品套餐列表
  45. func GetSimPackageTariffPlan() (*grequests.Response, error) {
  46. data := NewPagination()
  47. ro := &grequests.RequestOptions{
  48. JSON: data,
  49. Headers: GetHeader(),
  50. }
  51. body, err := grequests.Get(APP_HOST+"/scc/v1/products", ro)
  52. if err != nil {
  53. global.App.Log.Error("发送请求时出现错误: " + err.Error())
  54. return nil, err
  55. }
  56. return body, nil
  57. }
  58. // 查询产品套餐详情
  59. func GetSimPackageTariffPlanDetail(productId string) (*grequests.Response, error) {
  60. ro := &grequests.RequestOptions{
  61. Headers: GetHeader(),
  62. }
  63. body, err := grequests.Get(APP_HOST+"/scc/v1/products-detail/"+productId, ro)
  64. if err != nil {
  65. global.App.Log.Error("发送请求时出现错误: " + err.Error())
  66. return nil, err
  67. }
  68. return body, nil
  69. }
  70. // 关闭 SIM 卡
  71. func CloseSim(iccid []string) (*grequests.Response, error) {
  72. type CloseSim struct {
  73. Accounts string `json:"accounts"`
  74. }
  75. var iccids []CloseSim
  76. for _, v := range iccid {
  77. iccids = append(iccids, CloseSim{Accounts: v})
  78. }
  79. ro := &grequests.RequestOptions{
  80. JSON: iccids,
  81. Headers: GetHeader(),
  82. }
  83. body, err := grequests.Put(APP_HOST+"/scc/v1/close-accounts", ro)
  84. if err != nil {
  85. global.App.Log.Error("发送请求时出现错误: " + err.Error())
  86. return nil, err
  87. }
  88. return body, nil
  89. }
  90. // 1、package:充值套餐,详细规则如下:
  91. // 1.1 若 SIM 未绑定传入的 productId, 则将 productId 与
  92. // SIM 绑定。流量 = productId 的流量、剩余流量=流量、有
  93. // 效天数 = productId 的天数;
  94. // 1.2 若 SIM 卡已绑定传入的 productId,则删除之,然后重
  95. // 复 1.1 步骤。
  96. // 2、days:充值天数,详细规则如下:
  97. // 2.1 若 SIM 卡未绑传入的 productId,则将 productId 与
  98. // SIM 绑定。流量 = productId 的流量、剩余流量=流量、有
  99. // 效天数 = num;
  100. // 2.2 若 SIM 卡已绑定传入的 productId,则新增之,然后重
  101. // 复 2.1 步骤。
  102. // 3、data: 充值流量(单位:MB),详细规则如下:
  103. // 3.1 若 SIM 卡未绑定传入的 productId,则将 productId 与
  104. // SIM 绑定。流量=num 参数值、剩余流量=总流量、有效天
  105. // 数=productId 的天数;
  106. // 3.2 若 SIM 卡已绑定传入的 productId,则新增之,然后重
  107. // 复 3.1 步骤。
  108. // 4、package_data: 充值套餐的流量,详细规则如下:
  109. // 4.1 若 SIM 卡未绑定传入的 productId,则将 productId 与
  110. // SIM 绑定;
  111. // 4.2 若 SIM 卡已绑定传入的 productId,则新增之,然后重
  112. // 复 4.1 步骤。
  113. // 5、package_data_time: 充值套餐的流量并延长有效期,详细
  114. // 规则如下: 5.1 若 SIM 卡未绑定传入的 productId,则将 productId 与
  115. // SIM 绑定。
  116. // 5.2 若 SIM 卡已绑定传入的 productId,则新增之,然后重
  117. // 复 5.1 步骤。
  118. // 6、package_data_reset_time: 充值套餐,详细规则如下:
  119. // 6.1 若 SIM 未绑定传入的 productId, 则将 productId 与
  120. // SIM 绑定。流量 = productId 的流量、剩余流量=流量、有
  121. // 效天数 = productId 的天数。
  122. // 6.2 若 SIM 卡已绑定传入的 productId,则新增之,然后重
  123. // 复 6.1 步骤。
  124. // 充值 SIM 卡-- 待完善
  125. type RechargeSimPackage struct {
  126. Iccid string // iccid
  127. Type string // 套餐类型
  128. ProductId int // 套餐id
  129. Num string // 套餐数量
  130. }
  131. func RechargeSim(opts RechargeSimPackage) (*grequests.Response, error) {
  132. ro := &grequests.RequestOptions{
  133. JSON: map[string]interface{}{
  134. "account": opts.Iccid,
  135. "type": opts.Type,
  136. "productId": opts.ProductId,
  137. "num": opts.Num,
  138. },
  139. Headers: GetHeader(),
  140. }
  141. body, err := grequests.Post(APP_HOST+"/scc/v1/top-up/"+opts.Iccid, ro)
  142. if err != nil {
  143. global.App.Log.Error("发送请求时出现错误: " + err.Error())
  144. return nil, err
  145. }
  146. return body, nil
  147. }
  148. // CDR 统计--待完善
  149. // groupBy string 必选 分 组 标 识 , 可 选 值 : ‘ZONE’ 、 ‘PRODUCT 、
  150. // ‘PRODUCT_ZONE’
  151. // startMonth string 必选 开始月份,如 2020-07
  152. // endMonth string 必选 结束月份,如 2020-07
  153. func GetSimCdr(iccid string) (*grequests.Response, error) {
  154. ro := &grequests.RequestOptions{
  155. JSON: map[string]interface{}{
  156. "account": iccid,
  157. },
  158. Headers: GetHeader(),
  159. }
  160. body, err := grequests.Post(APP_HOST+"/scc/v1/cdr-stat", ro)
  161. if err != nil {
  162. global.App.Log.Error("发送请求时出现错误: " + err.Error())
  163. return nil, err
  164. }
  165. return body, nil
  166. }
  167. // 暂停 SIM 卡服务
  168. func PauseSim(iccid string) (*grequests.Response, error) {
  169. ro := &grequests.RequestOptions{
  170. JSON: map[string]interface{}{"account": iccid},
  171. Headers: GetHeader(),
  172. }
  173. body, err := grequests.Post(APP_HOST+"/scc/v1/suspend-account", ro)
  174. if err != nil {
  175. global.App.Log.Error("发送请求时出现错误: " + err.Error())
  176. return nil, err
  177. }
  178. return body, nil
  179. }
  180. // 恢复 SIM 卡服务
  181. func ResumeSim(iccid string) (*grequests.Response, error) {
  182. ro := &grequests.RequestOptions{
  183. JSON: map[string]interface{}{"account": iccid},
  184. Headers: GetHeader(),
  185. }
  186. body, err := grequests.Post(APP_HOST+"/scc/v1/restore-account", ro)
  187. if err != nil {
  188. global.App.Log.Error("发送请求时出现错误: " + err.Error())
  189. return nil, err
  190. }
  191. return body, nil
  192. }
  193. // eSIM 订购
  194. // productId int 必选 产品ID
  195. // tId string 必选 唯一交易号
  196. func GetSimSetOrder(productId int, tId string) (*grequests.Response, error) {
  197. ro := &grequests.RequestOptions{
  198. JSON: map[string]interface{}{
  199. "productId": productId,
  200. "tId": tId,
  201. },
  202. Headers: GetHeader(),
  203. }
  204. body, err := grequests.Post(APP_HOST+"/scc/v1/purchase-esim", ro)
  205. if err != nil {
  206. global.App.Log.Error("发送请求时出现错误: " + err.Error())
  207. return nil, err
  208. }
  209. return body, nil
  210. }
  211. // eSIM 订购查询
  212. func GetSimSetOrderQuery(tId string) (*grequests.Response, error) {
  213. ro := &grequests.RequestOptions{
  214. JSON: map[string]interface{}{"tId": tId},
  215. Headers: GetHeader(),
  216. }
  217. body, err := grequests.Get(APP_HOST+"/scc/v1/purchase-esim-query", ro)
  218. if err != nil {
  219. global.App.Log.Error("发送请求时出现错误: " + err.Error())
  220. return nil, err
  221. }
  222. return body, nil
  223. }
  224. // 查询 eSIM 安装状态
  225. func GetSimSetOrderStatus(tId string) (*grequests.Response, error) {
  226. ro := &grequests.RequestOptions{
  227. Params: map[string]string{"tId": tId},
  228. Headers: GetHeader(),
  229. }
  230. body, err := grequests.Get(APP_HOST+"/scc/v1/esim-installation-status", ro)
  231. if err != nil {
  232. global.App.Log.Error("发送请求时出现错误: " + err.Error())
  233. return nil, err
  234. }
  235. return body, nil
  236. }
  237. // CDR 详单查询
  238. // account string 必选 Sim 账户(卡号)
  239. // startDate string 必选 开始日期:如 2024-09-29
  240. // endDate string 必选 结束日期:如 2024-09-30
  241. func GetSimCdrDetail(iccid string, startDate, endDate string) (*grequests.Response, error) {
  242. ro := &grequests.RequestOptions{
  243. Params: map[string]string{
  244. "account": iccid,
  245. "startDate": startDate,
  246. "endDate": endDate,
  247. },
  248. Headers: GetHeader(),
  249. }
  250. body, err := grequests.Get(APP_HOST+"/scc/v1/cdr-daily", ro)
  251. if err != nil {
  252. global.App.Log.Error("发送请求时出现错误: " + err.Error())
  253. return nil, err
  254. }
  255. return body, nil
  256. }
  257. // 套餐激活通知(需提供域名)- 待完善