【NodeJs】UniSMS 實現短信驗證碼

承接上文 ,上次用的是 短信寶平臺 認證已經通過 后續又新增要求?平臺相當麻煩!

短信寶實現短信發送要求:
1.平臺綁定手機號? ? 必須和? ?營業執照法人一致
2.平臺個人實名認證 必須和? 營業執照法人一致
3.平臺需要上傳營業執照
4.平臺需要上傳手持身份證
5.平臺需要網站備案信息 備案信息 必須和 營業執照法人一致

第五步完成后 我不知道還需要提交什么才能通過認證實現短信發送 ,因為我看不到平臺這個洞底

?

UniSMS

介紹:

認證要求, 平臺有 個人認證 和 企業認證?

  • 個人認證實名通過后 創建簽名 添加對應信息提交等待
  • 企業認證提交 三合一營業執照? 創建簽名?添加對應信息提交等待
    ?

說一下 unisms 我這里是怎么通過的?
提交三合一營業執照 創建簽名 簽名名稱 添加 機構名即可
相比其他平臺 unisms 會快捷容易

實現短信驗證碼發送

unisms有實現短信發送兩種方式分別是 SDK 和 API接口?


sdk實現:

注意:這里把 .js 后綴 替換為 .cjs 為什么要替換??這樣 Node.js 會將該文件視為 CommonJS 模塊。

安裝第三方庫:

npm install?unisms or yarn add?unisms

const express = require('express')
const router = express.Router()
const UniSMS = require('unisms').defaultconst client = new UniSMS({accessKeyId: 'your access key id'
})
const SmsSignature = 'your SMS signature name'async function sendSMS (mobile, template, codeNumber) {try {const data = await client.send({to: mobile,  //手機號signature: SmsSignature, //你的短信簽名 名稱templateId: template,  //你的短信簽名模版templateData: { code: codeNumber } //短信驗證碼})console.log('SMS Sent:', data)return data} catch (error) {console.error('Error sending SMS:', error)throw error}
}
// 生成指定位數的隨機數
function generateRandomCode (length) {const min = Math.pow(10, length - 1)const max = Math.pow(10, length) - 1return Math.floor(Math.random() * (max - min + 1) + min).toString()
}router.get('/uniSdk/MobileCodeNumber', async (req, res) => {console.log(`這是用戶傳遞來的信息`, req.query)if (!req.query.mobile)return res.status(400).json({ code: 400, message: 'mobile參數必傳' })try {const mobileNumber = req.query.mobile // 替換為實際的手機號碼const verificationCode = generateRandomCode(6) // 生成或獲取實際的驗證碼console.log(`驗證碼`, verificationCode)const TemplateContent = 'your sms template variate'await sendSMS(mobileNumber, TemplateContent, verificationCode)res.status(200).json({ code: 200, message: 'SMS sent successfully!' })} catch (error) {console.error(error)res.status(400).json({ code: 400, message: 'Failed to send SMS.' })}
})module.exports = router

API接口實現

import express from 'express'
const router = express.Router()
import axios from 'axios'
// 替換為你的API賬號信息const apiAccessKeyId = 'your access key id'
const apiUrl = 'https://uni.apistd.com/'
const apiAction = 'sms.message.send'
const SmsSignature = 'your sms signature name'
// 'pub_verif_basic'
// 發送短信驗證碼的函數
async function sendSMS (mobile, template, codeNumber) {try {// url: apiUrl + '?action=' + apiAction + '&accessKeyId=' + apiAccessKeyIdconst { data } = await axios({url: apiUrl + '?action=' + apiAction + '&accessKeyId=' + apiAccessKeyId,method: 'post',data: {to: mobile, //手機號signature: SmsSignature, //短信簽名 名稱templateId: template, // 短信內容templateData: { code: codeNumber } //驗證碼} })// 處理響應,根據需要進行進一步的處理console.log('SMS Sent:', data)return data} catch (error) {console.error('Error sending SMS:', error)throw error}
}
// 生成指定位數的隨機數
function generateRandomCode (length) {const min = Math.pow(10, length - 1)const max = Math.pow(10, length) - 1return Math.floor(Math.random() * (max - min + 1) + min).toString()
}router.get('/Test/MobileCodeNumber', async (req, res) => {console.log(`這是用戶傳遞來的信息`, req.query)if (!req.query.mobile)return res.status(400).json({ code: 400, message: 'mobile參數必傳' })try {const mobileNumber = req.query.mobile // 替換為實際的手機號碼const verificationCode = generateRandomCode(6) // 生成或獲取實際的驗證碼console.log(`驗證碼`, verificationCode)const TemplateContent = 'your sms Template variable'await sendSMS(mobileNumber, TemplateContent, verificationCode)res.status(200).json({ code: 200, message: 'SMS sent successfully!' })} catch (error) {console.error(error)res.status(400).json({ code: 400, message: 'Failed to send SMS.' })}
})
export default router

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211473.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211473.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211473.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

拒接服務攻擊(DOS)的初步介紹

文章目錄 什么是拒絕服務攻擊拒絕服務攻擊的過程拒絕服務攻擊的類型常見的拒絕服務攻擊如何防范拒絕服務攻擊分布式拒絕服務攻擊(DDoS) 什么是拒絕服務攻擊 拒絕服務攻擊是一種網絡攻擊方式,攻擊者通過向目標計算機系統或網絡發送大量的請求…

免費分享一套Springboot+Vue前后端分離的在線商城系統,挺實用的

大家好,我是java1234_小鋒老師,看到一個不錯的SpringbootVue前后端分離的在線商城系統,分享下哈。 項目視頻演示 【免費】SpringbootVue在線商城系統 畢業設計 Java畢業設計_嗶哩嗶哩_bilibili【免費】springbootvue在線商城系統 畢業設計 …

97基于matlab的改進的帶記憶的模擬退火算法求解TSP問題

基于matlab的改進的帶記憶的模擬退火算法求解TSP問題,采用多普勒型降溫曲線描述迭代過程,在傳統算法的基礎上增加記憶功能,可測試中國31/64/144以及att48城市的數據,也可自行輸入數據進行測試,測試結果基本達到當前最優…

Swagger2的使用

手寫Api文檔的幾個痛點: 文檔需要更新的時候,需要再次發送一份給前端,也就是文檔更新交流不及時。 接口返回結果不明確 不能直接在線測試接口,通常需要使用工具,比如postman 接口文檔太多,不好管理 Sw…

gin投票項目4

對應視頻v2版本 gin項目投票系統4 1.增加一個注冊賬號的功能 增加接口 參數校驗:(需求) 確認密碼需要一致,不為空用戶名必須唯一, 不為空用戶名大于8小于16位密碼大于8小于16位,并且不能為純數字 正則表達式 必須知道這東西…

我對遷移學習的一點理解(系列2)

文章目錄 我對遷移學習的一點理解 我對遷移學習的一點理解 源域和目標域是相對的概念,指的是在遷移學習任務中涉及到的兩個不同的數據集或領域。 源域(Source Domain)通常指的是已經進行過訓練和學習的數據集,它被用來提取特征、…

Nginx緩存及HTTPS配置小記

緩存基礎 緩存分類 某些場景下,Nginx需要通過worker到上有服務中獲取數據并將結果響應給客戶端,在高并發場景下,我們完全可以將這些數據視為熱點數據,并將其緩存到Nginx服務上。 客戶端緩存:將緩存數據放到客戶端。 …

yolov8與yolov5網絡對比

回顧一下YOLOv5,不然沒機會了 這里粗略回顧一下,這里直接提供YOLOv5的整理的結構圖吧: Backbone:CSPDarkNet結構,主要結構思想的體現在C3模塊,這里也是梯度分流的主要思想所在的地方;PAN-FPN&…

OFDM模糊函數仿真

文章目錄 前言一、OFDM 信號及模糊函數1、OFDM 信號表達式2、模糊函數表達式 二、MATLAB 仿真1、MATLAB 核心源碼2、仿真結果①、OFDM 模糊函數②、OFDM 距離模糊函數③、OFDM 速度模糊函數 前言 本文進行 OFDM 的仿真,首先看一下 OFDM 的模糊函數仿真效果&#xf…

【vim】常用操作

用的時候看看,記太多也沒用,下面都是最常用的,更多去查文檔vim指令集。 以下均為正常模式下面操作,正在編輯的,先etc一下. 1/拷貝當前行 yy,5yy為拷貝包含當前行往下五行 2/p將拷貝的東西粘貼到當前行下…

Nmap腳本的應用場景

網絡安全檢測和漏洞掃描 Nmap腳本是一種強大的工具,可以用于網絡安全檢測和漏洞掃描。在滲透測試工程師的角度下,本文將詳細闡述Nmap腳本的應用場景,以及如何使用Nmap腳本進行網絡安全檢測和漏洞掃描。 一、Nmap腳本的應用場景 Nmap腳本在滲…

Java、JDK、JRE、JVM

Java、JDK、JRE、JVM 一、 Java 廣義上看,Kotlin、JRuby等運行于Java虛擬機上的編程語言以及相關的程序都屬于Java體系的一員。從傳統意義上看,Java社區規定的Java技術體系包括以下幾個部分: Java程序設計語言各種硬件平臺上的Java虛擬機實…

vue的知識點

Vue.js是一個漸進式JavaScript框架,用于簡化Web應用程序開發和管理。下面是Vue.js的一些核心知識點: 1. 數據綁定:Vue.js通過指令和模板語法實現了雙向數據綁定,可以實時更新視圖和模型之間的數據。 2. 組件化開發:V…

【力扣】移除鏈表元素203

目錄 1.前言2. 題目描述3. 題目分析3.1 不帶哨兵位3.2 帶哨兵位 4. 附代碼4.1 不帶哨兵位4.2 帶哨兵位 1.前言 這里開始介紹從網上一些刷題網站上的題目,在這里做一些分享,和學習記錄。 先來介紹一些力扣的OJ題目。 這里的OJ就是我們不需要寫主函數&…

數據表記錄的操作

一、數據添加 1、打開SSMS,附加數據庫(數據庫文件在自己的文件夾下面),并進行下面的設置: (1)設置“部門信息”表中的“編號”為主鍵(SSMS) 首先建立好所需的數據庫庫…

華為OD機試 - 生成哈夫曼樹(Java JS Python C)

題目描述 給定長度為 n 的無序的數字數組,每個數字代表二叉樹的葉子節點的權值,數字數組的值均大于等于1。 請完成一個函數,根據輸入的數字數組,生成哈夫曼樹,并將哈夫曼樹按照中序遍歷輸出。 為了保證輸出的二叉樹中序遍歷結果統一,增加以下限制: 二叉樹節點中,左節…

java中什么是線程池?

線程池(Thread Pool)是一種線程管理的機制,它主要解決了線程生命周期的開銷和資源消耗問題。線程池在程序中創建一些預先定義數量的線程,將任務分配給這些線程,從而提高了線程的重用性和性能。線程池的核心思想是將創建…

為 Compose MultiPlatform 添加 C/C++ 支持(3):實戰 Desktop、Android、iOS 調用同一個 C/C++ 代碼

theme: serene-rose 前言 在本系列的前兩篇文章中我們已經學會了如何在 kotlin native 平臺(iOS)使用 cinterop 調用 C/C 代碼。以及在 jvm 平臺(Android、Desktop)使用 jni 調用 C/C 代碼,并且知道了如何自動編譯 A…

Git 五分鐘教程速度入門

Git 五分鐘教程速度入門 分類 編程技術 許多人認為 Git 太混亂,或認為它是一種復雜的版本控制系統,其實不然,這篇文章有助于大家快速上手使用 Git。 入門 使用Git前,需要先建立一個倉庫(repository)。您可以使用一個已經存在的…

Win10操作系統安裝Python

1 Python解釋器下載 1.1 安裝環境 Windows 10 專業工作站版22H2 python-3.9.6-amd64.exe 1.2 下載地址 Python官網:Welcome to Python.org Python鏡像:CNPM Binaries Mirror 2 Python解釋器安裝 2.1 Install Python 3.9.6 (64-bit)界面 雙擊運行下…