久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

阿里云短信接口Demo全解析:從調(diào)用鏈路到生產(chǎn)落地

阿里云短信接口Demo全解析:從調(diào)用鏈路到生產(chǎn)落地 簡(jiǎn)介這份壓縮包定位為阿里云短信服務(wù)在PHP環(huán)境中的集成示例面向需要快速接入短信驗(yàn)證碼、系統(tǒng)通知或營(yíng)銷消息的網(wǎng)站開發(fā)者。壓縮包整體大小約三點(diǎn)三五兆字節(jié)內(nèi)含阿里云官方短信服務(wù)的PHP開發(fā)包調(diào)用示例完整演示了從配置訪問(wèn)密鑰、初始化客戶端、調(diào)用發(fā)送短信接口到解析返回結(jié)果的流程同時(shí)梳理了短信模板變量替換、簽名審核規(guī)則、同步與異步調(diào)用差異、異常與錯(cuò)誤碼排查以及使用加密傳輸和妥善保管密鑰等安全注意事項(xiàng)知識(shí)點(diǎn)覆蓋全面。此外該開發(fā)包還支持查詢發(fā)送狀態(tài)、接收短信驗(yàn)證碼等擴(kuò)展操作便于開發(fā)者按業(yè)務(wù)需求二次開發(fā)。已有二百七十四人瀏覽學(xué)習(xí)借助該示例可以直觀理解接口參數(shù)含義與調(diào)試技巧在實(shí)際項(xiàng)目中快速完成短信功能對(duì)接有效減少踩坑與返工。1. 阿里云短信接口demo.zip一個(gè)壓縮包里藏著的完整調(diào)用鏈路做過(guò)對(duì)接短信功能的后端都懂第一次拿到阿里云短信接口demo.zip以為解壓就能跑通結(jié)果被AccessKey、簽名、模板、endpoint四個(gè)概念輪番勸退。這個(gè)壓縮包不大通常就是pom.xml、一個(gè)配置文件、一個(gè)發(fā)送示例類但它背后對(duì)應(yīng)的是完整的鏈路開通短信服務(wù)、申請(qǐng)簽名、申請(qǐng)模板、創(chuàng)建RAM子賬號(hào)、引入SDK、調(diào)SendSms、讀懂錯(cuò)誤碼。它能解決“如何在十分鐘內(nèi)把第一條短信發(fā)到手機(jī)”的問(wèn)題適合剛接手短信需求的后端開發(fā)也適合被產(chǎn)品催著“今天就上驗(yàn)證碼”的工程同學(xué)。這里把demo值得復(fù)用的部分拆開講透哪些要改、哪些別動(dòng)、發(fā)不出去先查哪里。2. 先看懂短信接口的調(diào)用模型再動(dòng)demo代碼很多人解壓demo就急著跑main這是新手階段最常見的動(dòng)作。我一般勸他們先花十分鐘看明白這個(gè)接口是怎么工作的——demo能跑通不代表業(yè)務(wù)能扛真實(shí)流量短信這種接口一旦上線發(fā)不出去挨罵的是你不是demo。2.1 一次短信發(fā)送只是“受理”不是“到達(dá)”阿里云短信接口的調(diào)用模型并不復(fù)雜客戶端拿著AccessKey構(gòu)造請(qǐng)求把手機(jī)號(hào)、簽名名、模板號(hào)、模板變量拼成參數(shù)調(diào)用SendSms這個(gè)Action請(qǐng)求發(fā)到dysmsapi.aliyuncs.com這個(gè)endpoint。阿里云后端校驗(yàn)請(qǐng)求合法性——這一步校驗(yàn)的是AccessKey簽名也叫請(qǐng)求簽名——再校驗(yàn)短信簽名和模板的歸屬與狀態(tài)都通過(guò)之后才把短信交給運(yùn)營(yíng)商下發(fā)。這里有個(gè)新手普遍會(huì)踩的認(rèn)知坑SendSms返回的Code等于OK只代表阿里云受理了這條消息不代表手機(jī)已經(jīng)收到。短信真正下發(fā)的狀態(tài)要等運(yùn)營(yíng)商回執(zhí)存儲(chǔ)在阿里云側(cè)需要用另一個(gè)接口QuerySendDetails按手機(jī)號(hào)和日期去查或者在控制臺(tái)看發(fā)送記錄。把“受理成功”當(dāng)成“發(fā)送成功”對(duì)外承諾是很多線上事故的起點(diǎn)。錯(cuò)誤碼也要提前建立認(rèn)知。阿里云短信返回的錯(cuò)誤碼分成幾類前綴不同含義完全不同常見的類型如下錯(cuò)誤碼前綴/樣式含義典型處理isv.*產(chǎn)品側(cè)參數(shù)或業(yè)務(wù)規(guī)則錯(cuò)誤檢查參數(shù)、簽名、模板、頻控isp.*服務(wù)側(cè)或運(yùn)營(yíng)商回執(zhí)錯(cuò)誤稍后重試或查具體子碼SignatureDoesNotMatchAccessKey或簽名算法錯(cuò)誤檢查密鑰和本地時(shí)間Throttling接口調(diào)用請(qǐng)求過(guò)于頻繁降低頻率稍后重試收到isv開頭的基本是代碼或配置問(wèn)題自己排查isp開頭的多半是短期故障重試比改代碼有效。這個(gè)分類能讓排錯(cuò)少走彎路。另一個(gè)關(guān)鍵點(diǎn)是AccessKey的權(quán)限模型。demo里通常用的主賬號(hào)AccessKey能跑通但風(fēng)險(xiǎn)極大。生產(chǎn)環(huán)境建議在RAM里開一個(gè)子賬號(hào)只授予短信服務(wù)相關(guān)權(quán)限把AccessKeyId和AccessKeySecret放到環(huán)境變量或密鑰管理服務(wù)不能讓它們出現(xiàn)在代碼倉(cāng)庫(kù)。這不是小題大做短信接口涉及資金和騷擾風(fēng)險(xiǎn)AccessKey一旦泄露后果比泄露數(shù)據(jù)庫(kù)密碼嚴(yán)重得多。短信簽名和模板也不是憑空就能用的。新賬號(hào)在控制臺(tái)申請(qǐng)簽名、申請(qǐng)模板后要等待審核通過(guò)才能發(fā)送。個(gè)人認(rèn)證賬號(hào)和企業(yè)認(rèn)證賬號(hào)可申請(qǐng)的簽名類型、模板內(nèi)容范圍不同營(yíng)銷類短信基本和企業(yè)認(rèn)證綁定。demo里自帶的測(cè)試簽名只能用于本地驗(yàn)證真實(shí)業(yè)務(wù)需要用自己的資質(zhì)重新申請(qǐng)。2.2 demo.zip里的常見文件布局阿里云官方給出的短信demo在國(guó)內(nèi)基本以zip形式分發(fā)解壓之后通常長(zhǎng)這樣。這里說(shuō)的是常見Java版本Python、PHP、Node.js的結(jié)構(gòu)大同小異demo.zip ├── pom.xml // Maven 依賴聲明 ├── src/main/resources/application.properties // 運(yùn)行時(shí)配置 ├── src/main/java/com/aliyun/demo/SendSmsDemo.java // 發(fā)送示例 └── README.txt // 配置說(shuō)明與申請(qǐng)入口pom.xml聲明短信SDK依賴Java版核心是dysmsapi20170525配套teaopenapi這類基礎(chǔ)庫(kù)。application.properties里放的是accessKeyId、accessKeySecret、signName、templateCode幾個(gè)運(yùn)行時(shí)參數(shù)。SendSmsDemo.java是主流程初始化客戶端、構(gòu)造請(qǐng)求、發(fā)送、打印響應(yīng)。為什么demo里用properties而不是yaml因?yàn)閐emo要跨框架復(fù)用Spring Boot工程里yaml需要特定解析器而properties是JDK原生支持的鍵值格式任何Java工程都能讀。你在自己工程里換成yaml沒問(wèn)題但理解它用properties是為了最大兼容。把demo導(dǎo)入IDEA時(shí)記得在Maven面板勾選自動(dòng)導(dǎo)入等依賴下載完成再打開SendSmsDemo.java否則會(huì)看到大量標(biāo)紅報(bào)錯(cuò)。Eclipse則是Import Existing Maven Project。依賴沒拉完之前不要急著運(yùn)行JDK版本也要確認(rèn)新版SDK要求JDK 8以上。我特別提醒一點(diǎn)很多demo為了方便演示把AccessKey和簽名模板直接寫在源碼里。你可以把demo當(dāng)作學(xué)習(xí)材料但生產(chǎn)環(huán)境必須把這些配置挪到環(huán)境變量或配置中心。之前有個(gè)同事圖省事把AccessKey提交到私有Git倉(cāng)庫(kù)后來(lái)倉(cāng)庫(kù)權(quán)限配置失誤被外部掃描到一夜之間被刷幾千條短信??圪M(fèi)還在其次更麻煩的是簽名被投訴短期封禁業(yè)務(wù)全部受影響。這條血淚經(jīng)驗(yàn)記牢。2.3 為什么用demo而不是直接啃OpenAPI文檔OpenAPI文檔寫得再全對(duì)第一次接入的人也不夠友好。原因在于版本差異。阿里云短信接口的SDK有兩代實(shí)現(xiàn)老一代用DefaultProfile初始化新一代以teaopenapi為基礎(chǔ)用Config對(duì)象設(shè)置endpoint兩代代碼的包名、類名、調(diào)用方式完全不同。如果你搜到一個(gè)老博客照著寫跟新SDK對(duì)不上編譯都過(guò)不去。判斷demo代碼新舊有個(gè)簡(jiǎn)單辦法看pom里依賴的artifactId是dysmsapi20170525還是aliyun-java-sdk-core前者是新版后者是老版。新版代碼里設(shè)置endpoint用的是config.endpoint老版則是在request里setDomain。如果看的教程和你的demo不是同代直接放棄那篇教程以demo自帶的pom為準(zhǔn)。demo的價(jià)值在于它把“哪個(gè)版本配哪種初始化方式”這件事定死了。你解壓出來(lái)的pom和代碼是配套的先跑通再改業(yè)務(wù)邏輯比對(duì)著文檔一遍遍試要快得多。但它也有“負(fù)面價(jià)值”demo為了說(shuō)明問(wèn)題通常把異常處理簡(jiǎn)化成打印堆棧把配置硬編碼。直接拿demo上線是另一種翻車姿勢(shì)。正確用法是用demo打通鏈路然后把骨架搬到自己的工程補(bǔ)上日志、連接池、異常分級(jí)、失敗重試。實(shí)際上demo的定位更像地圖——告訴你路怎么走實(shí)際開車的是你的代碼。別把地圖當(dāng)車??吹竭@里模型已經(jīng)立住了下面把demo跑起來(lái)。3. 把demo跑起來(lái)從Maven依賴到第一條短信理論模型看完了接下來(lái)動(dòng)手。這里從解壓demo開始把常見Java流程拆成三步配倉(cāng)庫(kù)、改配置、發(fā)短信。每一步我會(huì)標(biāo)注哪些參數(shù)必須改哪些是demo里帶過(guò)來(lái)但生產(chǎn)要格外小心的。3.1 用Maven配阿里云倉(cāng)庫(kù)把依賴?yán)奖镜貒?guó)內(nèi)直接用Maven中央倉(cāng)庫(kù)拉阿里云SDK有時(shí)候會(huì)很慢特別是第一次拉teaopenapi那一組依賴容易卡住。常見做法是在Maven的settings.xml里配置阿里云公共倉(cāng)庫(kù)鏡像地址是maven.aliyun.com/repository/public。這個(gè)鏡像同時(shí)聚合了中央倉(cāng)庫(kù)和阿里云的制品倉(cāng)庫(kù)短信SDK的坐標(biāo)能直接命中。mirror idaliyunmaven/id mirrorOfcentral/mirrorOf name阿里云公共倉(cāng)庫(kù)/name urlhttps://maven.aliyun.com/repository/public/url /mirror把這段加到$MAVEN_HOME/conf/settings.xml的 節(jié)點(diǎn)里。如果你只在自己用戶目錄配了~/.m2/settings.xml效果一樣。mirrorOfcentral表示只鏡像中央倉(cāng)庫(kù)不影響你自己定義的私有倉(cāng)庫(kù)這是最穩(wěn)妥的寫法不建議寫成mirrorOf*把私有倉(cāng)庫(kù)也強(qiáng)制代理掉。配置完成后在pom.xml里聲明依賴。demo自帶的pom一般已經(jīng)寫好如果你自己新建工程坐標(biāo)寫法如下dependency groupIdcom.aliyun/groupId artifactIddysmsapi20170525/artifactId version以你拉取到的最新穩(wěn)定版為準(zhǔn)/version /dependency這里不寫死具體版本號(hào)因?yàn)榘姹驹诔掷m(xù)發(fā)布。公司有統(tǒng)一BOM管理的話這個(gè)依賴的版本可以交給BOM統(tǒng)一約束業(yè)務(wù)pom里不用寫version。拉取后用mvn dependency:tree看一眼確認(rèn)teaopenapi相關(guān)傳遞依賴都已就位。老項(xiàng)目里如果還留著aliyun-java-sdk-core的舊依賴避免新舊混用新版SDK會(huì)和老包沖突建議統(tǒng)一到新SDK。Spring Boot工程導(dǎo)入demo時(shí)如果IDEA識(shí)別不到依賴先執(zhí)行mvn clean install把依賴?yán)奖镜卦偎⑿隆_€有一類常見問(wèn)題是本地Maven倉(cāng)庫(kù)損壞清理~/.m2/repository/com/aliyun目錄后重新拉取即可不用折騰全局配置。3.2 配置AccessKey、簽名名、模板號(hào)、手機(jī)號(hào)依賴?yán)聛?lái)下一步是填配置。demo里的application.properties給了四個(gè)核心配置項(xiàng)。其中AccessKeyId和AccessKeySecret最敏感不要寫死在文件里啟動(dòng)時(shí)從環(huán)境變量讀取更安全accessKeyId${ALIYUN_ACCESS_KEY_ID} accessKeySecret${ALIYUN_ACCESS_KEY_SECRET} signName你的短信簽名 templateCodeSMS_000000000${}語(yǔ)法是Spring占位符方式demo如果不用Spring直接在代碼里System.getenv()讀取也一樣。重點(diǎn)在于AccessKeyId和Secret必須來(lái)自安全環(huán)境不要在倉(cāng)庫(kù)出現(xiàn)真實(shí)值。signName是你在控制臺(tái)申請(qǐng)通過(guò)后看到的簽名名稱比如“某某科技”templateCode是模板批準(zhǔn)后的編號(hào)格式是SMS_加數(shù)字。這兩個(gè)值在控制臺(tái)菜單里都能找到。提示如果代碼里直接寫AccessKey并提交到Git倉(cāng)庫(kù)即使在私有倉(cāng)庫(kù)也存在泄露風(fēng)險(xiǎn)。建議用環(huán)境變量或配置中心管理并在啟動(dòng)時(shí)校驗(yàn)環(huán)境變量是否為空。AccessKey的獲取路徑需要說(shuō)清楚。常見做法是在阿里云控制臺(tái)進(jìn)入RAM訪問(wèn)控制創(chuàng)建一個(gè)子用戶勾選編程訪問(wèn)生成一對(duì)AccessKey。然后給子用戶添加權(quán)限策略短信服務(wù)相關(guān)的系統(tǒng)策略名稱一般是AliyunDysmsFullAccess。不建議直接拿主賬號(hào)AccessKey因?yàn)橹髻~號(hào)權(quán)限范圍太大一旦泄露影響面不可控。手機(jī)號(hào)也可以放到配置里但生產(chǎn)環(huán)境手機(jī)號(hào)是動(dòng)態(tài)入?yún)emo里填一個(gè)自己的號(hào)碼即可方便確認(rèn)是否真的收到。我一般會(huì)把手機(jī)號(hào)和signName、templateCode分開處理簽名和模板是相對(duì)固定的靜態(tài)配置手機(jī)號(hào)和模板參數(shù)是每次請(qǐng)求的動(dòng)態(tài)數(shù)據(jù)混在一起后面不好維護(hù)。3.3 發(fā)送第一條短信核心代碼與參數(shù)說(shuō)明配置就緒寫發(fā)送邏輯。新版SDK的初始化方式和老版區(qū)別很大建議直接跟demo保持一致。新版一般寫法如下import com.aliyun.dysmsapi20170525.Client; import com.aliyun.dysmsapi20170525.models.SendSmsRequest; import com.aliyun.dysmsapi20170525.models.SendSmsResponse; import com.aliyun.teaopenapi.models.Config; public class SendSmsDemo { public static void main(String[] args) throws Exception { // 1. 從環(huán)境變量讀取AccessKey避免硬編碼 String accessKeyId System.getenv(ALIYUN_ACCESS_KEY_ID); String accessKeySecret System.getenv(ALIYUN_ACCESS_KEY_SECRET); // 2. 初始化客戶端短信服務(wù)endpoint全局唯一 Config config new Config() .setAccessKeyId(accessKeyId) .setAccessKeySecret(accessKeySecret); config.endpoint dysmsapi.aliyuncs.com; Client client new Client(config); // 3. 構(gòu)造短信請(qǐng)求TemplateParam是JSON字符串 SendSmsRequest request new SendSmsRequest() .setPhoneNumbers(13800138000) .setSignName(你的短信簽名) .setTemplateCode(SMS_000000000) .setTemplateParam({\code\:\1234\}); // 4. 同步發(fā)送并輸出返回結(jié)果 SendSmsResponse response client.sendSms(request); System.out.println(response.getBody().getCode()); System.out.println(response.getBody().getMessage()); } }這段代碼的邏輯拆開看第一步從環(huán)境變量取AccessKey避免硬編碼第二步用Config對(duì)象設(shè)置endpoint短信接口所有region統(tǒng)一走dysmsapi.aliyuncs.com不像ECS那樣需要分地域域名第三步構(gòu)造SendSmsRequest四個(gè)入?yún)⑹顷P(guān)鍵第四步同步調(diào)用sendSms拿到響應(yīng)。四個(gè)參數(shù)的含義和邊界我整理了一張表參數(shù)類型說(shuō)明是否必須phoneNumbersString接收手機(jī)號(hào)只支持單個(gè)號(hào)碼不用加86是signNameString短信簽名需在控制臺(tái)審核通過(guò)是templateCodeString短信模板編號(hào)格式為SMS_開頭是templateParamStringJSON格式字符串key需與模板變量一致模板帶變量時(shí)必須最容易被搞混的是TemplateParam。它看起來(lái)像對(duì)象實(shí)際上是一個(gè)JSON格式的字符串而且JSON里的key必須和模板里聲明的變量名完全一致。模板內(nèi)容如果寫了“您的驗(yàn)證碼為${code}${minute}分鐘內(nèi)有效”那么TemplateParam必須是{code:1234,minute:5}多一個(gè)、少一個(gè)、大小寫不一樣都會(huì)直接報(bào)變量相關(guān)錯(cuò)誤。另一個(gè)容易踩的是引號(hào)轉(zhuǎn)義Java字符串里表示JSON的double quote必須加反斜杠所以我一般不用手拼字符串而是用Jackson或Gson序列化Map代碼更可讀也更安全。響應(yīng)體里的Code、Message、RequestId、BizId四個(gè)值都值得打日志。RequestId用于向阿里云提交工單時(shí)定位請(qǐng)求BizId是交易流水號(hào)查詢明細(xì)時(shí)要帶上。demo里只打印了Code和Message生產(chǎn)環(huán)境的日志要全量記錄這四個(gè)字段。到這里main方法跑通手機(jī)上應(yīng)該能收到測(cè)試短信。如果沒收到別急著懷疑代碼先看第五章的排錯(cuò)清單。4. 從demo到生產(chǎn)簽名、模板、參數(shù)與異步改造demo能發(fā)出短信只是第一步離生產(chǎn)可用還有四個(gè)必須處理的點(diǎn)。這一章聊的是把demo代碼拿去做真實(shí)業(yè)務(wù)時(shí)哪些參數(shù)要重新定義、哪些調(diào)用方式要換掉。4.1 region、endpoint、簽名、模板四者的對(duì)應(yīng)關(guān)系短信服務(wù)和ECS、OSS最大的差異在于短信接口的endpoint是全局唯一的dysmsapi.aliyuncs.com不分華東、華北、海外。但這不意味著沒有地域概念——需要在控制臺(tái)確認(rèn)短信服務(wù)開通在哪個(gè)地域以及RAM權(quán)限策略里是否限制了地域。多數(shù)情況下主賬號(hào)開通的短信服務(wù)可以在任意地域調(diào)用但如果用了RAM自定義策略可能被限定在cn-hangzhou這就是本地能發(fā)、線上403的原因之一。簽名和模板是綁在賬號(hào)上的資源不跟地域走但跟賬號(hào)類型走。個(gè)人認(rèn)證賬號(hào)和企業(yè)認(rèn)證賬號(hào)可申請(qǐng)的簽名類型、模板內(nèi)容范圍不同。個(gè)人賬號(hào)只能發(fā)驗(yàn)證碼和通知類營(yíng)銷類短信基本和企業(yè)認(rèn)證綁定。這意味著如果業(yè)務(wù)方要求發(fā)營(yíng)銷推廣短信demo里那套測(cè)試簽名肯定不行必須用企業(yè)資質(zhì)去申請(qǐng)。我一般會(huì)在工程里建一個(gè)短信配置常量類把簽名和模板集中管理用枚舉區(qū)分業(yè)務(wù)場(chǎng)景。驗(yàn)證碼模板是一個(gè)枚舉值通知模板是一個(gè)枚舉值避免業(yè)務(wù)代碼里到處裸寫模板編號(hào)。散落的配置一多改一個(gè)簽名名都要全局搜索實(shí)在痛苦。Spring Boot工程里還可以把這組枚舉交給Spring管理緩存到本地Map一次性加載每次發(fā)送只查內(nèi)存。4.2 TemplateParam的JSON轉(zhuǎn)義與變量約束短信模板的變量不是隨便傳的。每個(gè)變量有長(zhǎng)度限制驗(yàn)證碼類變量默認(rèn)不超過(guò)20個(gè)字符具體看模板審核結(jié)果。另外阿里云會(huì)對(duì)變量值做敏感詞過(guò)濾你傳了“免費(fèi)”兩個(gè)字很可能被系統(tǒng)攔截這類營(yíng)銷敏感詞會(huì)直接導(dǎo)致發(fā)送失敗。一個(gè)常見錯(cuò)誤是企業(yè)內(nèi)部發(fā)給會(huì)員的短信里帶“免費(fèi)領(lǐng)取”這類詞模板審核時(shí)通常通不過(guò)。第二個(gè)常見錯(cuò)誤是模板變量在代碼里拼JSON時(shí)引號(hào)轉(zhuǎn)義出錯(cuò)。我建議的做法是始終用Jackson序列化結(jié)構(gòu)體不要手寫字符串MapString, String paramMap new HashMap(); paramMap.put(code, randomCode); paramMap.put(minute, 5); String templateParam new ObjectMapper().writeValueAsString(paramMap);這段代碼的價(jià)值在于Map的key決定變量名value就是變量值序列化后天然是合法JSON不需要關(guān)心字符串里有沒有特殊符號(hào)。如果值本身是中文JSON庫(kù)也會(huì)自動(dòng)處理Unicode轉(zhuǎn)義省去一行行找引號(hào)的體力活。另一個(gè)隱蔽的坑是模板變量在控制臺(tái)審核時(shí)寫的是中文變量名而代碼里TemplateParam的key必須和模板變量完全一致。有些模板設(shè)置人員習(xí)慣在控制臺(tái)用“驗(yàn)證碼”作為變量名代碼里卻寫了“code”發(fā)送時(shí)就報(bào)變量不匹配。所以建立模板的時(shí)候我一般直接在變量列表里定義英文字段名從源頭避免編碼混亂。4.3 線程池發(fā)送驗(yàn)證碼異步與流控的平衡demo里用main方法同步調(diào)用sendSms一個(gè)請(qǐng)求幾秒內(nèi)返回看起來(lái)沒問(wèn)題。但放到Spring Boot里直接這么寫就麻煩了接口內(nèi)同步調(diào)短信用戶的請(qǐng)求會(huì)一直掛著短信服務(wù)端偶爾耗時(shí)超過(guò)2秒整個(gè)HTTP鏈路就感覺卡頓。常見做法是把發(fā)送拆成異步接收請(qǐng)求時(shí)只做參數(shù)校驗(yàn)和快速校驗(yàn)然后丟線程池發(fā)送讓接口立即返回。private final ExecutorService smsPool new ThreadPoolExecutor( 4, 8, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue(1000)); public void sendCodeAsync(String phone, String code) { smsPool.execute(() - { // 組裝請(qǐng)求并調(diào)用sendSms SendSmsResponse resp client.sendSms(req); if (!OK.equals(resp.getBody().getCode())) { // 記錄錯(cuò)誤碼觸發(fā)告警 } }); }異步線程池的核心數(shù)不需要很大因?yàn)槎绦沤涌诒旧碛蓄l控。阿里云對(duì)短信接口有默認(rèn)的頻率限制控制臺(tái)或錯(cuò)誤碼說(shuō)明里有明確值但有個(gè)經(jīng)驗(yàn)性結(jié)論對(duì)同一個(gè)手機(jī)號(hào)發(fā)送驗(yàn)證碼通常一分鐘內(nèi)不能超過(guò)一條同一個(gè)簽名下的總量也有每日閾值。線程池開得再大也會(huì)被頻控卡住所以異步的目的是提高接口響應(yīng)速度不是為了無(wú)限并發(fā)。我習(xí)慣把頻控設(shè)計(jì)在業(yè)務(wù)側(cè)給同一手機(jī)號(hào)的驗(yàn)證碼發(fā)送加一個(gè)Redis分布式鎖或本地時(shí)間窗口判斷距離上次發(fā)送不到60秒直接拒絕讓頻控錯(cuò)誤不要打到阿里云上。這樣既保護(hù)自己也避免把賬號(hào)的發(fā)送額度燒光。隊(duì)列滿時(shí)要有策略一般是丟棄并提示稍后重試不能無(wú)限往阻塞隊(duì)列里塞內(nèi)存會(huì)爆。4.4 阿里云短信API與云MAS平臺(tái)接口的選擇并不是所有短信業(yè)務(wù)都必須走阿里云。很多企業(yè)和集團(tuán)客戶特別是運(yùn)營(yíng)商背景的甲方會(huì)要求使用中國(guó)移動(dòng)的云MAS平臺(tái)也就是常說(shuō)的“云MAS平臺(tái)http(java)接口文檔短信”。它的對(duì)接方式不同云MAS對(duì)外暴露的是HTTP接口Java側(cè)用HttpClient構(gòu)造表單請(qǐng)求就能提交不需要引入重量級(jí)SDK但鑒權(quán)方式、加密規(guī)則、狀態(tài)推送機(jī)制是另一套標(biāo)準(zhǔn)。什么時(shí)候選阿里云短信API什么時(shí)候選云MAS我從工程角度給判斷標(biāo)準(zhǔn)如果只是產(chǎn)品里的驗(yàn)證碼、通知追求接入速度和穩(wěn)定性選阿里云demo和文檔生態(tài)完整排錯(cuò)有據(jù)可循如果業(yè)務(wù)明確需要走移動(dòng)通道才能有更好的到達(dá)率或者合同指定云MAS那按它的http接口文檔實(shí)現(xiàn)也不復(fù)雜只是要做好通道切換的抽象。我見過(guò)不少項(xiàng)目在代碼里寫死廠商短信客戶端后來(lái)要換通道時(shí)只能大改。所以我會(huì)在業(yè)務(wù)代碼和廠商SDK之間加一層SmsSender接口阿里云和云MAS各自實(shí)現(xiàn)切換通道時(shí)只動(dòng)配置。這個(gè)抽象聽起來(lái)多寫幾個(gè)類但真的遇到通道故障要切換時(shí)能省一整夜的折騰。5. 阿里云短信api發(fā)不出去的排查清單五個(gè)高頻坑我把多年踩坑的記錄整理成排查清單。每一條都是“現(xiàn)象→原因→解決”三段寫法遇到問(wèn)題直接對(duì)照比翻文檔快。5.1 報(bào)錯(cuò)isv.SMS_SIGNATURE_ILLEGAL簽名不合法現(xiàn)象調(diào)用SendSms返回Codeisv.SMS_SIGNATURE_ILLEGALMessage提示簽名不合法或未審核。原因三選一。一是signName寫錯(cuò)了常見是把“某某科技”寫成“某科技”二是簽名還沒審核通過(guò)新申請(qǐng)的簽名有審核周期期間調(diào)用會(huì)被拒絕三是簽名被停用通常是內(nèi)容違規(guī)或投訴過(guò)多導(dǎo)致。解決先到控制臺(tái)“簽名管理”頁(yè)面看簽名狀態(tài)狀態(tài)必須為已審核通過(guò)。再看代碼里signName參數(shù)是否和控制臺(tái)完全一致包括括號(hào)、空格這類字符。在工程里執(zhí)行g(shù)rep -R signName src/能找到所有引用點(diǎn)逐一核對(duì)。如果簽名被停用只能重新申請(qǐng)所有引用舊簽名的代碼得一并改掉。5.2 報(bào)錯(cuò)isv.MOBILE_NUMBER_ILLEGAL手機(jī)號(hào)不被認(rèn)可現(xiàn)象參數(shù)里手機(jī)號(hào)是“13800138000”這種正常號(hào)段但接口返回手機(jī)號(hào)不合法。原因手機(jī)號(hào)字段傳了帶國(guó)家碼、帶空格、帶橫杠的格式或者變量在傳輸過(guò)程中被解析成數(shù)字導(dǎo)致精度丟失。我遇到過(guò)用Long類型傳手機(jī)號(hào)前導(dǎo)0被截?cái)嗟那闆r還有一次是業(yè)務(wù)方把多個(gè)手機(jī)號(hào)用逗號(hào)拼接傳進(jìn)來(lái)以為能群發(fā)其實(shí)SendSms一次只接受一個(gè)號(hào)碼。解決發(fā)送前做嚴(yán)格清洗統(tǒng)一用字符串接收手機(jī)號(hào)去掉86、空格、橫杠再用正則^1\d{10}$校驗(yàn)。打印入?yún)⒌淖止?jié)長(zhǎng)度看號(hào)碼里是否有肉眼看不見的零寬字符這類字符在復(fù)制粘貼時(shí)偶爾混進(jìn)來(lái)。群發(fā)需求不要用SendSms循環(huán)要用批量發(fā)送能力這屬于另一條產(chǎn)品線的能力。5.3 報(bào)錯(cuò)isv.TEMPLATE_MISSING_PARAMETER模板變量對(duì)不上現(xiàn)象模板審核內(nèi)容里有${code}和${minute}但代碼只傳了code接口報(bào)缺少參數(shù)。原因TemplateParam里的key集合和模板變量集合不匹配。多傳、少傳、key拼寫不一致都會(huì)觸發(fā)這一類錯(cuò)誤。有些模板變量被設(shè)置成中文代碼里卻是英文同樣報(bào)錯(cuò)。解決最直接的排查是把TemplateParam打印出來(lái)和模板內(nèi)容逐字對(duì)比。記住模板變量名是認(rèn)證時(shí)定義的代碼必須對(duì)齊認(rèn)證值而不是“我覺得叫什么就叫什么”。用JSON庫(kù)序列化參數(shù)Map減少轉(zhuǎn)義問(wèn)題的同時(shí)也方便打印日志核對(duì)。如果模板里變量很多可以寫個(gè)單元測(cè)試把模板變量枚舉和參數(shù)Map做差集校驗(yàn)漏傳了在發(fā)短信之前就報(bào)錯(cuò)。5.4 報(bào)錯(cuò)isv.BUSINESS_LIMIT_CONTROL流控觸發(fā)的玄學(xué)現(xiàn)象代碼沒變配置沒換突然批量發(fā)送時(shí)大量報(bào)BUSINESS_LIMIT_CONTROL。剛發(fā)完一條緊接著發(fā)第二條也報(bào)這個(gè)錯(cuò)。原因阿里云對(duì)單手機(jī)號(hào)、單簽名、單賬號(hào)均有頻率控制。驗(yàn)證碼場(chǎng)景尤其嚴(yán)格同一號(hào)碼在幾秒內(nèi)重復(fù)請(qǐng)求基本必然觸發(fā)流控。還有一些限制是賬戶維度的比如每天總量、高峰并發(fā)量控制臺(tái)不一定每個(gè)都能看到明確閾值。解決業(yè)務(wù)側(cè)加發(fā)送間隔控制驗(yàn)證碼場(chǎng)景通常對(duì)同一號(hào)碼限60秒一條。補(bǔ)發(fā)按鈕要有倒計(jì)時(shí)防止手抖點(diǎn)三次。真正常量發(fā)送的場(chǎng)景提前規(guī)劃號(hào)碼維度的時(shí)間窗分散提交。這個(gè)錯(cuò)誤的玄學(xué)在于閾值可能隨賬號(hào)風(fēng)控狀態(tài)調(diào)整所以要保留完整日志出問(wèn)題時(shí)方便申請(qǐng)解除限制。5.5 本地能發(fā)、線上掛環(huán)境與權(quán)限差異現(xiàn)象demo在本地用主賬號(hào)AccessKey發(fā)送一切正常上到測(cè)試環(huán)境就開始報(bào)Forbidden或InvalidAccessKeyId或者一直超時(shí)。原因線上環(huán)境可能沒加載環(huán)境變量AccessKey拉取為空也可能是運(yùn)維只給測(cè)試環(huán)境配了某個(gè)RAM角色角色沒有短信服務(wù)權(quán)限。還有一類是網(wǎng)絡(luò)層問(wèn)題測(cè)試環(huán)境沒有放通到dysmsapi.aliyuncs.com的HTTPS出口。解決登錄線上服務(wù)器執(zhí)行echo $ALIYUN_ACCESS_KEY_ID檢查環(huán)境變量確認(rèn)值存在且與本地一致。權(quán)限方面到RAM控制臺(tái)確認(rèn)角色的授權(quán)策略里包含短信服務(wù)相關(guān)權(quán)限或者直接配置子賬號(hào)AccessKey。網(wǎng)絡(luò)方面用curl -I https://dysmsapi.aliyuncs.com探測(cè)連通性如果出口被防火墻限制加白名單或配置公司出口網(wǎng)關(guān)。6. 從demo到工程化驗(yàn)證碼存儲(chǔ)、落庫(kù)與對(duì)賬demo的問(wèn)題是你發(fā)了第一條短信但不知道它后來(lái)怎么樣了。生產(chǎn)系統(tǒng)中驗(yàn)證碼要能校驗(yàn)、發(fā)送記錄要能查、狀態(tài)要能對(duì)賬。這章講三個(gè)工程化動(dòng)作把demo代碼變成可靠的短信子系統(tǒng)。6.1 驗(yàn)證碼有效期與Redis存儲(chǔ)驗(yàn)證碼發(fā)出去5分鐘有效這是業(yè)務(wù)常態(tài)。存儲(chǔ)在Redis里key的格式我用sms:code:{phone}value存驗(yàn)證碼過(guò)期時(shí)間300秒。校驗(yàn)時(shí)先取出來(lái)比對(duì)比對(duì)成功立即刪除防止同一個(gè)驗(yàn)證碼被重復(fù)使用。還需要記錄一個(gè)每手機(jī)號(hào)的發(fā)送時(shí)間key用來(lái)做60秒的發(fā)送間隔限制兩步鎖串起來(lái)就同時(shí)解決有效期和頻控。6.2 發(fā)送記錄落庫(kù)每次發(fā)送都要落庫(kù)字段設(shè)計(jì)不需要復(fù)雜一個(gè)發(fā)送日志表就夠了。核心字段包括手機(jī)號(hào)、模板號(hào)、參數(shù)JSON、請(qǐng)求返回的Code、Message、BizId、RequestId、發(fā)送時(shí)間。BizId是阿里云返回的業(yè)務(wù)IDQuerySendDetails的時(shí)候要用。落庫(kù)的時(shí)間點(diǎn)要選在拿到響應(yīng)之后避免把沒受理成功的記錄也寫進(jìn)去。狀態(tài)字段標(biāo)記為受理成功或受理失敗后續(xù)對(duì)賬時(shí)再更新為已到達(dá)或未到達(dá)。6.3 用QuerySendDetails做對(duì)賬短信的最終狀態(tài)以運(yùn)營(yíng)商回執(zhí)為準(zhǔn)QuerySendDetails接口能按手機(jī)號(hào)和發(fā)送日期查到明細(xì)。我一般做一個(gè)定時(shí)任務(wù)每小時(shí)掃描發(fā)送日志里狀態(tài)仍是已受理的記錄批量調(diào)QuerySendDetails更新終態(tài)。注意這個(gè)接口也有頻率限制按批處理、按序號(hào)排隊(duì)不要一張表全量掃一遍直接并發(fā)查詢。對(duì)賬能發(fā)現(xiàn)很多“假成功”用戶投訴沒收到時(shí)拿BizId去查往往發(fā)現(xiàn)短信被運(yùn)營(yíng)商攔截或手機(jī)號(hào)停機(jī)。我自己的習(xí)慣是所有AccessKey配置統(tǒng)一放環(huán)境變量并在啟動(dòng)時(shí)做一次顯式校驗(yàn)配不上就FailFast進(jìn)程不啟動(dòng)不讓錯(cuò)誤配置帶著跑。有一次線上驗(yàn)證碼大面積發(fā)不出去控制臺(tái)看簽名還在排查大半天結(jié)果是RAM子賬號(hào)AccessKey過(guò)期輪換后線上配置文件沒同步更新。從那以后凡是短信相關(guān)的密鑰變更我都會(huì)在變更單里強(qiáng)制加一條“啟動(dòng)自檢”步驟。這算是我在短信接口上最值得分享的一個(gè)習(xí)慣希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久大黄片| 91爱综合| 国产视频97| 亚洲本色精品一区二区久久| 欧美乱色| 两性综合网| 亚洲风情综合网| 97看操| 亚洲性爱免费电影| 九久精品| 日韩少妇在线视频| 国产AV高清AV无码| 啊啊啊啊网站| 蜜臀久久99精品久久久久电影| 岛国片国产成人亚洲播放| 色网1| 九九九九久久久| 日日夜夜精品视频| 五月开心久久AV官网| 影音先锋中文字幕日本好一区二区| 青青草玖玖爱| 干B| 色综合九九| 蜜臀中文字幕| 张柏芝国产一区在线观看| 五十路二区在线| 无码黑人精品一区二区三区三| 午夜福利国产欧美日韩夜夜| 久欲AV| 欧美色图天堂在线| 免费?级毛片无码?∨蜜芽试看| 欧美97av| 久草男人天堂| 国内黄色精品| 日韩人妻无码专区| 看免费一级在线播放毛片| 97亚洲中文| 中文熟女五十乱码在线| 97超碰碰碰| 内射小黄片| 中文字幕欧美日本乱码一线二线 | 婷婷伊人綜合中文字幕| 国产精品爱欲| 欧亚日韩一区在线| 91制服丝袜| 伊人成人中文字幕久久网| 综合欧美日韩在线观看| se..亚洲欧美| 七月婷婷综合| 欧美桃色网| 丝袜亚洲91| 媚薬在线视频麻豆| 国产精品毛片| 欧美,日韩,中文,另类| 精品无码产区一区二| 日韩欧美中文字| 爱妻综合网| 天天综合网~91入口| 天堂在线一区二区| 性九九九九九九| 国产AV超爽| 国内毛片国产专区二| 一级啊性爱在线视频| 久久久无码av精| 老女人综合| 99re这里只有精品9| 九九热精品视频六| 色噜噜狠狠色综无码久久合欧美| 久久久久久十| 亚av顶级裸体一区二区三区四区五区 | 久久久精品日本一道| 欧美久久草熟女| 日韩中文字幕视频在线观看| 十八禁视频网站| 熟女乱3伦999| 性一级黄色录像片网站导航| 中文字幕在线免费观看2| 欧美性爱一区二区| 日韩图区 偷拍| 97在线视频观看| 91老熟妇| 丁香六月天| 欧美 传媒 麻豆 日韩 偷拍| 中文字幕成人乱码熟女精品国50| 亚洲综合伊人无码久久| 午夜精品久久久久久久久久蜜桃| 色一色综合网| 裸体美女久久久| 伊人在线大香蕉视频久久| 97se亚洲综合自| 欧美中文字幕日韩在线| 99热超碰| 这里只有精品97| 日韩图区 偷拍| 91大胆欧美| 精国久久一区二区三区98| 天天干夜夜鈤| 日韩欧美中文| 亚洲视频,小说| 九九热免费国产视频婷婷伊人五月| 青青操少妇| 99超碰碰| 亚洲第一成人影院色播| 国产美女口爆吞精| 99亚洲国产精品色一区二区三区| 95人妻爽爽人人做人人澡| 色屁屁影院www国产| av日韩在线观看电影| 久久大香蕉手机高清| 97jingpin| 欧美精品一区二区少妇免费A片 | 色狠狠一区二区三区香蕉| 欧美视频一| 五月丁香六月婷| 91日日夜夜| av网页一区二区三区| 久久久99久9| 久久综合中文国产| 国产探花日韩援交| 牛牛久久国产精品视频一二三| 青草精品视频-日本久久久久网站| 涩涩涩综合| 久久精品亚洲东京热色播| 一二三四区电影| 成人一级性爱| 精品网站99999| 天天综合网日韩| 免费观看欧美日韩操逼视频| 国产免费内射视频| 东京太热久久久| 嗯嗯啊啊啊好爽| 亚洲免费人妻在| 新视频sss国产| 性爱视频免费网址| 国产最火爆久久国产网站网站 | 激情婷婷丁香网| 久久精品国产亚洲AV片多多| 亚州欧美一区| 国产 三级自拍| 亚洲交换| 懂色AV一区二区三区| 中文字幕在在线观看网站| 97精品免费视频网站| www色色com| 久久9999| 麻豆天美国美国产| 欧美亚洲国产91在线| 97超碰热线| 操一对老熟妇爽上天视频| 91小视频| 狠狠91| 婷婷五月色| 天天看片青娱乐| 91老熟女逼| 人人看人人插| 亚洲综合有码| ,国产乱人伦精品一区二区三区| 最新av网站在线观看| 午夜福利在线合集| 一二三四日本视频高清| 亚欧视频在线| 老熟妇综合| 国产精品久久99日日| 99热欧美| 欧美999999| 精品国产精品一区二区| 欧美十八禁视频| 国产精品久久久九九九| 性爱动态120秒| 欧亚无码视频| 亚洲欧美天堂在线| 可以看的av| 啪啪自拍九九综合| 麻豆 亚洲 97| 大香蕉操久久| 国产三区免费在线观看| 屁股久久久久久久久| 综合国产97| 国产精品一二三在线看| 亚洲成人激情小说视频| 亚洲狼狼干综合1| 久草婷婷| 日逼视频日本| 国产免费一区2区3区| 屁股久久久久久久久| 欧美日韩成人在线| 中文字幕狠狠玩| 韩国一级做a久久久久| 日本一久是| 久久精品人体| 极品国产内射| 欧美日韩国产色五月综合在线| 99热免费| 激情99| 国产操逼逼网| 天天综合网91| 国产粉嫩蜜臀av一区二区三区| 亚洲黄a三级三级三级看三级| 男人兔费天堂| 亚洲中文字幕精品久久久久久直播| 欧美日韩啪啪电影| 日韩av在线精品观看| 蜜桃臀一区二区aV | 亚洲第一页色网| 99re在线视频| 一牛一区二区三区久久| 青青草视频久久久久| 亚洲第一页色| www.激情| 精品区9| 超碰人人草| 91久久精品中文字幕| 久久av无码| 亚洲本色精品一区二区久久| 丰满人妻一区二区三区蜜桃视频| 欧美日韩中文字幕不卡| 91老熟女| 亚洲人体视频在线观看| 午夜.DJ高清在线观看免费7| 激情抓乳插进去啪啪啪日韩 | 天天在线91| 97碰碰日本乱偷人妻中文的| 中文字幕久久精视频久久大全| 美女人妻色网站| 91精品国产综合久久久蜜臀| 97干com| 美女黄色一级A视频| 天天干天天干天天干| 九九在线精品| 久久色激情一区二区三区| 不卡人妻少妇精品毛片一区23区视频| 激情图片伦理国产一区二区日韩| 二区熟妇韩日| 日日摸日日碰| 欧美色图校园春色| 熟妇色99| 91久久免费视频互動交流| 老熟女搡BBBB搡BBBB视频| 加勒比在线观看一区二区| 久久首页| 中文字幕 国产 精品| 手机在线看片免费人成视频| 色墦五月丁香| 91中文精品日韩欧美在线| 嗯嗯,好大,好爽,好骚| 大香蕉啪啪啪啪在线| 91n免费处女| 91美女高潮| 亚洲情色 自拍| 天天插网| 欧美,日韩,亚洲视频| 大香蕉五月天| 欧美国产有色电影| 欧洲色综合| 久久久新亚洲AV| 亚洲av综合伊人久久| 激情国产乱伦Av| 婷婷97| 国产亚卅97| 午夜精品久久久99热蜜桃的功能特点| 四方色播| 蜜乳AV网址| 精品国产乱码久久久久久影片| 97玖玖人妻| 青青草久草AV| 一区二区三区高清天码| 四虎永久在线精品免费网址| 91在线丝袜| 久久AV无码AV| 色九区| 91亚州欧美| 亚洲熟女一区二区| 亚州一区二区成人片免费| 亚洲人妻av| 亚州综合AⅤ| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 国产精品高潮久久久无码| 日韩精品第3页| 人妻熟女一区二区三区视频| 日韩性爱电影一区| 99久久综合| 99热这里只有精品18| 久久久无码av精| 天天弄欧美| 色淫网站优优视频| 成人免费福利在线观看| 亚洲黄a三级三级三级看三级| 国产精品一区二区三区免费视频| 操逼操网| 九9热伊人| 一级人妻性爱视频| 激情综合五月婷婷| 素人伊尹大香蕉免费下载视频| 国产一区在线观看无码AV| 亚洲美乱| 国产400孕妇孕交群| 日本色色色| 九九九不卡| 黄色视频特级毛片| 97这里有精品| 五月天激情网站| 日韩欧美麻豆 | 欧美综合网| 中文字幕 码 自拍 视频 区| 伊人91| 免费一级视频特黄色大片| 国产精品九九| 欧美精品日韩一区二区| 91爱剪切久久| 97人肏| 青娱乐国产剧情av一区| 91精品成人www| 亚洲在饯| 91欧洲国产成人久久精品网站| 青青草视频久久| 亚州综| 国产伦精品免编号公布| 黄色片,com| 蜜乳av一区二区三区四区不卡| 色网在线视频观看免费| 黑人精品欧美一区二区蜜桃| 丁香五月久久| 亚洲影院成人| 91视频综合在线| 日本123区操B视频| 国产日本顶级一区二区三区| 欧美日韩资源在线| 99色热国产视频精品| 超碰到97情色| 亚洲国产成人精品无码专区| 熟女精品日韩一区二区三区| 97青青操视频| 日韩av一级黄片| 亚欧美色图| 成人日韩欧美| 无码操逼视频一下| 国产伊人精品在线| 欧美中字二区| 日产狠狠干| 亚洲av噜噜噜噜噜噜| 天天天天天天天天综合| 日韩不卡av一二三| 国产精品女aA片爽爽视频| 精品亚洲俞拍视频一区| 亚洲精品成人| 一区操逼日比视频| 欧美 亚洲 在线| 乱理日韩中文| 一区二区 韩日AV| 欧美系列在线一区二区| 精品无码久久久久久久杏吧| 四虎在线观看网站| 日韩免费人妻色情网站| 风流老熟女一区二区三区l| 亚洲欧美91| 久久久久久久久九九久孕交| 日本孕妇一区二区视频操逼免费看 | 青青草久草| 99热日本| 激情小说图片亚洲首页| 后入式999| 九九九综合精品| 大色综合网| 999久久久九九九九| 伊人伊人LD| 成人综合色网| 3p国产欧美99热| 国产亚洲性生活视频播放| 日韩无码服务区| 嗯嗯,好大,好爽,好骚| 丁香五月婷婷啪啪| 五月婷婷丁香中文字幕| 亚洲春色欧美激情自拍| 好爽免费视频| 色综合91好| 中文字幕熟女人妻丝袜丝| 97视频620| 天天综合网国产| 国产精品一区二区黄片| 奇米四色影视777久久久| 熟妇综合一区二区三区| 黄资源| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | www99热| 欧美性爱十八禁| 国产精品一区二区亚洲人成毛片| 91精品人| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 日韩电影天堂视频一区二区| 人妻在线臀日韩| 天天综合91在线| 五月激情天| 亚洲激情网| 一区二区三区视频| 92福利社视频| 午夜呻吟欧美| 九久久九精品视频| 日韩精品熟妇| 狠插 制服 自拍| 中文字幕在线观看网页| 五月天色电影| 丝袜美女诱惑 91 视频| 激情五月天校园春色网| 九九九九97| 伊人在线大香蕉视频久久| 另类视频在线| 91精品国| 欧美成人免费在线观看| 午夜福利一区二区影院| 日韩欧美成人午夜福利| 精品国产丝袜一区二区三区乱码| 思思性爱| 伊人婷婷五月天| 国模限制级电影| 免费看污网站| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 亚洲一二三四区| 精品性爱| 波多野结衣先锋影音| 东京热一区二区中文字幕| 狠狠久久手机视频精品| 久久精品久久九九精品| 亚州AV无码国产精品| AV综合中文字幕干| 九九热免费在线国产视频伊人五月| 免費人妻夜夜爽天天爽爽一区| 爽爽爽免费视频| 成人片视频| 欧美美逼| 人人干人人操人人爱| 免费?级毛片无码?∨蜜芽试看| 2019天天干天天操| av优播| 欧美青青视频| 香蕉综合网| 久久透逼视频| 日日爽夜夜爽| 极品后入免费视频| 青娱乐91| 日韩精品永久在线观看| 成人精品电影| 亚洲第一男人天堂| 成人免费毛片| 欧美综合骚| 内射黑丝袜| 97超碰香蕉| 日韩色欲久久一二三四区| av中文在线| 久久夜精品一区二区三区| 性色aV一区二区三区噜噜| 国产一级高跟丝袜| 精品超碰中文在线| 超碰97导航| 91视频伊人| 欧洲色色| 超碰 欧美| 午夜乱轮操逼视频免费看| 丁香五月影院| 色噜噜人妻av中文字幕| 久干9操| 欧美一区二区日韩传媒搭讪精品| 青青草一区二区高清无码视频| 操人人| 亚欧美天堂在线| 殴美色网| 中文字幕av乱伦| 午夜综合在线| 色婷婷视频| 午夜啊啊啊| 夜夜草天天| baisiav| 人人澡人人干| 五月天婷婷小说| 欧美综合综合| 激情四射五月天| 天美传媒精品久久视频| www网站黄| 日韩亚洲97| 一起草日韩| 亚洲色图综合网| 99这里只有精品国产| 人人操天天爽| 亚洲成人性爱网站在线播放| 大香蕉啪啪啪啪在线| 9国产超碰| 大香蕉 222| 肉动漫无遮挡h在线观看| 久久久久久性爱片| www久久国产精品| 动漫片子网站3黄| 日韩操p| 国产盗摄美女如厕大神作品在线观看 | 91色图| 国产夜夜艹| 国产精品美女久久久久久网站| 91九九九馒头| 翔田千里AⅤHD无码| 影音先锋一区二区在线资源| 夜色AV无码手机在线影院| 操淫穴亚洲五月丁香| 亚洲一区二区精品福利| 99re6在线视频播放免费精品| 九九热在线精品视频| 欧美 亚洲| 干B视频伊人网| 涩综合导航| 亚洲成人妻日韩在线| 国产欧美日韩在线不卡第一页| 午夜福利 成人 91| 亚射在线| 国产又粗又长又爽又色| 蜜臀久久99精品久久久久久-DVD| 91丝袜美女国产| 久久超碰97| 99热aaa| 亚洲 欧美日韩 另类| 欧美日韩一二三| 日韩天堂av电影在线观看| 国产精品亚洲一级av第二区| 后入合集| 亚洲网自拍| 国产美女高潮叫床视频| 国产偷人伦激情在线观看| 精品一区二区三区四区外站| 清柠毛片| 亚洲高清无码在线桃色| 亚洲精品99999| 99黄页网站| 日韩精品一区二区三区四虎影视| 一区二区三区黄色片a| 97超碰公开| 亚州再线| 强奸xx国产| 国产一区二区a毛片| 91色宗合| 夜夜爽夜夜摸夜夜操免费视频| 久久久久久久久久久久久久久性生活视频| 可能人人看人人摸| 国产综合色精品在线观看| 国产精品对白自产拍| 日欧美色| 91大胆欧美| 不卡免费av在线播放| 日韩有码 一区二区三区| 91亚洲最新在线| 东北女人操比视频| 在线女人91| 激情五月天网站| 日韩一区二区三区四区五区| 嫩呦国产一区二区三区AV| 九九九九九精品视频| 人妻在线大香蕉| 色av中文字| 色玖玖| 免费啪啪啪网站18岁| 欧美偷拍区| 国产精品福利资源在线尤物| 麻豆天美一区二区| 综合色区偷拍| 亚洲中文sv| KK色在线影院| 人妻蜜桃臀| 四虎在线免费视频| 操曰本熟女| 欧美性综合| 亚州日韩97| 久草热制服丝袜在线观看| 欧美视频第二页| 麻豆影音天美视频| 人人妻人人色| 骚乳在线| 久久久久久久久久久久久久久久9| 99热精品青草在线| 丝袜性亚洲| 欧美成人亚洲精品| 欧美精品双插| 日韩精品人妻中文字有码在线| 久久綜合很很很| 97 九色| 欧日韩在线观看| 东北操逼| 天天干人妻视频| aV中文麻| 91美女网站| 国产无码精品成人| 又大又长又粗又爽又黄| 日本激情免费大片| 九九99精品| 九九碰九九爱97超碰| 91xingse| 伦在线97| 久久精品操| 少妇色| 亚洲激情综合另类男同| 亚洲欧美日韩精品久| 欧美精品99久久久| 中文字幕加勒比海高清无码免费视频| 久草毛片电影怡| 成人一级二级| 殴美性天天| A一区片| 粉嫩不卡一区二区性爱| 一区二区日韩欧美久久| 久插综合| 97超碰影音| 亚洲色图欧美色图另类图片| 成年人三级黄色片视频| 亚洲成av人片色午夜乱码| 一区二区三区黄色片a| 人人干人人搞人人摸| 97在线视频观看| 欧美日韩精品国产91| 欧美天堂亚洲电影院一区在线播放| 天天综合网亚洲综合网| 97综合在线| 婷婷丁香九月| 五月丁香激情综合网| 91九九九馒头| 97av,com| 好色综合| 日韩人妻中文视频| 天天透伊人| 欧美人人天天网| 亚洲资源站| 屁股久久久久久久久久| 日本成人A片网站| 毛片电影一区二区三区| 亚洲aw毛茸茸在线| 97在线公开视频| 三级日韩一区二区三区| 亚洲成av人片色午夜乱码| 日韩影片中文字幕一区二区三区| 超碰97在线中文| 91黑人狂躁丰满熟妇| 欧美一区二区三区蜜桃| 人妻精品综合中文字幕在线 | 超碰 另类 欧美| 国产蜜臀在线| 国产精品高清2021在线| 丁香五月天激情综合| 91天天综合日韩欧美| 精品蜜乳AV免费观看| 超碰99在线观看| 熟女AV一区| 91 丝袜在线播放| 欧美性生活综合| 中亚黄色三级大片 | 亚码激情| 色色97爱| 人人射人人操人人摸| 91精品丝袜久久久久久无码人妻| 国产久久久久久| 日韩乱伦视频| 超碰98综合网| 影音先锋少妇| 操人妻逼91| 天天上日日上日韩精品| 伊人影院中文字幕| 91久热| 国产伦精品一区二区三区视频女| 国产精选视频| 亚洲激情AV| 亚洲熟妇A V黑人| 日日狠狠久久偷偷色综合免费| 骚货操死你| 天天日夜夜爽| 九九热AV| 亚州乱码中文字幕综合久久久| 日韩av性爱在线播放| 国产suv精品一区二区四区999 | 欧洲射精91| 日韩性爱免费观看视频| 躁躁日曰躁2020| 国产AV色黄看到爽| 色偷偷超碰亚洲| 日韩丝袜二区| 97超碰色情| 精品视频日日夜夜| 十八禁视频一区二区| 大香网伊人久久综合网eew| 久久久久久日韩| 狠狠干2020| 日日夜夜狠狠| 18禁看网站一区| 偷拍超碰| 大色综合网| 精品免费囯产一区二区三区| http://qxhbdz.com| 综合伊人激情| 色臀aV| 久久ww| 欧美一级黄色免费专区| 欧美亚洲高清不卡| 婷婷精品久久av影视| 国产精品一二三免费网站| 国产 日韩 欧美一区| 新精精品久久精品| 亚洲激情AV| 亚洲欧美色图小说| 欧美性爱一区二区三区四区| 久久婷婷五月| 亚洲激情综合另类男同| 亚洲天堂久久| 青苹果影院男人的天堂| 97摸视频| 四虎国产精品永久在线囯在线 | 伊人操操| 欧美日韩性爱视屏免费看了| 欧美国产精品久久九九| 少妇内射视频| 五月天色图| 五月婷婷爱六月丁香色| 人人干黄色| 久久这里只| 色偷偷男人的天堂麻豆| 日韩欧美麻豆大片| 综合欧美日本三级| 人妻一区二区三区视频| 久久欧美激情| 亚洲偷91色| 久久伊人在线五区| 91狠狠色丁香婷婷综合久久精品| 岛国色情视频在线观看| 国产精品午夜AV完会免费| julia ann久久| 青青青操| 亚洲天堂,男人| 怡红院一区二区熟女人妻| 国产v片在线免费观看| 九九九九九精品视频| 天天操天天7| 18岁禁 茉莉成人久久| 中文字幕二区日韩天堂| 男女一级A片大黄,一进一出| 国产操操日韩三级黄| 国产兽交视频在线播放| 97干97色| 黄页av| 久热这里只有精品9| 日日干夜夜骑| 国产乱码久久久久久| 夜夜国产一区| 美国久久一二三四| 精产国品一区二三产品| 日韩精品人妻系列无码天堂| 九九热精品在线| 欧美激情综合| h在线看免费版在线看| 亚洲男人天堂2019| 男人天堂一区二区| 亚洲午夜免费狠狠干| 婷婷久久五月天| 超碰人妻在线| 东京热免费视频| 久久综合婷婷| 精品国产一区二区三区av在线资源| 9999免费精彩视频| 日韩成人网址| 欧美色三级片91| 久久久久无码| 中文字幕乱碼在线| 97超碰天天爱天天爱| 欧洲乱码一区二区| 97日视频| 九九九九九九视频| 黄色一区三区| 青青草在线视频播放器| 欧洲综合色| 久9爱经典视频| 亚洲综合伊人无码久久| 亚欧美色| 人人性爱视频免费| 亚洲精品性爱片| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 嫩草黄页| 久热这里只有精品9| 亚洲色图欧美激情| 免费看片黄| 乱伦av.com| 91超级碰碰| JULIA人妻风俗店中出电影| 性感女人网页在线观看视频| 亚洲国产精品久久久久婷婷青年| 欧美高潮在线| 久久久久婷婷精品av电影| 农村少妇久久久久久久| 97亚洲精品| 日韩在线性爱免费视频| 桃花色涩综合影院| 人妻天天爽夜夜爽爽| 91天天爱| 精品天堂| 人妻81p| 人人摸人人摸人人干| caopeng97| 丝袜色综合| 91久久| 啪啪资源网| 五月天综合网| 精品人妻一区二区三区夜夜| 97资源站国产精品| 92性色国产午夜福利在线661| 免费作爱一级视频| 91人妻视频在线| 91国产美女丝袜足交精品视频| 天天综合网~91| 蜜桃视频成a人v在线| 69精品少妇一区二区三区蜜桃| a人欧美综合天堂麻豆| 青青久草| 久久社区一区二区三区| 天天综合,91综合永久| 欧美综合网1| 男人天堂电影院| 蜜桃无码AV一区二区| 人人操天天爽| 中文字幕av一区二区三区人妻少妇| 啪啪啪精品| 综合影院亚洲| 久久东京热成人| 国产中文精品一区二区在线观看| 91亚洲黑人| 久久久999国产精品| 在线色导航| 91N五十路| 天堂综合网| av天堂5| 91性| 国产精品探花视频| 伊人操操| 伊人网青青| 亚洲五月天激情| 欧美色交| 天天干人妇| 97精品97久久| 日本日逼高清| 日本久久综合| 性爱视频无打码在线观看| 精品熟女一区=区三区| 一区二区视频在看| 色色五月天婷婷| 久久久久9999精品九九九| 久久久精品中文字幕爱豆| 日韩在线人妻网站| 一起草三级AV电影在线观看 | 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 国产精品激情久久久久久久| 日韩啪啪啪视频| 国内偷自视频区视频综合| 蜜桃臀 后入 一区 二区 三区 在线| 欧洲精品二区| 天天综合网~69| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 国产精品无套内谢| 日韩综合97P| 国产精品日韩在线一区| 999九九精品| 中文字幕精品区先锋资源| 色悠久久久av| 日本操BAV| 综合网少妇| 综合色久| 蜜臀久久99精品久久久久久无删减| 资源在线观一 二| 七月丁香婷婷| 亚洲蜜臀懂色| 黄色操人| 欧美成人精品欧美一级乱黄一区二…| 欧美96在线|欧| 亚洲美乱| 国产精品视频播放| 乱伦熟女论坛| 久久国产视频专区一二三| 超碰色97| 日韩pv中文| 香蕉欧美| 色眯眯av| 五月天色综合| 尤物网站91| 精品一久久久| A片 AV一级在线播放观看免费| 精品999一区二区| 高清不卡一二三区视频......| 久久久久久99AV无码免费网站| 亚洲欧美国产中文字幕| 69精品久久久久中文字幕| 99夜夜操| 亚欧中文字幕在线视频| 亚洲导航深夜福利| 9久久久久久| 97高清啪啪| 乱伦图av| 加勒比海人人操超碰在线| 91女网站| 欧美日韩性爱操大逼| 色妇综合网| 一本大道综合伊人精品热热| 国产欧美一区激情交| 人妻少妇久久中文字幕一区二区 麻豆 | 自拍欧美| www.久久久久| 超清福利精品视频在线| 麻豆国产第一| 爆操无码| 国产无吗在线播放| 91超碰在线观看| AV一二区| 色五月综合| 亚洲?V高清一区二区三区尤物| AV天黑人| 欧美97在线观看| 色婷婷电影网| 精品人妻av在线播放| 96精品久久久久久久久久| 亚洲AV无码乱码| 亚洲情色综合网| 黑人中出21连凳花野真衣| 综合激情五月天| 波多野结衣之双飞调教在线播放| 91中文字幕制服丝袜免费视频| 久日91在线| 日本美女性生活久久久久久久| 亚洲砖码砖专无区2023| 国语对白露脸XXXXXX| 97亚洲色图| 欧美九一精品久久久熟妇| 国产传媒日本欧美专区| 欧美拳交在线播放| 日韩性爱毛片操骚逼| 中文字幕日韩电影人妻| 国产一国产一级毛片古装| 91美女视频。| 九九九九九九免费视频| 福利天堂| 美女91在线观看| 久久9 9 9精品| 久久久久久午夜男人的天堂| 伊人久久综合精品欧美| 成人亚欧免费视频| 小日子操bb在线看| 日韩偷拍一区二区三区| 亚洲伊人成综合成人网| 91丝袜在线播放| 日韩欧美蜜桃精品久久中文字幕久久 | 人妻熟女av国产网站| 强奸乱伦亚洲第一页| 久久久久久久伊人精品| 欧美天天搞| 91操操操操| 国产成年女黄特黄| 丁香婷婷五月| 久久精品一区二区一8| 欧美在线播放| 国产女同在线观看视频| 91精品国产91久久青草| 精…码一二三区| 伊人天天久久动态图| 国产精品久久久| 被操高清无码视频| 成人26uuu| 国产强奸乱伦xd| 老司机天天操| 欧美日韩一区二区三区四区蜜桃| 韩国成人精品久久久免费看| 色色网91| 性爱av网站| 超碰av人人人| 九九热免费国产视频婷婷伊人五月 | 免费观看的av| 久久久爆乳翘臀一线天伦理视频| 六九九九| 精爱久久| 超碰午夜| 96麻豆精品一区二区三区| 久久免费少妇| 日韩免费高清大片在线| 国产精品干干干| 久操不卡视频| 亚洲人精品久久久喷水| 久久、1234| 91热色| 久操97| 自拍视频一区在线观看| WWW黄片COM| 国产一区二区三区中文字幕| 青娱乐大香蕉| 夜夜嗨一区| 欧洲在线性爱视频| 久久综合资源一区二区| 久久九色| 国产不卡片| 婷婷久草| 色淫网站优优视频| 欧美十八禁视频| 在线v中文字幕一区二区三区| 人妻少妇久久久| 97久久免费| 久久久久网站-538在线视频-欧美永久乱码 | 亚洲天堂2020| 久久东京伊人一本到鬼色| 婷婷亚洲综合| 99热aaa| 91制服丝袜| 收看日本人日bb| 亚洲五月天激情| 少妇无码太爽| 亚洲精品电影| 日本狂喷奶水在线播放212| 九热视频| 青青三级视频| 日韩av无码网站| 97任你吞精| 五十路熟女工口 | 九九九九AV| 99久久婷婷丁香| 内射日韩大臀美女| 91美女视频直播| 97在线观看播放视频| 久久久久久久一级黄色打同平台| 人人搡人人肉久久精品| 久久精品熟妇丰满人妻99| 久久国内| 伊人玖玖网| 91丝袜在线观看| 玖玖婷婷五月天| 超碰午夜| 天天看天天干| 亚洲一二三精品久久网| 青草精品视频一日本久久久久网站| 亚洲精品国产熟女| 久九干| 亚洲欧美另类小说| 亚洲操人| 亚洲激情深爱文学小说网站| 亚洲一卡2卡3卡4卡乱码网站| 久艹伊人精品综合在线| 97综合在线| 国产 日韩 欧美 人妻 熟女 中文| 校园春色综合香蕉| 亚洲阿v天堂无码z2018| 欧美性区| 少妇激情一区二区三区视频| 91丨九色丨大屁股| 色欧美色交综合| 欧美激情中文字幕另类小说| 蜜桃精品视频一区| 精品国产91av一区二区三区| 超碰99热中文字幕| 搡老女人911熟妇老熟女| 一区二区日韩欧美久久| 中韩中文字幕在线观看| av天堂手机版追回| 日本97久久| 国产激情在线观看| 不卡六六在线91| 色综合久| chaopen97久久| 欧美一区二区三区日韩| 色九九九九九九| 久热大香蕉| 欧美激情内射| 欧美黄页在线| 91精品91久久久久77777俄罗斯老妇姓x| 伊人AAA| 夜夜嗨视频| 男人的天堂激情| 成人97人人超碰人人| 久久久久久中文版| 日本成人免费一区二区三区| 色www精品视频在线观看| 美女国产一区二区久久| 五月天人妻综合| 激情婷婷| 日产操逼| 人人噜夜夜操| 九月婷婷| 男人天堂电影院| 91美女在线看| 黄片免费久久久久久久| 91久热| 亚洲日本韩国在线| 无码国产精品96久久久久孕妇| 青苹果影院男人的天堂| 熟女乱伦A| 欧美美逼| 国产精品久久发布| 波多野结衣先锋影音| 日本最新1区2区3区| 日韩成人网址| 翔田千里AV无码秘 三区| 啊嗯好大视频在线观看| 日本不卡高清视频| ...日韩成人一区二区三区字幕| 婷婷五月色| 欧美一区二区一级岛国大片| 九九热午夜欧亚国产视频| 天天干一干| 亚洲一区二区三区播放在线| 97精品一区二区三区免费| 日韩超碰精品综合| 99久久99九九99九九九| 欧美欧美啪啪视频| 青草伊人久久| 97欧美精品综合| 久久婷婷综合国际产色怕| av天堂加勒比| 闷骚老熟女15P| 国产动漫操逼视频| 99精品国产户外露出| 色香综合天天影视综合 | 久久综合乱子伦国产免费| 小情侣高清国产在线视频| 国产成人亚洲精品无| 俺也射| 国产美女精品| 91色艳| 九九这里只有精品| 99re国产精品视频| 中文字幕99999| 青青草国产一区二区三区| 人妻在线臀日韩| 亚洲四虎熟女精品| 欧美日韩另类在线| 香蕉99秘 一区精品蜜桃臀| 超碰久久网| 九九热超碰97亚洲最新香蕉 | 大干人妻| 欧美成人综合| 无码heyzo高清一区| 亚洲一区二区三区四区视频| 欧美精品99久久久**| V A在线| 日韩有码专区| 久久久久久中文| 狠狠搞 亚洲91| 后入内射蜜桃臀| 人妻少妇精品一区二区三区| 免费中文在线| 秋霞无码av鲁丝片一区| 久久内射| 久久久久久九九九| 婷婷8月天青娱乐| 热热色国产一二区AV| 色 亚洲 91| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 精品三级在线专区| 欧美 亚洲精品首页| 99热大香蕉伊在线| 欧美91网站| 啊啊啊好舒服视频在线观看| 亚洲丝袜色图| 五月天婷婷激情| 久jiu久神马影院| 久都青青视频| 97久精品| 天天色悠悠激情| 亚洲色图加勒比| 91天堂视频| 黄色乱论网站|