免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

企業(yè)微信臨時(shí)素材上傳:從踩坑到優(yōu)雅實(shí)現(xiàn)

企業(yè)微信臨時(shí)素材上傳:從踩坑到優(yōu)雅實(shí)現(xiàn) 1. 臨時(shí)素材上傳到底難在哪企業(yè)微信的臨時(shí)素材上傳看起來只是調(diào)一個(gè)接口的事但真到業(yè)務(wù)里跑起來坑比想象中多。我前后在三個(gè)項(xiàng)目里踩過這個(gè)環(huán)節(jié)從最開始用最樸素的方式硬懟到后來逐步抽象出一套相對(duì)優(yōu)雅的方案中間交了不少學(xué)費(fèi)。這篇文章就把這些經(jīng)驗(yàn)完整拆開講一遍適合正在對(duì)接企業(yè)微信素材能力、或者已經(jīng)對(duì)接但被各種邊界情況折騰過的開發(fā)者參考。先把概念理清楚。企業(yè)微信的臨時(shí)素材指的是上傳后只在服務(wù)端保留三天的媒體文件包括圖片、語音、視頻和普通文件。它和永久素材最大的區(qū)別就是生命周期短但勝在上傳接口簡單、不需要額外的素材管理邏輯。典型使用場(chǎng)景是客服系統(tǒng)里發(fā)送一張工單截圖、審批流里附帶一個(gè)PDF附件、機(jī)器人推送一段語音通知。這些場(chǎng)景的共同特點(diǎn)是文件用完即棄不需要長期存儲(chǔ)臨時(shí)素材剛好匹配。那難點(diǎn)在哪我總結(jié)下來主要是四塊第一上傳接口用的是multipart/form-data和普通JSON請(qǐng)求的封裝方式完全不同很多HTTP工具類默認(rèn)不支持或者支持得別扭第二media_id這個(gè)返回值有有效期業(yè)務(wù)側(cè)如果緩存了它過期后發(fā)送會(huì)直接失敗第三文件類型和大小有硬性限制圖片不能超過10MB、語音不能超過2MB且只支持AMR和MP3、視頻不能超過10MB超了接口直接報(bào)錯(cuò)第四并發(fā)上傳時(shí)如果多個(gè)請(qǐng)求同時(shí)拿同一個(gè)文件流會(huì)出現(xiàn)流被消費(fèi)完導(dǎo)致后續(xù)請(qǐng)求拿到空內(nèi)容的問題。這四點(diǎn)里前兩點(diǎn)是認(rèn)知問題后兩點(diǎn)是實(shí)打?qū)嵉募夹g(shù)坑。我見過不少項(xiàng)目在這塊的處理方式是寫一個(gè)工具方法每次要發(fā)文件就現(xiàn)讀現(xiàn)傳傳完拿到media_id立刻用掉。這種方式在低頻場(chǎng)景下沒問題但一旦量上來比如一天幾千次上傳就會(huì)暴露出重復(fù)上傳、流管理混亂、錯(cuò)誤處理缺失等一系列問題。所以“優(yōu)雅”這個(gè)詞在這里不是錦上添花而是有明確的工程價(jià)值——它意味著可復(fù)用、可觀測(cè)、可容錯(cuò)。下面我會(huì)從整體設(shè)計(jì)思路開始一步步拆到具體實(shí)現(xiàn)把每個(gè)決策背后的理由講清楚。你如果只是想快速抄個(gè)能跑的代碼可以直接跳到第三節(jié)但如果你想搞清楚為什么這么設(shè)計(jì)建議從頭看。2. 整體方案設(shè)計(jì)與選型考量2.1 為什么不用現(xiàn)成的SDK企業(yè)微信官方提供了多語言SDKJava、Python、PHP都有。我最初也想過直接用SDK省事但實(shí)際用下來發(fā)現(xiàn)兩個(gè)問題。一是SDK往往把a(bǔ)ccess_token的管理和素材上傳耦合在一起而access_token本身需要全局緩存和刷新如果每個(gè)上傳請(qǐng)求都去觸發(fā)一次token獲取在高并發(fā)下會(huì)頻繁打企業(yè)微信的接口觸發(fā)頻率限制。二是SDK的封裝層次比較深出問題的時(shí)候排查鏈路長比如上傳失敗你很難快速判斷是token問題、網(wǎng)絡(luò)問題還是文件本身的問題。所以我的選擇是access_token自己管上傳邏輯自己寫只依賴一個(gè)通用的HTTP客戶端。這樣每一層都是透明的出問題能快速定位。當(dāng)然這不是說SDK不好如果你的項(xiàng)目規(guī)模小、上傳頻率低用SDK完全沒問題。但如果你追求可控性和可觀測(cè)性自己封裝是更穩(wěn)的路。2.2 核心設(shè)計(jì)原則整個(gè)方案我定了三條原則。第一條是流的一次性消費(fèi)文件流從磁盤或網(wǎng)絡(luò)讀進(jìn)來之后只允許被消費(fèi)一次避免重復(fù)讀取導(dǎo)致的性能損耗和狀態(tài)混亂。第二條是media_id不跨請(qǐng)求緩存每次上傳拿到media_id后立即返回給調(diào)用方由調(diào)用方在本次業(yè)務(wù)邏輯內(nèi)用完即棄不做全局緩存。第三條是錯(cuò)誤分層把網(wǎng)絡(luò)錯(cuò)誤、接口錯(cuò)誤、文件校驗(yàn)錯(cuò)誤分開處理每類錯(cuò)誤有不同的重試策略和日志級(jí)別。這三條原則看起來簡單但落地的時(shí)候需要一些設(shè)計(jì)上的取舍。比如第一條如果調(diào)用方傳進(jìn)來的是一個(gè)InputStream那上傳完之后這個(gè)流就關(guān)了調(diào)用方不能再讀。所以我在接口設(shè)計(jì)上要求調(diào)用方傳文件路徑或者字節(jié)數(shù)組而不是流。字節(jié)數(shù)組適合小文件文件路徑適合大文件這樣內(nèi)部可以自己控制流的生命周期。2.3 模塊劃分整個(gè)上傳能力我拆成了四個(gè)模塊。TokenManager負(fù)責(zé)access_token的獲取、緩存和刷新用雙檢鎖加過期時(shí)間控制保證多線程下只有一個(gè)線程去刷新。MediaValidator負(fù)責(zé)文件校驗(yàn)包括類型、大小、擴(kuò)展名校驗(yàn)不通過直接拋業(yè)務(wù)異常不走網(wǎng)絡(luò)請(qǐng)求。MediaUploader是核心上傳邏輯負(fù)責(zé)組裝multipart請(qǐng)求、發(fā)送、解析響應(yīng)。UploadResult是統(tǒng)一的返回結(jié)構(gòu)包含media_id、類型、創(chuàng)建時(shí)間以及一個(gè)isSuccess的標(biāo)志。這四個(gè)模塊之間是單向依賴Uploader依賴Validator和TokenManagerValidator和TokenManager互不依賴。這樣的好處是每個(gè)模塊可以單獨(dú)測(cè)試比如Validator的測(cè)試不需要mock網(wǎng)絡(luò)TokenManager的測(cè)試不需要真實(shí)文件。2.4 關(guān)于multipart的選型multipart/form-data的組裝我試過三種方式。第一種是手寫boundary拼接字節(jié)流靈活但容易出錯(cuò)尤其是boundary和內(nèi)容里出現(xiàn)沖突的時(shí)候。第二種是用Apache HttpClient的MultipartEntityBuilder封裝好、穩(wěn)定但引入了一個(gè)比較重的依賴。第三種是用OkHttp的MultipartBody輕量、API清晰我最終選了這個(gè)。選OkHttp的理由是它的MultipartBody.Builder用起來很直觀addFormDataPart可以同時(shí)指定name、filename和RequestBody而且RequestBody可以基于文件或字節(jié)數(shù)組創(chuàng)建天然支持流式上傳。另外OkHttp的連接池和超時(shí)控制也比較成熟不需要自己再造輪子。如果你用的是Java生態(tài)里的其他HTTP客戶端思路是一樣的關(guān)鍵是找到支持流式multipart的API。3. 核心細(xì)節(jié)與實(shí)操要點(diǎn)拆解3.1 access_token的管理策略access_token是企業(yè)微信所有接口的通行證有效期7200秒也就是兩小時(shí)。它的獲取接口有頻率限制而且新獲取的token會(huì)讓舊的失效。這意味著你不能每個(gè)請(qǐng)求都去獲取也不能緩存太久導(dǎo)致過期。我的做法是用一個(gè)帶過期時(shí)間的緩存key是應(yīng)用的corpId和secret的組合value是token和過期時(shí)間戳。獲取token的時(shí)候先查緩存如果存在且距離過期還有300秒以上直接用否則加鎖去刷新。加鎖用雙檢鎖避免多個(gè)線程同時(shí)刷新。刷新成功后更新緩存失敗則拋異常讓上層決定是否重試。這里有個(gè)細(xì)節(jié)過期時(shí)間不要設(shè)成7200秒整要留出網(wǎng)絡(luò)延遲和時(shí)鐘偏差的余量。我一般設(shè)成6900秒也就是提前300秒過期。另外如果企業(yè)微信返回的token過期時(shí)間字段和預(yù)期不一致以返回的為準(zhǔn)不要硬編碼。注意access_token的緩存不要用本地Map簡單存多實(shí)例部署的時(shí)候每個(gè)實(shí)例都會(huì)各自刷新導(dǎo)致token頻繁失效。生產(chǎn)環(huán)境建議用Redis之類的集中式緩存或者至少保證同一時(shí)間只有一個(gè)實(shí)例在刷新。3.2 文件校驗(yàn)的邊界條件文件校驗(yàn)看起來簡單但邊界條件不少。企業(yè)微信對(duì)臨時(shí)素材的限制是這樣的圖片支持JPG、PNG、GIF、BMP、JPEG大小不超過10MB語音支持AMR、MP3大小不超過2MB播放長度不超過60秒視頻支持MP4大小不超過10MB普通文件大小不超過20MB。校驗(yàn)的時(shí)候要注意幾點(diǎn)。第一擴(kuò)展名和實(shí)際內(nèi)容可能不一致比如一個(gè)exe文件改名為jpg光看擴(kuò)展名是攔不住的。如果業(yè)務(wù)安全要求高需要讀文件頭做魔數(shù)校驗(yàn)。第二大小校驗(yàn)要在讀取文件之前做用File.length()獲取避免把大文件讀進(jìn)內(nèi)存才發(fā)現(xiàn)超限。第三語音的時(shí)長校驗(yàn)比較麻煩需要解析音頻文件頭如果業(yè)務(wù)不強(qiáng)制可以只校驗(yàn)大小和格式時(shí)長交給企業(yè)微信接口去判斷。我一般把校驗(yàn)規(guī)則做成配置用枚舉定義每種類型的允許擴(kuò)展名和大小上限這樣新增類型的時(shí)候只改配置不改代碼。校驗(yàn)失敗的時(shí)候拋出帶明確錯(cuò)誤碼的異常比如FILE_TOO_LARGE、UNSUPPORTED_TYPE方便上層做不同的提示。3.3 multipart請(qǐng)求的組裝細(xì)節(jié)組裝multipart請(qǐng)求的時(shí)候有幾個(gè)細(xì)節(jié)容易忽略。第一boundary的生成要用隨機(jī)字符串不要用固定值避免和文件內(nèi)容沖突。OkHttp會(huì)自動(dòng)生成不用自己管。第二Content-Type要設(shè)成multipart/form-data并且?guī)蟗oundary參數(shù)這個(gè)OkHttp的MultipartBody會(huì)自動(dòng)處理。第三每個(gè)part的name要和接口文檔一致企業(yè)微信上傳接口的字段名是media類型是filefilename要帶上原始文件名和擴(kuò)展名。代碼大概長這樣RequestBody fileBody RequestBody.create(file, MediaType.parse(application/octet-stream)); MultipartBody body new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart(media, file.getName(), fileBody) .build(); Request request new Request.Builder() .url(uploadUrl ?access_token token type type) .post(body) .build();這里type參數(shù)是素材類型取值是image、voice、video、file。注意type要放在URL的query參數(shù)里不是放在body里這是企業(yè)微信接口的設(shè)計(jì)。3.4 響應(yīng)解析與錯(cuò)誤處理企業(yè)微信上傳接口的響應(yīng)是JSON成功的時(shí)候返回media_id、type、created_at。失敗的時(shí)候返回errcode和errmsg。解析的時(shí)候要先判斷HTTP狀態(tài)碼再判斷errcode。有些錯(cuò)誤是HTTP 200但errcode非0比如40001表示token無效40004表示媒體文件類型不合法40005表示文件大小超限。我的處理方式是HTTP非200直接拋網(wǎng)絡(luò)異常HTTP 200但errcode非0則根據(jù)errcode映射成業(yè)務(wù)異常。40001這種token失效的錯(cuò)誤觸發(fā)一次token刷新后重試一次其他錯(cuò)誤直接拋給上層不重試。重試只做一次避免無限循環(huán)。提示errcode的映射表建議做成常量類不要散落在代碼里。企業(yè)微信的錯(cuò)誤碼有幾百個(gè)常用的就那幾十個(gè)維護(hù)一份自己的映射表比每次查文檔快得多。3.5 并發(fā)場(chǎng)景下的流管理并發(fā)上傳同一個(gè)文件的時(shí)候如果多個(gè)線程共享一個(gè)InputStream會(huì)出現(xiàn)流被消費(fèi)完的問題。我的做法是接口只接受File或byte[]不接受InputStream。如果是File每個(gè)線程自己打開一個(gè)新的FileInputStream如果是byte[]每個(gè)線程自己創(chuàng)建一個(gè)新的ByteArrayInputStream。這樣每個(gè)上傳請(qǐng)求都有獨(dú)立的流互不干擾。如果是大文件用File的方式更省內(nèi)存因?yàn)镺kHttp會(huì)流式讀取文件不會(huì)一次性加載到內(nèi)存。如果是小文件用byte[]更方便因?yàn)榭梢詮?fù)用不需要反復(fù)讀磁盤。我一般設(shè)一個(gè)閾值比如1MB以下的用byte[]以上的用File。4. 完整實(shí)操流程與關(guān)鍵環(huán)節(jié)4.1 環(huán)境準(zhǔn)備與依賴引入先說一下環(huán)境。我用的是Java 8加OkHttp 4.x構(gòu)建工具是Maven。依賴只需要兩個(gè)OkHttp和Jackson前者做HTTP請(qǐng)求后者解析JSON。如果你用的是Gradle換成對(duì)應(yīng)的坐標(biāo)就行。dependency groupIdcom.squareup.okhttp3/groupId artifactIdokhttp/artifactId version4.9.3/version /dependency dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version2.13.0/version /dependencyOkHttp 4.x需要Kotlin標(biāo)準(zhǔn)庫Maven會(huì)自動(dòng)帶上不用手動(dòng)加。如果你用的是Java 11以上也可以考慮用Java自帶的HttpClient但multipart的支持不如OkHttp方便需要自己拼boundary。4.2 TokenManager的實(shí)現(xiàn)TokenManager的核心是一個(gè)帶過期時(shí)間的緩存和一個(gè)刷新鎖。我用ConcurrentHashMap存tokenkey是corpId加secretvalue是一個(gè)包含token和過期時(shí)間的對(duì)象。獲取token的方法先查緩存判斷是否過期過期則加鎖刷新。public String getToken(String corpId, String secret) { String key corpId : secret; TokenCache cache tokenMap.get(key); if (cache ! null !cache.isExpired()) { return cache.getToken(); } synchronized (this) { cache tokenMap.get(key); if (cache ! null !cache.isExpired()) { return cache.getToken(); } String token fetchTokenFromApi(corpId, secret); tokenMap.put(key, new TokenCache(token, System.currentTimeMillis() 6900 * 1000)); return token; } }fetchTokenFromApi就是調(diào)企業(yè)微信的gettoken接口解析返回的access_token和expires_in。注意expires_in是秒要轉(zhuǎn)成毫秒。如果接口返回errcode非0拋異常。注意synchronized鎖的是this如果TokenManager是單例沒問題如果是多例鎖不住。生產(chǎn)環(huán)境建議用分布式鎖或者保證TokenManager是單例。4.3 MediaValidator的實(shí)現(xiàn)Validator的職責(zé)是校驗(yàn)文件是否符合企業(yè)微信的要求。我用一個(gè)枚舉定義每種類型的規(guī)則public enum MediaType { IMAGE(image, Arrays.asList(jpg, jpeg, png, gif, bmp), 10 * 1024 * 1024), VOICE(voice, Arrays.asList(amr, mp3), 2 * 1024 * 1024), VIDEO(video, Arrays.asList(mp4), 10 * 1024 * 1024), FILE(file, Collections.emptyList(), 20 * 1024 * 1024); private final String type; private final ListString allowedExtensions; private final long maxSize; // 構(gòu)造方法和getter省略 }校驗(yàn)方法接收File和MediaType先判斷文件是否存在再判斷大小再判斷擴(kuò)展名。FILE類型不限制擴(kuò)展名只限制大小。校驗(yàn)不通過拋MediaValidationException帶上錯(cuò)誤碼。4.4 MediaUploader的核心邏輯Uploader是核心流程是校驗(yàn)文件、獲取token、組裝multipart、發(fā)送請(qǐng)求、解析響應(yīng)、返回結(jié)果。我把它寫成一個(gè)方法接收File、MediaType、corpId、secret返回UploadResult。public UploadResult upload(File file, MediaType type, String corpId, String secret) { validator.validate(file, type); String token tokenManager.getToken(corpId, secret); String url UPLOAD_URL ?access_token token type type.getType(); RequestBody fileBody RequestBody.create(file, MediaType.parse(application/octet-stream)); MultipartBody body new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart(media, file.getName(), fileBody) .build(); Request request new Request.Builder().url(url).post(body).build(); try (Response response client.newCall(request).execute()) { String responseBody response.body().string(); return parseResponse(responseBody, type); } catch (IOException e) { throw new MediaUploadException(NETWORK_ERROR, e); } }parseResponse解析JSON如果errcode是0返回成功的UploadResult如果是40001刷新token后重試一次其他錯(cuò)誤拋異常。4.5 重試機(jī)制的實(shí)現(xiàn)重試只針對(duì)token失效和網(wǎng)絡(luò)超時(shí)兩種情況。token失效的重試邏輯是捕獲到40001錯(cuò)誤后強(qiáng)制刷新token重新組裝請(qǐng)求再發(fā)一次。網(wǎng)絡(luò)超時(shí)的重試是捕獲IOException后判斷是否是超時(shí)是則重試一次不是則直接拋。重試次數(shù)我設(shè)成1次也就是最多發(fā)兩次請(qǐng)求。為什么不設(shè)更多因?yàn)槠髽I(yè)微信的接口本身有頻率限制重試太多會(huì)觸發(fā)限流反而更慢。而且如果是文件本身的問題重試多少次都沒用。private UploadResult uploadWithRetry(File file, MediaType type, String corpId, String secret, int retryCount) { try { return doUpload(file, type, corpId, secret); } catch (TokenExpiredException e) { if (retryCount 0) { tokenManager.refresh(corpId, secret); return uploadWithRetry(file, type, corpId, secret, retryCount - 1); } throw e; } catch (IOException e) { if (retryCount 0 isTimeout(e)) { return uploadWithRetry(file, type, corpId, secret, retryCount - 1); } throw new MediaUploadException(NETWORK_ERROR, e); } }4.6 調(diào)用示例與結(jié)果處理調(diào)用的時(shí)候業(yè)務(wù)代碼只需要三行MediaUploader uploader new MediaUploader(); UploadResult result uploader.upload(new File(/path/to/image.jpg), MediaType.IMAGE, corpId, secret); String mediaId result.getMediaId();拿到mediaId后立即在本次業(yè)務(wù)邏輯里用掉比如調(diào)發(fā)送消息接口。不要存到數(shù)據(jù)庫或者緩存里因?yàn)槿旌缶褪Я?。如果業(yè)務(wù)需要長期保存應(yīng)該把文件存到自己的對(duì)象存儲(chǔ)需要發(fā)送的時(shí)候再上傳一次。提示media_id的有效期是三天但實(shí)際使用中建議按兩天半來規(guī)劃留出余量。如果業(yè)務(wù)邏輯比較復(fù)雜從上傳到發(fā)送之間可能間隔很久那就要考慮重新上傳。5. 常見問題與排查技巧實(shí)錄5.1 上傳失敗排查速查表錯(cuò)誤現(xiàn)象可能原因排查方法解決方案返回40001token無效或過期檢查token緩存是否過期是否被其他實(shí)例刷新覆蓋刷新token后重試檢查緩存策略返回40004文件類型不合法檢查擴(kuò)展名和實(shí)際類型是否匹配修正文件類型或做魔數(shù)校驗(yàn)返回40005文件大小超限檢查文件實(shí)際大小壓縮文件或分片上傳返回41001缺少access_token參數(shù)檢查URL拼接確認(rèn)token不為空連接超時(shí)網(wǎng)絡(luò)問題或企業(yè)微信側(cè)限流檢查網(wǎng)絡(luò)連通性查看是否觸發(fā)頻率限制增加超時(shí)時(shí)間降低并發(fā)流被關(guān)閉多線程共享InputStream檢查是否傳入了共享流改用File或byte[]中文文件名亂碼編碼問題檢查filename的編碼用URLEncoder編碼文件名5.2 我踩過的三個(gè)坑第一個(gè)坑是token緩存用了本地Map結(jié)果多實(shí)例部署的時(shí)候A實(shí)例刷新了tokenB實(shí)例還在用舊的導(dǎo)致間歇性40001。后來改成Redis集中緩存問題解決。這個(gè)坑的教訓(xùn)是任何有狀態(tài)的東西在多實(shí)例環(huán)境下都要考慮一致性問題。第二個(gè)坑是文件校驗(yàn)只看了擴(kuò)展名結(jié)果有個(gè)用戶上傳了一個(gè)改名為jpg的文本文件企業(yè)微信返回40004。后來加了魔數(shù)校驗(yàn)讀文件前幾個(gè)字節(jié)判斷真實(shí)類型。魔數(shù)校驗(yàn)的規(guī)則是JPG開頭是FFD8PNG開頭是89504E47GIF開頭是47494638。讀前8個(gè)字節(jié)就夠了。第三個(gè)坑是并發(fā)上傳同一個(gè)文件時(shí)多個(gè)線程共享了一個(gè)FileInputStream導(dǎo)致部分請(qǐng)求拿到空內(nèi)容。后來改成每個(gè)請(qǐng)求自己打開流問題解決。這個(gè)坑的教訓(xùn)是流是有狀態(tài)的不能跨線程共享。5.3 性能優(yōu)化的幾個(gè)點(diǎn)如果上傳頻率很高有幾個(gè)優(yōu)化點(diǎn)可以考慮。第一用連接池OkHttp默認(rèn)有連接池復(fù)用TCP連接減少握手開銷。第二大文件用流式上傳不要讀進(jìn)內(nèi)存OkHttp的RequestBody.create(File)就是流式的。第三token緩存用集中式緩存避免每個(gè)實(shí)例都去刷新。第四批量上傳的時(shí)候用異步OkHttp的enqueue方法可以并發(fā)發(fā)送但要注意控制并發(fā)數(shù)避免觸發(fā)限流。我實(shí)測(cè)下來單實(shí)例每秒上傳10個(gè)1MB的文件CPU和內(nèi)存都很平穩(wěn)。如果超過這個(gè)量建議做隊(duì)列削峰把上傳請(qǐng)求放到隊(duì)列里慢慢消費(fèi)。5.4 日志與監(jiān)控上傳這種外部依賴的操作日志一定要打全。我一般記錄這幾個(gè)字段請(qǐng)求ID、文件大小、文件類型、耗時(shí)、結(jié)果碼。請(qǐng)求ID用于串聯(lián)上下游日志文件大小和類型用于分析失敗分布耗時(shí)用于發(fā)現(xiàn)性能問題結(jié)果碼用于統(tǒng)計(jì)成功率。監(jiān)控方面我會(huì)統(tǒng)計(jì)上傳成功率、平均耗時(shí)、失敗原因分布。成功率低于99%就告警平均耗時(shí)超過2秒也告警。失敗原因分布能幫你快速定位是token問題還是文件問題。注意日志里不要打media_id的完整值打前幾位就行避免泄露。也不要打access_token這個(gè)是敏感信息。5.5 關(guān)于素材類型的幾個(gè)疑問有人問過圖片能不能當(dāng)文件上傳可以type傳file就行但這樣企業(yè)微信不會(huì)做圖片處理發(fā)送的時(shí)候也是當(dāng)文件發(fā)。反過來文件能不能當(dāng)圖片上傳不行企業(yè)微信會(huì)校驗(yàn)實(shí)際類型不匹配會(huì)返回40004。還有人問視頻的封面怎么處理企業(yè)微信上傳視頻接口支持傳封面但臨時(shí)素材接口不支持只有永久素材接口才支持。如果業(yè)務(wù)需要封面要么用永久素材要么自己在發(fā)送的時(shí)候處理。語音的時(shí)長限制是60秒這個(gè)是在上傳的時(shí)候校驗(yàn)的超過會(huì)返回錯(cuò)誤。如果你不確定音頻時(shí)長可以用FFmpeg之類的工具先探測(cè)一下或者干脆只校驗(yàn)大小讓企業(yè)微信去判斷。6. 一些個(gè)人體會(huì)這套方案我在兩個(gè)項(xiàng)目里用過整體穩(wěn)定性不錯(cuò)。最大的感受是對(duì)接外部接口優(yōu)雅的關(guān)鍵不在于代碼寫得多漂亮而在于對(duì)邊界情況的覆蓋。token過期、文件超限、網(wǎng)絡(luò)抖動(dòng)、并發(fā)沖突這些才是真正消耗精力的地方。把這些問題處理好了代碼自然就優(yōu)雅了。另外一點(diǎn)是不要過度設(shè)計(jì)。我見過有的項(xiàng)目為了上傳一個(gè)文件搞了一套復(fù)雜的責(zé)任鏈加策略模式結(jié)果維護(hù)成本比收益還高。我的建議是先跑通再抽象。等你在三個(gè)地方寫了重復(fù)的上傳邏輯再考慮抽成公共模塊。過早抽象比不抽象更可怕。最后分享一個(gè)小技巧如果你不確定企業(yè)微信的接口行為可以用curl先手動(dòng)調(diào)一次把請(qǐng)求和響應(yīng)都打出來看。比在代碼里調(diào)試快得多。比如上傳接口你可以這樣調(diào)curl -X POST https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_tokenYOUR_TOKENtypeimage \ -F media/path/to/image.jpg把YOUR_TOKEN換成真實(shí)的token就能看到完整的響應(yīng)。這個(gè)方式在排查40004、40005這類錯(cuò)誤的時(shí)候特別有用因?yàn)槟隳苤苯涌吹狡髽I(yè)微信返回的errmsg比看代碼猜快多了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷五月日本| 欧洲一区二区| 九九热精品视频在线观看| 午夜丁香 婷婷| 久久精品夜色噜噜亚洲a∨| 天天做天天要天天爱| www.激情五月| 99久久精品国产色欲| 熟女激情五月天| 啪啪丁香五月| 欲色人妻| 熟女人妻一区二区三区免费看| 激情婷婷五月天日本系列| 色情五月天。| 亚洲一级 片内射网站在线观看| 欧洲色| 99在线er热| 深爱五月激情| 操逼三区| 五月六月婷| www98日本小时间到了| 亚洲视频一区| 99热这里精品| 久久亚洲天堂| 九九九午夜影院成人| 欧美超级视频97| 涩五月婷婷| 色色色色色综合| 九九色逼| 天天爱天天做天天日| 亚洲传媒在线观看| 激情综合色五月丁香| 天天干天天操天天爽| 久久女婷| 亚洲综合久| 婷婷黄色网| 色色丁香婷婷| 色狠狠色噜噜AV天堂五区| 五月天开心网| 色久综合天天做视频| 99热在线观看免费中文| 操99| WWW.天天日| 婷婷网影院| 夜夜嗨一区二区三区直播内容| 91人人操人人| 婷婷丁香五月综合| www狠狠| 99自拍视频在线观看| 激情二色月| www.狠狠操.co m| 欧美色色色色色色色色色色| 丁香久久综合| 99色激| 91视频精品99| 99热 免费| 色五月激情视频在线综合| AV在线免费播放| www.日本91| 婷婷狠狠18禁久久| 99久久久国产大片| 在线国产精品色| 91玖玖| 午夜成人天堂久久无码日韩久久| 激情五月婷婷丁香六月| 五月婷婷色综图片| 国产在线另类五月婷婷| 久热这里| 久久精品性爱| 97精品自拍| 五月天淫乱视频| 婷婷五月天手机版视频| 日本熟女一区二区| 51XX午夜影福利| 久九色| 大香蕉啪啪啪| 婷婷五月丁香综合亚洲| 99自拍视频网站| 国产亚洲99| 激情五月丁香综合蜜桃| 天天操婷婷| 99热这里都是精品| 丁香五月婷婷图片综合| 久操人妻| 俺去也综合| 99在线精品观看99| 色天使久久综合| 欧美激情伊人| 天天干天天操天天上| 色欲AV导航| 婷婷五月天综合AV| 操B无码视频国语| 碰碰操91| 色婷婷色婷婷五月| 在线观看免费视频| 另类视频一区| 播播网色播播| 影音先锋男人av资源站| 五月婷婷久久激情 | 欧美色色色色色色| 丁香五月综合在线播放| 五月丁香在线| 九九99九九99| 婷婷狠狠操| 99色视频在线| 五月丁香激情四射综合| 亚城区在线| 久久激情视频| 99ri久久| 99国产精品久久久久久久久久久 | 婷婷在线中文字幕| 99热在线免费观看精品| 99精品在线观看视频| 天天肏天天舔AV| 好好干Av| 丁香六月色婷婷| 丁香五月玖玖| 久久婷婷激情视频| JlZZJlZZ8JlZZ亚洲熟女| a九九热www| 色婷婷丁香AV综合| 亚洲成人AV电影在线| 九九热超碰| 五月开心久久| 神马欧美精| 狠狠色狠狠色综合日日91| 爱射综合| 婷婷爱在线观看| 五月天伊人| 影音先锋男人av资源站| 视色综合| 色色色1网址| 精品99网站| 婷婷五月天影院| xx久久| 五月天影院| 香蕉AV777XXX色综合一区| √天堂资源在线人妻熟女| 婷婷无码视频| 色色综合热| 五月丁香亚洲综合网| 六月激情综合| 97色五月天| 六月婷婷综合| 五月丁香婷婷人体| 亚洲第一成人AV| 日本五月婷婷久久久六月丁香| 五月天综合婷婷| 熟女91九色| 激情五月天激情小说| 婷婷中文综合网| 婷婷五月天亚洲丁香| 色狠狠色噜噜AV天堂五区| 丁香五月婷婷狠狠色| 婷婷午夜精品久久久| 国产av影片| 99热8| 狠狠色婷婷色| 成人婷99最新| 色婷婷五月婷婷五月婷婷五月| 大地9中文在线观看免费高清| 丁香六月婷婷激情综合| 狠狠精品干练久久久无码中文字幕| 性爱在线播放av| 丁香六月婷婷综合| 日韩十国产极品久久| 丁香婷婷五月激情四射网| 丁香六月视频免费观看| 狠狠99| 天天色播| 伊人色欲五月天| 99久操视频| 这里只有精品免费视频在线观看| 久操综合| 最新无毒无码AV| 激情99在线视频| 啪啪操操| 99热国品| 五月婷婷色影院| 亚洲精品99| 中文字幕丰满孑伦无码专区| 五月丁香激情综合网| 4399亚洲视频| 红桃91人妻爽人妻爽| 天天综合色| 激情综合九月| 五月婷婷 婷婷五月 一区二区 久久久 | 黑人糟蹋人妻HD中文字幕| 丁香五月亭亭六月综合激情网| 婷婷色色综合| 亚洲视频99| 婷婷丁香五月激情图片| 国产ava| 国产一级片| 久久思思热视频| 免费人人操| 中文字幕在线日亚洲9| 亭亭五月天黑人2014| 9热在线视频精品| 激情五月婷婷丁香| 婷婷九月丁香| 天天干天天操天天爱| 九色 在线| 天天操夜夜操| 国产精品久久久久久白浆色欲| 九九色99| 激情五婷精品网在线观看网址| 狠狠色噜噜狠| 婷婷五月天AV| 91丨九色丨熟女高潮| 欧美日本一区二区三区| 色欲婷婷夜夜| 久久ww| 丰滿爆乳一区二区三区| 成人综合网站| 久久婷婷亚洲| 五月婷婷AV| 婷婷五月花西瓜| 俺来也综合网精品一区| 激情五月天视频| 丁香五月 性爱| 狠狠干在线| 色婷婷丁香五月在线观看| 开心五月六月婷婷| 99视频精品| 天色色综合网| 99热热热天天人人人超超碰| 荫道BBWBBB高潮潮喷| 色色激情网| 丁香婷婷视频一区二区| 综合色色婷婷| 99热只有这里才是精品| 狠狠干狠狠干狠狠干狠狠干| 五月在在观看| 色五月五月丁香| 色婷婷成人| 91九色欧美| 伊人大香蕉爱聚| 99自拍视频在线观看| 啪啪色区| 五月婷婷五月天| 色五月婷婷一二| 99re这里只有精品在线观看| 综合五月激情网| 五月婷高清视频| 亚洲五月婷婷| 五月婷婷在线视频免费观看| 久久色在线视频| 五月停亭六月,六月停亭的英语| 婷婷的色色五月天| 大香蕉五月天婷婷丁香91| 狠狠五月天婷婷激情网。| 久热这里只有国产| 色婷婷成人影片| 婷婷丁香五月亚洲欧美| 久久久久亚洲A∨成人乱码电影| 九九色色| 五月婷婷香蕉| 久8色色| 99re在线这里只有精品视频首页| 五月丁香六月婷婷国产视频| 色五月大| 丁香五月性| 狠狠干,狠狠操| 久久久久久人妻| 激情99| 婷婷丁香18| 狠狠色综合网| 婷婷五月激情四射手| 欧美色激情四射| 国产欧美大香蕉一区| 亚洲av综合在线| 在线免费观看激情视频| 久久久久久久97| 快乐激情五月色婷婷| 激情深爱综合| 99在线亚洲| 亚洲色热| 99爱视频| 男人的天堂97| 五月天六月天| 色综合五月| 97干在线| 日韩五月婷婷久久| 久热大香蕉| www.婷婷| 99久久色| 激情小说五月丁香在线视频观看视频| 色综合色色色色色| 大香蕉久| 99ri网站在线观看| 久久久99视频| 精品皮股午夜AV| 激情亭亭五月| 日韩黄色影院| 综合大香蕉| 激情图片婷婷| 99re免费精品视频| 99ri精品在线观看| www.狠狠操.co m| 久久久五月婷婷| 五月亭亭网成人在线视频| 91久操| 超碰婷婷色| 欧美色图天堂网色| 婷婷在线免费| 99色婷婷| 超碰免费成人| 五月婷婷开心五月| 大伊香蕉精品视频在线| 亚洲精品亚洲人成人网| 九九热这里只有精品6| 思思热这里只有精品| 97超碰色| www激情网| 乱码操操| 9l视频自拍9l视频自拍九色学生| 战争与艾拉电影免费观看| 婷婷久热| 98色花堂98t.R| 午夜不卡成人一区二区| 亚洲AV成人在线| 色情五月综合婷婷| 免费无码毛片一区二区A片| 国产AV不卡福利| 亚洲成人电影aaaa| 亚洲激情av| 五月天婷婷AV| 五月丁香六月激情欧美综合| 午夜AV网| 开心激情久久久久久久| 在线理论片| 99视频久久| 97热这里只有精品| 抽插特写| 九九性视频| 亚洲V国产V欧美V久久久久久| 停停五月色宗合| 女力报到正好爱上你| 狠狠色婷婷7777久| 五月丁香六月婷婷啪啪综合| 可以看的AV| 久久婷婷五月天激情| www一区二区三区| 久久精品99国产精品日本| 一起草Av| www夜夜操| 五月婷婷啪啪啪| 伊人五月天| 91九色PORNY肉丝在线| 激情五月综合色婷婷| 看片视频在线免费日产在线看| 欧美 日韩 成人在线| 五月丁香成人视频| 久久伊人9| 思思热视频| 亚洲成人综合网在线免费观看| 亚洲九九99精品视频在线播放| 欧亚成人A片一区二区| 丁香五月激情六月欧亚激情综合导航| 思思热视频在线观看| 99综合视频| 1024人妻| 亚洲综合新99视频| 大香蕉色婷婷伊人在线| 激情综合激情五月一起草| 免费视频WWW在线观看网站| 欧美狠狠一在草| 五月天com| 五月天国产成人| 日韩无码成人电影| 五月丁香久久激情网| 色涩视频久久| 丁香激情五月天| 99九九视频| 伊人五月婷婷| 被强行糟蹋的女人A片| 亚洲国产精品五月天| 激情综合婷婷| 91人人爽久久涩噜噜噜| 狠狠爱婷婷爱| 国产SUV精品一区二区6| 婷婷丁香18| 色综合久久88色综合天天99| 蜜臀AV在线观看| 久久婷婷色五月| 色婷久| 五月丁香久久| 日韩在线aaa| 在线视频激情网站| 99热综合| 九九视频在线观看| 99热99ai| 国产亚洲成AV人片在线| 五月天婷婷基地| 亚洲婷婷六月天| 久热9热| 日本精品99网站| 婷婷色五月色| 国产亚洲色婷婷久久99精品91| 26UUU成人网| 182.t午在线观看| 色丁香五月| 色七色九九| 日本丰满久久| 婷婷香蕉| 日韩黄色电影| 色色婷婷综合网| 大香蕉五月| 可以免费观看的av| 免费看欧美成人A片无码| 亭亭五月丁香综合欧美| 色婷婷色| 五月婷婷碰碰| 久久女婷| 色五月天激情| 亚洲成人电影在线免费观看| 99久久99久久综合| 欧美日韩成人在线网| 激情综合五月激情17| 亚洲无码影片| 99碰碰| 99热综合| 天天操夜夜爽歪歪| 久久五月天激情视频| 五月天激情四射网站| 香蕉AV777XXX色综合一区 | 色吊操色妞| 99热99色| 婷婷丁香久久| 成人电影在线免费试看| xx人人xx| 玖玖资源站中文| 丁香五月婷婷成人色区| 婷婷五月天综合激情| 欧美操我| 五月丁香综合网| 狠狠精品干练久久久无码中文字幕 | 久9久9久9久9久9久9| 9 7总站超级碰免费视频| 国产精品成人在线| 九九成人视频| 99热这里只有精品在线观看| 激情六月婷婷| a久久| 五月丁香六月婷婷久久| 天天撸天天干天天插| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 欧美三级欧美一级| 99re免费精品视频| 99热老司机| 婷婷丁香宗合888| 欧美色五月天| 很很干夜夜干| 五月叮香啪| 日本va视频| 天天色综合色| 26UUU精品一区二区c〇m| 激情开心五月婷婷| 第六色在线| 一个色的综合| 天天爽天天透天天爱| 六月综和久久| 婷婷丁香五月欧美人| 久久婷婷六月综合资源| 中出内射的人妻视频| 麻豆123区| 九九视频精品视频精品| 国语精品探花| 99热这里只有精品99| 免费视频99| 亭亭五月丁香五月天激情| 天天操电影院色狼性av| 天天插天天日| 色色性爱视频| 99热热热99精品婷婷| 色色五月婷婷狠狠| 黄色91在线观看| 另类亚洲视频| 狠狠做六月爱婷婷综合aⅴ| 99爱在线| 亚洲欧洲中文日韩久久AV乱码| 五月天亚洲色| jiZZdr| av亚洲国产小电影| 秋霞少妇毛片| 激情婷婷丁香五月天小说| XXXX岛国| 五月丁香色六月激情干大屄| 九九精品自拍| 亚洲三级无码| www.jiujiujiu| 爆乳熟妇一区二区三区爆乳| 五月激情影院| 婷婷丁香婷婷97| 五月丁香成人| 天堂婷婷丁香六月网| 人草人人| www.久久久久| 婷久久综合| 色婷婷六月天| 丁香五月激情性色郤| 久久a热| 色五月综合| 色亭亭丁香五月天| 99热只有精品在线播放| 综合五月婷婷| 白人荫道BBWBBB大荫道| www.久久久久久| 久久99这里只有精品| 午夜无码精品色综合久久| 婷婷成人五月天成人文学| 99热免费在线| 操日本三片99| 1995年关宝慧版蜘蛛女| 午夜丁香| 很很色丁香久久停停| 涩涩五月天综合| 六月丁香五月天| 青草五月天| 成人视频免费观看高清完整版在线观看| 国产精典视频在线观看| 婷婷五月天成人综合网| 五月天大香蕉| 婷婷九月激情| 天天做天天爱天天玩| 亚洲人妻av伦理| 久久最新色| 天天天日天天天干| 婷婷五月天激情小说| 欧美婷婷综合网| 开心五月深爱五月| 五月丁香啪啪综合网| 天天操,夜夜骑| 少妇激情五月天| 色99婷婷五月天| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 欧美色色色色色色色色| 日本va视频| www超碰| 91碰碰视频| 色婷婷五月天视频网站| 久9热在线免费观看| 都市激情蜜桃婷婷五月天| 综合网啪啪| 狠狠狠狠青草| 欧美人人草| 超碰av在| 色色色欧美色色| 99精品成人无码A片观看金桔| 综合视频久久| 91人人操人人| 五月天成人综合| 噜一噜在线| 色色色色色日韩午夜激情| www.人人操人人看人人想人人摸 人人人人操,COM | 99视频精品8| 丁香婷婷激情| 久久一热免费视频| 天天干,天天日| 色情性爱视频网址| 欧美久热| 激情五月婷婷色综合| 亚洲第一综合| 丁香5月啪啪| 99噜噜噜在线播放| 欧美性爱丁香五月| 激情五月五月五月婷婷| 欧美五月停| 婷婷色Av| 超级碰碰碰久久网站| 成人色色视频| 亚洲av成人电影在线观看| 丁香六月五月天| 99视频91| 美女五月天| 99re热视频这里只有综合亚洲| 色婷五月| 内射激情在线| 婷婷新网址| 五月天婷婷基地| 91久久精品无码一区二区三区| 久久久久亚洲AV成人无码电影| 91干视频| 中文字幕日本最新乱码视频| 成年人看Va免费视频| 伊人久久中文网| 超碰三级片| 五月丁香六月综合情在线观看| 精品久热| 五月天六月婷| 日本超碰在线| 超碰av在| 伊人激情啪啪| 操逼123网| 久久综合五月婷婷| 99在线观看精品视频| 久婷婷久草| 亚洲成人中文字幕| 九九热精品| 丁香色情五月综合网站| 另类激情四射| 国外亚洲成AV人片在线观看| 色婷婷五月在线| 99热自拍| 国内久久婷婷| 亚洲热视频| 亚洲第一色区| 天天噜天天插| 人人叉久| 色情五月天婷婷| 六月丁香停| 99精品在线| 99热这里只有精品2| 97在线精品| 教师性爱毛片| 婷婷丁香五月亚洲17cao| 亚洲狠狠操| 日本3级片偷拍网站| 玖玖色综合色| 99热九九热| 夜夜撸日日骑| 欧美日本综合网| 久久精品五月| 超碰在线观看三级片| 婷婷色色丁香五月天| 婷婷亚洲丁香五月| 91狠狠综合久久| 色色热日| 黄网在线免费观| 丁香色六月婷婷| 国产精品婷婷午夜在线观看| 亚州激情网站无码| 啪啪激情综合| 激情久久丁香| 亚洲9久久精品| 天天插天天插| 五月天成人综合| 91大屁股精品| 婷婷性色| 人妻精品久久久久久| sS丁香五月婷婷| www.婷婷,com| 97超级碰人人| 最近中文字幕2019视频1| 狠狠爱综合网| 五月婷婷亚洲| 亚洲va综合va国产va中文| 五月色丁香国产在线视频| 久久婷婷五月综合| 超碰在线精品| 99熟女视频| 久久婷婷综合色丁香| 在线播放人妻| 久久婷婷午夜| 97亚洲视频在线| 成人丁香五月| www.激情| 色优久久| 婷婷色婷婷| 精品视频99看在线视频| 久久久久久xxxxx| 久久五月天婷婷| 久久婷婷网站| 亚洲AV人人操| 精品人人操| 激情综合网五月丁香| 色五月激情综合| 伊人9在线| 欧美日韩成人在线网站| www.日韩国产| 亚洲av免费在线| 99碰碰视频| 成人亚洲精品| 婷婷六月丁香激情| 这里只有精品99视频| 丁香六月色香蕉视频| 色婷婷婷av | 激情综合啪啪| 激情五月五月婷婷| 99在线精品免费视频| 激情五月天婷婷| 国外亚洲成AV人片在线观看| 亚洲综合五月天婷婷| 色综合77777| 狠狠色丁香久久综合婷婷亚洲成人福利| 激情综合网激情五月婷婷| 欧州婷婷五月天综合| 九九久久玖玖爱| 九九精品99久久久| 色婷五月天| 五月丁香婷婷激情在线视频| 五月丁香花免费视频| 天天爽,夜夜爽| 91九色中文| 99热精品在线播放| 亚洲成人AV电影在线| 婷婷久久爱| 狠狠五月激情丁香六月| wuyuedingxiang99| 五月婷婷五月天亚洲无码| 噜噜视频| 欧洲色| 婷婷五月色综合香五月| 久久九精品| 色五月婷色彩免播放器| 丁香五月天啪啪激情综和网| 色婷六月| 中国丰满熟女A片免费观| 97婷婷丁香五月综合| 婷婷五月大香蕉| 婷婷的五月天另类视频| 久久这里有精品| 色五月丁香婷婷| 婷婷丁香色五月久久88| 国产精品色婷婷99久久精品| 伊人无码高清| 日本操片| 天天操夜夜玩!| 人人操人人干AV| 少妇做爰免费视看片| 色月丁| 国产精品五月丁香| 久色大| 中文字幕日本最新乱码视频| 色婷婷综合综合网| 久久婷婷操| 丁香五月电影| 激情婷婷五月天丁香| 色频玖玖五月天| 爱婷婷都市激情| 欧美日韩精品人妻狠狠躁免费视频| 十区av| 久久人人人人妻| 久九色| 操操熟女| 亚洲综合婷婷五月| 激情丁香五月天| 激情五月天99色| 青青草六月丁香| 99热精品中文字幕| 婷婷五月,偷窥偷拍网| 2025天天爽天天摸| 色噜噜综合网| 亚洲婷婷91丁香| 婷婷五月天电影区小说区| 婷婷五月天激情小说| 天堂在线9| 丁香色婷婷五月天| 六月五月天婷婷涩播在线| 亚洲日韩国产黑丝黑丝AVAV一区二区三区| 丁香五月天资源网| 五月精品99综合| 久久婷婷六月综合资源| 五月开心久久| 激情五月天色色网| 丁香五月六月综合激情| 午夜色丁香| 久久视频这里99| 秋霞av吧| 蜜臀九九九九| 黑人巨粗进入警花疼哭A片| 人妻性爱av网站| 99综合| 高清不卡一区| 色婷五月天| 日韩 中文 欧美| 国产亚洲99久久| 色五月婷婷久久| 日韩五月婷婷久久| 五月天色视频| 任你搞免费视频观看| 丁香五月亚洲综合| 久久精品凹凸分类| 久久AV电影| 伊人网色婷婷五月天| 中文字幕日韩无码制服诱或| 国产午夜成人AV在线播放| 99色看这里只有精品| 99无码| 丁香伊人激情| 日本eVa一区=区视频| 天天日夜夜操五月| 成人免费黄色短视频| 亚洲激情综合五月婷婷啪啪| 欧美日本不卡黄色片| 五月婷婷性| 综合色视频| 激情久久丁香| 99爱爱| 中文激情网| 人妻五月天激情开心网| 久久精品无码一区| 五月天精品视频| 中文在线成人| 五月丁香综合激情| 日韩三级片一区二区| 少妇性BBB搡BBB爽爽爽视頻| 狠狠狠狠狠操| 伊人九九综合| 99热8| 激情丁香网| 大香蕉懂9| 婷婷伊人综合中文字幕| 26UUU一区二区| 欧美黄色一级录像| 婷婷天天色| 亚洲色碰| 一级黄在线| 伊人在线视频| 色婷婷电影| 日本无码专区| 激情网五月天| 激情婷婷内射| 丁香五月天社区婷婷| 久热 91| 丁香五月亚洲无码| 99视频在线观看视频| 色播五月丁香| 天天色天天爱天天爽| av无码电影| 亚洲精品视频在线| 婷婷五月天综合小说网| 99热老司机| 日韩丁香涩| 久久狼人天堂| 激情狠狠丁香月| 99男人天堂| 性av| 色婷婷五月综合在线| 五月天播播综合| 国产激情在线观看| 丰满少妇猛烈A片免费看观看| 婷婷色五月在线视频| 五月天激情小说婷婷| 九月婷婷在线观看| 俺去也婷婷| 九色啦蜜臀| 26uuu亚洲欧美另类| 97婷婷狠狠| 亚洲成人网址在线观看| 人人播| 国产欧美va| 5月婷婷六月丁香| 欧洲亚洲免费视频9| 色域五月丁香| 人人操AV| 色综合色色| 激情五月色在线播放| 九九sese| 久久综合性| 99啪啪骑| www.wuyuetian啪啪| 五月婷婷基地| 日韩综合久| 3www激情| 五月天婷婷色小说| 思思99热热热99| 热久国产| 五月婷婷六月综合| 免費观看aV在线网址| 婷婷五月天丁香| 五月综合久久| 色婷婷AV在线| 99热6精品| 九九精品在线网| 天天婷婷操| 婷婷久久午夜网| 亚洲无码另类| 色综合久久88色综合天天99| 97碰在线免费观看| 极品五月天| 亚洲综合五月天婷婷| 亚洲爆乳无码精品AAA片蜜桃| 激情婷婷色色| 97丁香婷婷| 天天肏高清在线| 五月天播播中文字幕| 99热6色| Www.狠狠| 亚洲热久久| 夜夜撸天天操| 激情综合丁香五月| 丁香涩涩爱| 天天色综合网吨吧| 五月丁香婷庭在线| 色婷婷九月综合| 五月丁香基地| 日韩九九| 日本成人噜噜噜| 99热只有| 激情 婷婷| 婷婷久久99| 在线中文av| 99久久激情视频| 亚洲精品婷婷| 五月丁香色婷婷| 99国产精品久久久久久久久久久| 无码少妇高潮喷水A片免费| www99热| 黄色片久久| 久久激情四射| 九9九9无码| 激情爱爱网站超大免费| 国产精典视频在线观看| 五月丁香激情综合网| 久久五月天精品视频| eeuus五月婷| 狠狠色婷婷丁香六月| 思思热热久久| 色色色色综合| 久草A片| 久久久久9| 大香蕉 婷婷| 97在线日本| 丁香婷婷网| 色五月在线| 五月天激情社区| 五月婷婷六月色| 996热| 风流少妇A片一区二区蜜桃 | 婷婷五月影院| 色色色成人网| A片女女女女女女BBBB| 成人免费超碰| 99欧州偷拍视频| 亚洲精品操一操、噜一噜、摸一摸、爽| 成人网丁香五月| 婷婷五月天第三页| 色丁香久久| 香蕉AV777XXX色综合一区| 五月激情婷婷四射| 九月丁香亭亭| 色综合久久88色综合中文字幕| 激情五月天激情五月天| 99热18| 久久久久久久久18久久| 丁香婷婷色九月| 五月丁香久久综合精品| 成人日韩欧美| 婷婷视频在线| 婷婷五月丁香91| 久久婷色| 婷色视频| 色五月丁香激情视频| 99视频久久| 丁香五月婷婷基地| 激情碰碰碰| 伊人丁香六月婷婷| 五月天激情小说欧美激情| 五月丁香久久激情网| 五月激情网络| 久久精品日| 操操啪| 亚洲十月婷婷综合| 色色色9 9 9| 99在线精品免费视频| 狠狠999| 激情久久综合网| 婷婷五月综合网| 五月天玖玖狠狠色色| 大香蕉操操| 九九热最新| 色播播五月| 秋霞电影一级黄| 日本97在线看片| 五夜婷婷| 激情五月丁香六月婷婷| 五月色丁香| 久久99热网| av在线激情| 激情亚洲色图片丁香综合| 碰碰人人漕| 丰满女老板BD高清A片| 噜噜视频| 五月天婷五月天综合网在线观| 狠狠综合久久综合| 天天爽天天爽| 色色色com| 婷婷五月天另类视频| 欧美日韩成人高清在线| 丁香久久| 人人干99| 伊人狠狠干| 六月丁香婷婷视频综合在线观看| 青吴乐视频| 丁香五月五月婷婷| 天天爽夜夜爽夜夜爽精品视频| 99热免费精品热久久66| 91丨九色丨国产在线| 91色久| 色域五月婷婷丁香| 人人操人av| 久久婷婷成人视频| 97热九九| 91免费啪视频| 久综合网| 婷婷97碰碰| 婷婷丁香五月综合激情视频| 操笔无码| 丁香五月综合婷婷| 任我肏视频精品| 无码色| 超碰av在线| 思思热视频| 丁香五月人妻熟女| 亚洲精品色色| 超碰97干| 九月丁香欧美综合| 99丁香婷婷综合网| 五月婷婷激情综合| 色五月激情| 六月综合婷婷开心伊人| 日本欧美国产| 99热在线里有精品| 狠狠色婷婷| www.maotanji.com| www.激情五月天.con| 伊人久久丁香狠狠婷婷综合香蕉| 香蕉久久国产AV一区二区| 五月婷婷色影院| 五月婷婷激情五月| www.成人婷婷综合| 九九爱看亚洲| 激情综合网,婷婷| 亚洲久热| 久久停停超碰| 9久国产| 91人碰| 激情久久网 | 亚洲中文字幕av| 五月婷久久| 亚洲在线资源| 五月婷婷丁香大陆免费| 这里只有精品无码| 亚洲综合色色| 婷婷五月天在线观看第二页| 欧美Va在线| 精品成人无码A片观看香草视频| 五月丁香六月日逼| 激情综合4月| 色五月天天在线观看资源站| 大香蕉手机视频| 91精品婷婷国产综合久久| 国产精品视频免费看| 丁香玖玖| 色天堂在线| 啪啪99| 婷婷视频网| 99久热在线精品| 婷婷97| 天天综合激情| 久久婷婷丁香五月一二三| 五月激情婷婷图片基地| 激情小说五月丁香在线视频观看视频| 人人色人人摸人人看| 综合亚洲五月天| 26UUU成人网| 五月激情视频网| 成人欧美Va| 深爱激情六月| 五月六月丁香激情| 婷婷丁香六月| 国产免费AV网站| 色五月丁香网| 色婷婷影院| 丰满少妇猛烈A片免费看观看| 香蕉网婷婷| 九九99九九精品视频| 色色网91| 在线另类视频| 天天爽天天爽天天爽天天爽天天爽| 亚洲俩性性爱图片久久第六页| AV五月丁香| 五月天色裸体视频| 五月天播播中文字幕| 亚洲成人av在线| 色婷婷六月天| 操老逼综合网| 久久全色| 五月婷婷六月丁香综合| 色五月婷婷激情综合网| 婷婷五月天亚洲激情戏精品| 天天干天天操| 久草性爱| 欧美激情综合色综合啪啪五月| 天天肏在线| 超碰在线观看成人视| 爱射综合| 九九日伊人| 男人天堂AV在线一区二区| 色五月婷婷av| 日日干日日s| 激情五月婷婷丁香| 91久久婷婷| 无码免费人妻A片AAA毛片西瓜| 综合久久首页| 9l视频自拍9l九色成人| 五月丁香六月色情网欧美| 五月的色婷婷高潮| 激情av| 99只有精品9| 丁香五月激情棕合| 色五月激情五月丁香五月婷婷啪啪综合| 五月丁香狠狠| 久久精典| 久久色大香蕉| 色色丁香婷婷综合| 色婷婷综合五月| 99这里都是精品| 最近中文字幕大全免费版在线| 国产97在线日韩亚洲女人被黑人巨大| 另类 在线| 日日操,日日爽| 99热| 成人亚洲精品久久久久| 女人天堂久久| 夜夜噜夜夜奇| 在线观看av网站| 亚洲色无码A片一区二区麻豆| 9999热在线免费观看| 丁香五月亭亭六月综合激情网| 亚洲综合激情五月久久| 99无码视频| 嫩草视频观看| 国产日日夜夜操| 91久久精品无码一区二区三区| 无码少妇高潮喷水A片免费| www.97碰碰com| 婷婷激情啪啪| 99热免费网站| 天天插天天插天天插天天插| 国产亚洲色婷婷久久99精品91| 日韩激情网站| 国内裸舞二区| 久久精品4| 婷婷九月久久| 深爱激情六月天| 伊人激情网| 欧美色骚婷婷五月天| 五月丁香影视| 久久中文网| 久久婷婷五月天激情新地址| 爱草人视频| 91无码一区人妻A片蜜| av中文在线| 免费观看大片视频 丁香婷婷 六月欧美| 少妇性BBB搡BBB爽爽爽电影| 9l视频自拍九色9l视频自拍九色9l社区| 国产精品视频久久99| 亚洲综合成人网| 亚州操操| 日本婷婷色日| www.91热久久| 最新激情五月天| 久久婷婷亚洲| 啪啪操超碰| 亚洲热久久| 北条麻妃九九九国产精品视频| 丁香婷婷精品视频| 日韩综合天堂| 激情婷婷视频在线| 五月婷婷福利| 香蕉AV777XXX色综合一区| 久久五月丁香| 天天色图| 亚洲无aV在线中文字幕| 怡红院一二三| 亚洲超碰中文字幕| 五丁香激情综合| 99热在线观看| 五月婷色| 婷婷的99视频网站| 另类视在线| 天天爱综合网| 伊人影院久久网| www.五月瑟| 久草婷妨| 五月丁香狠狠| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 天天综合网站| 欧美操人| 99在线精品视频在线观看| 国产9色在线/日韩| 9久国产精品| 九九热99熟女| 成人永久免费视频在线观看| 99久久五月丁香野外| 天天草比天天爽| 丁香六月综合| 无码 色| 在线综合啪| 亚洲色色香蕉| 久久久人人操A V| 婷婷五月亚洲一本在线丁香| 色播激情| 99久热这里只有精品| 婷香狠狠爱五月| 天天激情欧美美女| 色五月婷婷五月天激情综合| 色丁香五月婷婷| 9久国产| 91爱啪啪| 99久久久国产大片| 99精品网| 亚洲综合五月天综合| 亚洲激情四射色| 韩国三级五月天婷婷。| 久久人视频| 操人久久| 伊人干综合| 色婷网| 久久五月天黄色五月天色网址| 久久综合九色综合97婷婷| 国产另类综合| CAOBIBI| 色域五月婷婷丁香| 97人人操人人爽| 亚洲综合五月天婷婷丁香| 丁香五月天精品| 婷婷丁香五月基地| 九九热99熟女| 99爱视频精品| 国产美女无遮挡裸体毛片A片 | 激情婷婷五月久久| 99热在线观看| 精品无码99| 色香久久| 高清无码入口| 久久午夜理论| 婷婷综合偷拍| 九九伊人网| 婷婷色香六月综合激情| www.99操.com| 激情丁香六月| 99热久只有精品首页| 九色成人AV在线| 欧美啪啪9| 亚洲色情免费网| 韩国97天堂| 91久久久久久久久久久| 五月丁香婷婷五月色| 日本色超碰| 99啪啪视频| 丁香五月天激情综合网| www.99热精品99.com| 色色婷婷五月| 色五月丁香在线| 伊人玖玖婷婷| 六月丁香久久| 99热a片免| 国产欧美日韩性爱| 九九色插| 99综合视频一体| 狠狠干五码| 亚洲av免费在线| 免费在线观看AV网站| 中文字幕AV网址| 五月婷综合性中心| 激情五月色综合网| 99国产精品久久久久久久久久久 | 丁香五月www| 97人人射| 五月天色五月| 狠色狠色狠色狠色狠色网| 97亚洲婷婷|