Przeglądaj źródła

feat(rcs-number): 集成 smsapi 通道

wui 10 miesięcy temu
rodzic
commit
66f3d475ea

+ 3 - 1
src/rcs-number/entities/rcs-number.entity.ts

@@ -6,6 +6,7 @@ import { dashboard } from '../impl/dashboard.service'
 import { sms7979 } from '../impl/sms7979.service'
 import { sms4verify } from '../impl/sms4verify.service'
 import { svenkvint } from '../impl/svenkvint.service'
+import { smsapi } from '../impl/smsapi.service'
 
 export enum RcsNumberStatus {
     PENDING = 'pending',
@@ -42,7 +43,8 @@ export enum RcsNumberSource {
     sms4verify01 = 'sms4verify01',
     sms4verify02 = 'sms4verify02',
     sms23256 = 'sms23256',
-    svenkvint = 'svenkvint'
+    svenkvint = 'svenkvint',
+    smsapi = 'smsapi'
 }
 
 @Entity()

+ 56 - 0
src/rcs-number/impl/smsapi.service.ts

@@ -0,0 +1,56 @@
+import { GetNumberResponse, GetNumberService } from './get-number-service'
+import axios from 'axios'
+import { RcsNumberSource } from '../entities/rcs-number.entity'
+import { InternalServerErrorException } from '@nestjs/common'
+
+const axiosInstance = axios.create({
+    baseURL: 'http://47.128.13.213:8080/smsapi/record/'
+})
+
+const token = '9b485efe22a74d849773b401de7c5ed5'
+
+export class smsapi extends GetNumberService {
+    source: RcsNumberSource = RcsNumberSource.smsapi
+
+    async getNumber(country: string, num?: number): Promise<GetNumberResponse> {
+        if (country.toLocaleLowerCase() !== 'us') throw new Error('Only US is supported')
+        const res = await axiosInstance.get('phone', {
+            params: {
+                token,
+                service: 'googlemessenger'
+            }
+        })
+
+        if (res.data.code !== 0) {
+            throw new InternalServerErrorException(res.data.msg)
+        }
+
+        return {
+            number: res.data.data.phoneNumber,
+            orderId: res.data.data.id,
+            operatorCode: '',
+            operatorName: '',
+            rawResponse: res.data
+        }
+    }
+
+    async releaseNumber(number: string) {}
+
+    async retriveMessage(orderId: string, num?: number): Promise<string> {
+        const { data } = await axiosInstance.get('code', {
+            params: {
+                token,
+                phoneid: orderId
+            }
+        })
+        if (data.code === 0 && data.data) {
+            return `Your Messenger verification code is G-${data.data.code}`
+        }
+    }
+
+    async blockNumber(number: string) {}
+
+    async cacheNumber(country: string, size: number) {
+        return null
+    }
+}

+ 3 - 1
src/rcs-number/rcs-number.module.ts

@@ -28,6 +28,7 @@ import { sms7979 } from './impl/sms7979.service'
 import { sms4verify } from './impl/sms4verify.service'
 import { sms23256 } from './impl/sms23256.service'
 import { svenkvint } from './impl/svenkvint.service'
+import { smsapi } from './impl/smsapi.service'
 
 @Module({
     imports: [
@@ -58,7 +59,8 @@ import { svenkvint } from './impl/svenkvint.service'
         sms7979,
         sms4verify,
         sms23256,
-        svenkvint
+        svenkvint,
+        smsapi
     ],
     controllers: [RcsNumberController],
     exports: [RcsNumberService]

+ 5 - 1
src/rcs-number/rcs-number.service.ts

@@ -5,7 +5,7 @@ import { InjectRepository } from '@nestjs/typeorm'
 import { RcsNumber, RcsNumberSource, RcsNumberStatus } from './entities/rcs-number.entity'
 import { PageRequest } from '../common/dto/page-request'
 import { paginate, Pagination } from 'nestjs-typeorm-paginate'
-import { Between, LessThan, MoreThan, MoreThanOrEqual, Not, Repository } from 'typeorm'
+import { Between, MoreThan, Not, Repository } from 'typeorm'
 import { DeviceService } from 'src/device/device.service'
 import { TaskService } from 'src/task/task.service'
 import { OperatorConfigService } from 'src/operator_config/operator_config.service'
@@ -37,6 +37,7 @@ import { sms7979 } from './impl/sms7979.service'
 import { sms4verify } from './impl/sms4verify.service'
 import { sms23256 } from './impl/sms23256.service'
 import { svenkvint } from './impl/svenkvint.service'
+import { smsapi } from './impl/smsapi.service'
 
 @Injectable()
 export class RcsNumberService {
@@ -82,6 +83,7 @@ export class RcsNumberService {
         private dashboard: dashboard,
         private sms23256: sms23256,
         private svenkvint: svenkvint,
+        private smsapi: smsapi,
         private readonly redisService: RedisService
     ) {
         this.cloud033 = new cloud214('100033', '1e40ca9795b1fc038db76512175d59b5', RcsNumberSource.cloud033)
@@ -354,6 +356,8 @@ export class RcsNumberService {
                 return this.sms23256
             case RcsNumberSource.svenkvint:
                 return this.svenkvint
+            case RcsNumberSource.smsapi:
+                return this.smsapi
             default:
                 throw new ServiceUnavailableException('不支持的短信通道')
         }