日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

Java后端生成微信小程序二維碼的5種實(shí)現(xiàn)方式與避坑指南

Java后端生成微信小程序二維碼的5種實(shí)現(xiàn)方式與避坑指南 簡(jiǎn)介這是一份圍繞微信小程序?qū)傺?qǐng)二維碼生成系統(tǒng)梳理多種服務(wù)端編碼思路的Java后端資源合集適合需要在小程序裂變、渠道推廣或獎(jiǎng)勵(lì)場(chǎng)景中落地二維碼能力的開(kāi)發(fā)者。資源基于微信官方getUnlimitedQRCode接口采用前端—后端API—微信API的調(diào)用鏈路專門解決長(zhǎng)期有效、數(shù)量不限的小程序碼生成問(wèn)題并一次性提供5種不同實(shí)現(xiàn)方式。壓縮包共含69個(gè)文件以Java源碼、XML配置與class編譯文件為主另有properties配置與依賴jar包可導(dǎo)入IDE直接閱讀或運(yùn)行整體體積僅53KB結(jié)構(gòu)精簡(jiǎn)便于快速對(duì)照不同方案的差異。已有2647人學(xué)習(xí)/下載適合具備基礎(chǔ)Spring/HTTP知識(shí)、希望減少接口對(duì)接試錯(cuò)成本的中級(jí)Java開(kāi)發(fā)者。通過(guò)該資源可掌握5種編碼思路、接口參數(shù)封裝及后端分層設(shè)計(jì)并拿到開(kāi)箱即用的全套工程模板。1. 生成微信小程序二維碼先繞過(guò)“找SDK”這個(gè)彎我見(jiàn)過(guò)不少后端同學(xué)接到這個(gè)需求后的第一反應(yīng)打開(kāi)搜索引擎找“微信小程序二維碼生成JDK”然后花半天調(diào)依賴、排版本沖突。其實(shí)這件事的正式做法非常輕——通過(guò)Java發(fā)起HTTP請(qǐng)求調(diào)用微信官方接口拿回圖片字節(jié)流落盤或者轉(zhuǎn)Base64交給前端。標(biāo)題里的“5種實(shí)現(xiàn)方式”本質(zhì)上是三個(gè)官方接口getUnlimited、getwxacode、createwxaqrcode和兩種落地形態(tài)文件落地、Base64直出的組合選錯(cuò)接口會(huì)踩數(shù)量上限的坑選錯(cuò)落地形態(tài)會(huì)被access_token和緩存折騰到懷疑人生。這篇文章我按真實(shí)落地順序跑一遍把參數(shù)差異和踩坑點(diǎn)寫透適合正在做分銷海報(bào)、活動(dòng)碼、分享裂變場(chǎng)景的后端同學(xué)。2. 5種實(shí)現(xiàn)方式都繞不開(kāi)的三個(gè)官方接口先分清再動(dòng)手在小程序碼這個(gè)領(lǐng)域微信官方一共開(kāi)放了三個(gè)生成接口后續(xù)所有方案都是圍著它們轉(zhuǎn)。很多人翻車的起點(diǎn)就是沒(méi)搞清楚這三個(gè)接口的差異憑直覺(jué)挑了一個(gè)結(jié)果要么總數(shù)被限制要么動(dòng)態(tài)參數(shù)傳不進(jìn)去。所以這一章先把接口選型講明白再談代碼。2.1 getUnlimited / getwxacode / createwxaqrcode用一張表看懂差異這三個(gè)接口分別對(duì)應(yīng)“小程序碼(無(wú)限量)”“小程序碼(固定路徑)”“普通二維碼(固定路徑)”。別看都是生成一張圖業(yè)務(wù)上的差別非常大。接口生成類型參數(shù)特點(diǎn)總量限制典型場(chǎng)景getUnlimitedgetwxacodeunlimit圓角小程序碼scene傳動(dòng)態(tài)參數(shù)最多32位page傳固定頁(yè)面路徑無(wú)總量限制用戶ID、訂單號(hào)、渠道標(biāo)識(shí)等動(dòng)態(tài)碼getwxacode圓角小程序碼path傳固定頁(yè)面路徑不支持scene動(dòng)態(tài)拼接總限額10萬(wàn)個(gè)固定頁(yè)面入口碼、線下物料長(zhǎng)期碼createwxaqrcode普通二維碼path傳固定頁(yè)面路徑不支持scene總限額10萬(wàn)個(gè)掃碼進(jìn)小程序的普通二維碼、印刷物料我在模擬項(xiàng)目X里第一次做分銷海報(bào)時(shí)選了getwxacode產(chǎn)品反饋“同一個(gè)碼掃出來(lái)都一樣”因?yàn)榉咒N海報(bào)每個(gè)用戶都要帶不同參數(shù)這種場(chǎng)景只能上getUnlimited。反過(guò)來(lái)如果你只需要一個(gè)固定的“小程序首頁(yè)入口碼”用getUnlimited反而沒(méi)必要——getwxacode夠用且語(yǔ)義更清晰。還有一個(gè)容易忽略的點(diǎn)createwxaqrcode生成的是普通二維碼不是圓角小程序碼微信識(shí)別沒(méi)問(wèn)題但視覺(jué)上和品牌規(guī)范往往對(duì)不上。如果產(chǎn)品對(duì)碼樣式有要求圓角、透明底、自定義顏色優(yōu)先考慮getwxacode和getUnlimited。另外getUnlimited支持auto_color和line_color自定義碼眼顏色做活動(dòng)視覺(jué)時(shí)比另外兩個(gè)接口靈活很多。2.2 access_token是第一個(gè)黑匣子緩存與刷新策略所有生成接口都要在URL上帶access_token而access_token是全局唯一的、有效期7200秒的憑證。它最大的坑在于不能每個(gè)請(qǐng)求都去獲取也不能快過(guò)期了才刷新更不能多個(gè)實(shí)例各刷各的。我見(jiàn)過(guò)一個(gè)團(tuán)隊(duì)在并發(fā)下把token刷崩了二維碼接口間歇性報(bào)41030。我一般用一個(gè)私有靜態(tài)類統(tǒng)一管理token核心邏輯是“全局單例 過(guò)期前提前刷新”public class WxTokenHolder { private static volatile String token; private static volatile long expireAt; public static synchronized String get() { // token還在有效期內(nèi)直接返回 if (token ! null System.currentTimeMillis() expireAt) { return token; } // 過(guò)期或即將過(guò)期重新請(qǐng)求微信接口 // 請(qǐng)求 https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credentialappid你的appidsecret你的secret // 響應(yīng)體里解析 access_token 和 expires_in單位秒 String accessToken doRefresh(); // 偽代碼實(shí)際寫HTTP請(qǐng)求 int expiresIn 7200; // 從接口響應(yīng)里取這里只做示例 token accessToken; expireAt System.currentTimeMillis() (expiresIn - 300) * 1000; // 提前5分鐘刷新 return token; } }邏輯說(shuō)明這里用volatile synchronized保證多線程下token只刷新一次提前300秒失效是為了避免邊界情況——token剛好在請(qǐng)求發(fā)出后過(guò)期導(dǎo)致接口調(diào)用失敗。實(shí)際項(xiàng)目中如果服務(wù)是多節(jié)點(diǎn)部署建議把token放到Redis里用SETNX加鎖防止多個(gè)節(jié)點(diǎn)同時(shí)刷新。參數(shù)上唯一需要關(guān)注的只有expires_in微信返回的是秒記得做單位換算。2.3 按團(tuán)隊(duì)情況選實(shí)現(xiàn)方式前面說(shuō)了5種實(shí)現(xiàn)方式本質(zhì)上不是5個(gè)接口而是“接口 × HTTP客戶端 × 落地形態(tài)”的組合。怎么選主要看你的項(xiàng)目里已經(jīng)有什么依賴。項(xiàng)目是輕量Java工程、不想引額外依賴用原生HttpURLConnection代碼少但連接不復(fù)用。老項(xiàng)目里已經(jīng)用了Apache HttpClient直接復(fù)用連接池管理成熟適合服務(wù)間調(diào)用多的場(chǎng)景。新項(xiàng)目、對(duì)并發(fā)有要求用OkHttp連接池和超時(shí)控制做得比較順手。Spring Boot項(xiàng)目用RestTemplate或WebClient和現(xiàn)有代碼風(fēng)格統(tǒng)一。全棧小團(tuán)隊(duì)、前端急著要圖用Hutool的HttpUtil一行代碼發(fā)出請(qǐng)求返回Base64給前端直接渲染。這五個(gè)方向就是下一章的5種實(shí)現(xiàn)方式。我不打算重復(fù)貼五遍一模一樣的token邏輯下面的代碼都默認(rèn)WxTokenHolder已經(jīng)就緒重點(diǎn)突出每種方式自己的差異。3. 用Java HTTP調(diào)微信接口5種實(shí)現(xiàn)方式與完整代碼進(jìn)入正題。先說(shuō)統(tǒng)一的前提所有請(qǐng)求都是POSTContent-Type為application/json請(qǐng)求體是JSON字符串成功時(shí)返回圖片字節(jié)流PNG失敗時(shí)返回JSON錯(cuò)誤體通常errcodeerrmsg。3.1 方式一原生HttpURLConnection getUnlimited零依賴也能跑通最適合臨時(shí)腳本、工具類或不想引入任何依賴的后端模塊。直接看代碼public class WxQrCodeService { public byte[] createDynamicCode(String scene, String page, int width) throws IOException { String token WxTokenHolder.get(); // 動(dòng)態(tài)小程序碼接口scene傳業(yè)務(wù)參數(shù)page傳固定頁(yè)面路徑 String url https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token token; URL httpUrl new URL(url); HttpURLConnection conn (HttpURLConnection) httpUrl.openConnection(); conn.setRequestMethod(POST); conn.setDoOutput(true); conn.setConnectTimeout(5000); conn.setReadTimeout(5000); conn.setRequestProperty(Content-Type, application/json; charsetutf-8); // 構(gòu)造請(qǐng)求體注意scene最多32位page必須從pages/開(kāi)頭 JSONObject param new JSONObject(); param.put(scene, scene); param.put(page, page); param.put(width, width); param.put(check_path, false); param.put(env_version, release); try (OutputStream os conn.getOutputStream()) { os.write(param.toJSONString().getBytes(StandardCharsets.UTF_8)); os.flush(); } // 微信接口即使業(yè)務(wù)失敗HTTP狀態(tài)碼也可能返回200所以必須讀body判斷 byte[] body; try (InputStream in conn.getInputStream()) { body in.readAllBytes(); } // 返回體以{開(kāi)頭說(shuō)明是錯(cuò)誤JSON不能當(dāng)圖片使用 if (body.length 0 body[0] {) { throw new RuntimeException(微信接口報(bào)錯(cuò): new String(body, StandardCharsets.UTF_8)); } return body; } }邏輯說(shuō)明getUnlimited的scene是動(dòng)態(tài)參數(shù)的唯一入口業(yè)務(wù)側(cè)最常用的是用戶ID、訂單號(hào)這類短標(biāo)識(shí)page固定到小程序頁(yè)面路徑。readAllBytes()在Java 9可用如果你還在Java 8自己循環(huán)讀流即可。幾個(gè)參數(shù)說(shuō)明width控制碼的邊長(zhǎng)范圍280到1280不是越大越清晰一般用430或默認(rèn)值check_path在本地開(kāi)發(fā)環(huán)境必須傳false否則接口會(huì)因?yàn)轫?yè)面未發(fā)布而報(bào)錯(cuò)env_version有三個(gè)取值release、trial、develop開(kāi)發(fā)環(huán)境想測(cè)線上邏輯時(shí)用trial。接口響應(yīng)是PNG字節(jié)流不用做任何解碼直接落盤或轉(zhuǎn)Base64都行。3.2 方式二Apache HttpClient getwxacode適合已有HttpClient的項(xiàng)目老項(xiàng)目里如果已經(jīng)用了HttpClient沒(méi)必要再引一套新依賴。getwxacode的特點(diǎn)是參數(shù)里直接傳path適合固定頁(yè)面入口碼public byte[] createFixedCode(String path, int width) throws Exception { String token WxTokenHolder.get(); CloseableHttpClient client HttpClients.createDefault(); HttpPost httpPost new HttpPost( https://api.weixin.qq.com/wxa/getwxacode?access_token token); httpPost.setHeader(Content-Type, application/json;charsetUTF-8); JSONObject param new JSONObject(); param.put(path, path); // 固定頁(yè)面路徑如 pages/index/index param.put(width, width); // 碼寬度 param.put(check_path, false); // 本地聯(lián)調(diào)必須置false httpPost.setEntity(new StringEntity(param.toJSONString(), UTF-8)); try (CloseableHttpResponse response client.execute(httpPost)) { byte[] body EntityUtils.toByteArray(response.getEntity()); // 同樣要先判斷是不是錯(cuò)誤JSON if (body.length 0 body[0] {) { throw new RuntimeException(微信接口報(bào)錯(cuò): new String(body, StandardCharsets.UTF_8)); } return body; } }邏輯說(shuō)明getwxacode和getUnlimited最大的區(qū)別是——getwxacode不帶scene參數(shù)path就是整個(gè)碼的內(nèi)容。這意味著同一個(gè)頁(yè)面同一個(gè)path生成的碼永遠(yuǎn)一樣想?yún)^(qū)分用戶?做不到它天生就不是干這個(gè)的。參數(shù)上getwxacode還支持auto_color和line_color用于定制碼的顏色。auto_color傳true時(shí)line_color失效系統(tǒng)自動(dòng)取頁(yè)面主色想完全自定義就傳auto_colorfalse以及RGB的line_color。實(shí)際做品牌物料時(shí)這個(gè)參數(shù)比標(biāo)準(zhǔn)黑碼好看不少。另一個(gè)提醒getwxacode有總數(shù)10萬(wàn)個(gè)的限制長(zhǎng)期項(xiàng)目建議做個(gè)計(jì)數(shù)器提前評(píng)估消耗速度別等碼用完了才發(fā)現(xiàn)。3.3 方式三OkHttp createwxaqrcode連接池復(fù)用適合高并發(fā)如果你的服務(wù)并發(fā)量不低OkHttp是比HttpURLConnection更穩(wěn)的選擇。連接池復(fù)用、超時(shí)更精細(xì)、響應(yīng)流處理也更安全。這里生成的是普通二維碼場(chǎng)景是線下掃碼引流public String createQrBase64(String path, int width) throws IOException { String token WxTokenHolder.get(); OkHttpClient client new OkHttpClient.Builder() .connectTimeout(5, TimeUnit.SECONDS) .readTimeout(5, TimeUnit.SECONDS) .build(); JSONObject param new JSONObject(); param.put(path, path); param.put(width, width); RequestBody requestBody RequestBody.create( MediaType.parse(application/json; charsetutf-8), param.toJSONString()); Request request new Request.Builder() .url(https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token token) .post(requestBody) .build(); try (Response response client.newCall(request).execute()) { byte[] bytes response.body().bytes(); if (bytes.length 0 bytes[0] {) { throw new RuntimeException(微信接口報(bào)錯(cuò): new String(bytes, StandardCharsets.UTF_8)); } return Base64.getEncoder().encodeToString(bytes); } }邏輯說(shuō)明createwxaqrcode生成的是普通二維碼形狀不是圓角小程序碼。如果你的頁(yè)面里需要展示二維碼圖片Base64字符串可以直接放到img標(biāo)簽的src里省掉文件上傳和URL生成的環(huán)節(jié)。這里有一個(gè)容易忽略的點(diǎn)OkHttp的response.body().bytes()只能調(diào)用一次調(diào)用后流就關(guān)閉了。別先轉(zhuǎn)成字符串再轉(zhuǎn)byte[]那樣會(huì)把二進(jìn)制圖片弄壞。我見(jiàn)過(guò)同事在這里翻車——用response.body().string()去拿圖片結(jié)果全是亂碼。正確做法是直接取bytes后續(xù)要Base64再編碼。3.4 方式四RestTemplate getUnlimited 文件落盤Spring項(xiàng)目順手做法Spring項(xiàng)目里最常見(jiàn)的做法是直接用RestTemplate把小程序碼存到服務(wù)器本地或?qū)ο蟠鎯?chǔ)返回一個(gè)可訪問(wèn)的URL給前端。下面這段是生成后落盤的完整邏輯public String saveQrToFile(String scene, String page, String fileName) throws IOException { String token WxTokenHolder.get(); String url https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token token; HttpHeaders headers new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); JSONObject param new JSONObject(); param.put(scene, scene); param.put(page, page); param.put(width, 430); param.put(check_path, false); HttpEntityString entity new HttpEntity(param.toJSONString(), headers); // 關(guān)鍵用byte[]接收響應(yīng)強(qiáng)制把圖片流當(dāng)二進(jìn)制處理 ResponseEntitybyte[] resp restTemplate.exchange( url, HttpMethod.POST, entity, byte[].class); if (resp.getStatusCode() ! HttpStatus.OK) { throw new IOException(HTTP狀態(tài)碼異常: resp.getStatusCode()); } byte[] body resp.getBody(); if (body null || body.length 0) { throw new IOException(二維碼圖片為空); } Files.write(Paths.get(fileName), body); return fileName; }邏輯說(shuō)明RestTemplate接收?qǐng)D片流時(shí)必須用byte[]類型作為響應(yīng)泛型如果誤用了String類型框架會(huì)按文本解碼圖片直接被轉(zhuǎn)成亂碼字符串。這也是為什么exchange比getForObject穩(wěn)。落盤之后一般配合Nginx或?qū)ο蟠鎯?chǔ)把文件映射成URL。需要注意文件名的設(shè)計(jì)——如果用scene作為文件名的一部分要確保scene本身不含特殊字符否則URL解析會(huì)有問(wèn)題。我習(xí)慣用“業(yè)務(wù)類型 日期 UUID片段”來(lái)命名避免文件名沖突也方便排查。3.5 方式五Hutool HttpUtil getUnlimited Base64輸出小團(tuán)隊(duì)全棧最快路徑當(dāng)你不想寫連接池、不想寫資源關(guān)閉、就想快點(diǎn)把圖給到前端時(shí)Hutool絕對(duì)是我現(xiàn)在最常用的選擇。代碼縮短到極致public String createWxCodeBase64(String scene, String page) { String token WxTokenHolder.get(); String url https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token token; JSONObject param new JSONObject(); param.put(scene, scene); param.put(page, page); param.put(width, 430); param.put(check_path, false); param.put(env_version, release); // 一行代碼發(fā)起POST并拿回字節(jié)流 byte[] body HttpUtil.createPost(url) .body(param.toJSONString()) .execute() .bodyBytes(); if (body.length 0 body[0] {) { throw new RuntimeException(微信接口報(bào)錯(cuò): new String(body, StandardCharsets.UTF_8)); } // data:image/png;base64 是前端img可以直接渲染的格式 return data:image/png;base64, Base64.getEncoder().encodeToString(body); }邏輯說(shuō)明Hutool的HttpUtil簡(jiǎn)化了HTTP客戶端的使用但本質(zhì)上它還是走HTTP POST響應(yīng)處理邏輯和前面幾種方式一致。bodyBytes()拿到的就是原始字節(jié)流不用關(guān)心連接池關(guān)閉。這種Base64直出方式很適合“前端彈窗實(shí)時(shí)展示分享海報(bào)”的場(chǎng)景——后端不落盤、不產(chǎn)生臨時(shí)文件、不占用存儲(chǔ)每次請(qǐng)求實(shí)時(shí)生成。要注意的是Base64字符串比原圖大約增加33%的體積430px的小程序碼轉(zhuǎn)Base64通常也就幾KB對(duì)接口響應(yīng)影響不大。如果圖片尺寸很大建議還是落盤走CDN別用Base64傳輸。方式五是我在模擬項(xiàng)目X里給前端做分享圖功能時(shí)的最終方案聯(lián)調(diào)效率比前幾種高出一截。4. 生成小程序二維碼避坑5個(gè)翻了車才記住的坑代碼能跑通只是第一步真正折磨人的是各種隱蔽邊界。下面這5個(gè)坑我都在不同項(xiàng)目里踩過(guò)每個(gè)都是真實(shí)線上的事故不是網(wǎng)上復(fù)制來(lái)的。4.1 path填成完整URL掃碼出來(lái)一片空白現(xiàn)象碼生成成功后用戶掃出來(lái)頁(yè)面打不開(kāi)小程序直接報(bào)“頁(yè)面不存在”或白屏。原因你以為path是“https://xxx.com/pages/index/index”就原樣傳給了微信接口。但小程序碼里的path字段要求的是小程序內(nèi)部頁(yè)面路徑必須從pages/開(kāi)始完整的URL是非法值。解決把path規(guī)范成“pages/index/index”這種格式不要帶域名、不要帶http協(xié)議前綴。聯(lián)調(diào)時(shí)打開(kāi)微信開(kāi)發(fā)者工具的Console看具體報(bào)錯(cuò)它會(huì)直接告訴你“page not found”。4.2 access_token被多實(shí)例刷崩接口間歇性報(bào)41030現(xiàn)象二維碼服務(wù)運(yùn)行一段時(shí)間后接口開(kāi)始隨機(jī)報(bào)41030(invalid access_token)重啟后又恢復(fù)。原因多節(jié)點(diǎn)部署時(shí)每個(gè)節(jié)點(diǎn)各自持有token節(jié)點(diǎn)A刷新后節(jié)點(diǎn)B還在用舊token發(fā)起請(qǐng)求微信端舊token被新token頂?shù)鬊自然全部失效。解決token統(tǒng)一放到Redis里所有節(jié)點(diǎn)走同一個(gè)緩存刷新時(shí)用Redis的SETNX做鎖搶到鎖的節(jié)點(diǎn)才允許請(qǐng)求token接口。緩存過(guò)期時(shí)間不要設(shè)滿7200秒留300秒余量避免邊界過(guò)期。提示access_token本身的獲取頻率也有限制官方文檔明確建議全局緩存。服務(wù)端每次生成碼之前都先走WxTokenHolder或Redis不要重復(fù)獲取。4.3 scene參數(shù)超長(zhǎng)或帶特殊字符接口直接報(bào)錯(cuò)現(xiàn)象scene參數(shù)拼接了“用戶ID_時(shí)間戳_渠道標(biāo)識(shí)”結(jié)果接口返回40097或參數(shù)不合法。原因scene最多32位且只支持?jǐn)?shù)字、大小寫英文、下劃線等一部分字符。超長(zhǎng)或被URL編碼后改變語(yǔ)義都會(huì)校驗(yàn)失敗。解決不要在scene里塞原始業(yè)務(wù)主鍵和長(zhǎng)字符串。常見(jiàn)做法是生成一個(gè)短碼存到Redis或數(shù)據(jù)庫(kù)把映射關(guān)系存好scene只存短碼用戶掃碼后通過(guò)短碼反查真正的業(yè)務(wù)參數(shù)。這個(gè)設(shè)計(jì)還能附帶一個(gè)好處——短碼天然適合做冷熱數(shù)據(jù)分析和埋點(diǎn)。4.4 check_pathtrue導(dǎo)致本地開(kāi)發(fā)環(huán)境生成失敗現(xiàn)象本地聯(lián)調(diào)時(shí)調(diào)用getUnlimited接口一直報(bào)“path路徑不合法”。原因check_pathtrue要求小程序頁(yè)面必須先上傳到微信后臺(tái)本地開(kāi)發(fā)環(huán)境下的頁(yè)面路徑根本不在微信的版本體系里自然校驗(yàn)失敗。解決開(kāi)發(fā)環(huán)境check_path傳false發(fā)布到線上前再改成true。如果你用env_versiondevelop配合check_pathfalse可以在開(kāi)發(fā)版小程序里正常打開(kāi)頁(yè)面進(jìn)行調(diào)試。這個(gè)參數(shù)在測(cè)試環(huán)境最容易漏改建議做成配置項(xiàng)不同環(huán)境不同取值。4.5 HTTP狀態(tài)碼是200body卻是一段JSON錯(cuò)誤現(xiàn)象圖片下載下來(lái)是0字節(jié)或者文件打不開(kāi)但HTTP狀態(tài)碼明明是200。原因微信生成接口的特點(diǎn)是——業(yè)務(wù)失敗時(shí)HTTP狀態(tài)碼依然返回200錯(cuò)誤信息放在body的JSON里。代碼里只要看到前面有if (code ! 200)就以為成功了然后把JSON錯(cuò)誤文本當(dāng)成圖片寫入文件。解決所有實(shí)現(xiàn)方式里都要加“body開(kāi)頭是否為{”的判斷是則按錯(cuò)誤處理。這個(gè)判斷比HTTP狀態(tài)碼更可靠。我在上面五種方式的代碼里都加了這段復(fù)制到生產(chǎn)環(huán)境時(shí)千萬(wàn)別刪。5. 從“能出圖”到“能上線”二維碼生成的驗(yàn)證清單代碼寫完了接口也調(diào)通了最后一步是驗(yàn)證。很多項(xiàng)目死在“本地能生成一張碼”和“線上穩(wěn)定生成百萬(wàn)張碼”之間的空檔。我給自己定了一套驗(yàn)證清單每次新接生成碼需求都按這個(gè)走。驗(yàn)證第一件事是文件頭。PNG圖片的前8個(gè)字節(jié)是固定標(biāo)識(shí)0x89 0x50 0x4E 0x47。批量生成的二維碼可以做一個(gè)自動(dòng)化斷言// 回歸腳本片段驗(yàn)證接口返回的確實(shí)是PNG圖片 byte[] bytes wxQrCodeService.createDynamicCode(u_10001, pages/index/index, 430); assertTrue(bytes.length 0); // PNG魔數(shù)檢查能攔下把JSON錯(cuò)誤當(dāng)圖片寫入的翻車場(chǎng)景 assertTrue((bytes[0] 0xFF) 0x89); assertTrue((bytes[1] 0xFF) 0x50); assertTrue((bytes[2] 0xFF) 0x4E); assertTrue((bytes[3] 0xFF) 0x47);第二件事是參數(shù)邊界回歸批量化地去生成scene超長(zhǎng)、scene特殊字符、path不存在、check_path開(kāi)關(guān)切換、env_version三種取值、width極端值280和1280。不要只測(cè)正常鏈路這五個(gè)邊界能覆蓋我上面踩過(guò)的80%的坑。第三件事是真機(jī)掃碼驗(yàn)證。后端生成了碼不代表前端能正常跳轉(zhuǎn)。找兩臺(tái)不同系統(tǒng)的手機(jī)一臺(tái)掃碼進(jìn)正式版一臺(tái)掃碼進(jìn)開(kāi)發(fā)版確認(rèn)真實(shí)業(yè)務(wù)參數(shù)傳過(guò)去了。我遇到過(guò)一種情況碼生成了頁(yè)面也打開(kāi)了但scene里的下劃線在URL解析時(shí)被吃掉業(yè)務(wù)參數(shù)少了一位。這種問(wèn)題只有真機(jī)掃碼才能暴露。最后說(shuō)個(gè)習(xí)慣我會(huì)在代碼里給每個(gè)生成方法寫一個(gè)簡(jiǎn)潔的日志包含接口名、scene、page、寬度、耗時(shí)、返回大小。上線后通過(guò)日志統(tǒng)計(jì)消耗速度——尤其是getwxacode和createwxaqrcode這類有10萬(wàn)總量限制的接口提前預(yù)估用量比到時(shí)候被限制再補(bǔ)救舒服得多。我第一次做這個(gè)功能的時(shí)候就是沒(méi)做總量監(jiān)控活動(dòng)上線第三天碼就用完了整個(gè)團(tuán)隊(duì)手忙腳亂。后來(lái)每次做二維碼相關(guān)需求我第一件事就是確認(rèn)用的哪個(gè)接口、有沒(méi)有總量限制、日志有沒(méi)有記錄調(diào)用量。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美成人免费在线观看| 欧洲Au麻豆| 99re6国产精品99re| 亚洲性少妇| 青苹果影院男人的天堂| 欧美人妻精品一区二区| 国产强奸乱伦第1页| 精品亚洲黄色片 国产精品导航一区二区 | 亚洲色棕合| 3p国产色噜噜一区| 一区二区乱码福利| 日韩精品99999| A级在线视频| 91精品又粗又猛又爽| 丁香六月婷婷| 国产AV中文| 龙兴卡官方查询| 亚洲不卡AV在线| 粉嫩少妇自慰在线| 精品性爱无码在线播放| 人人操人人操草草| 夜草网站| 中文字幕乱亚洲美女精品一区| 婷婷五月色| 屁股久久久久久| 欧美97爱| 天天日少妇逼AV| 精品一区二区三区蜜桃臀赵总 | 久久老熟女| 天堂а√在线最新版在线| 大香蕉在线视频15| 国内毛片国产欧美拍| 中文高清一区二区的| 国产欧美成人精品| 日本欧美一区二区三区视频麻豆| 91久久国产综合精品| 色噜噜狠狠色综无码久久合欧美| 国产一级特黄大片处女| 成人久久精品| 奇米狠999| 老色69| 老司机香蕉久久久久| 久久久久久久九九九九九九| 精品一国2| 亚洲一曲日韩精品| 男人天堂婷婷五月天校园春色| 夜夜操老骚逼视频网站| 色综合一本| 920日本午夜免费| 欧美综合第一页| 欧美在线官网| 女人被男人桶爽视频网站| 亚洲色图尤物视频| 国产精品91ai| 亚洲视频一二区| 夜夜嗨TV| 91色女| 亚洲男人天堂AV| 久超超碰| 中文精品一区二去| 97 亚洲 日韩 欧美 在线| 日韩一级欧美一级国产一级台湾 | 国产丰满熟夫69mpp| 眼镜人妻101.com| 九九热免费国产视频婷婷伊人| av影院十区| 天天影视综合网欧美精品| 国产精品盗摄 偷窥盗摄| 91日日夜夜| 天天操夜夜操狠很操| 97视频新免费| 久久亚州高清| 欧日a| 成人性交午夜免费片| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 93人人操人人| 蜜臀久久99精品久久久久久| 亚洲天堂美臀在线| 艹我哪美一区无码| 免费啪啪一级视频| 加勒比无码毛片| 91美| 青草影院内射高潮| 九九热免费视频| 亚洲欧美一区二区网址| 天天干夜夜鈤| 国产精品一区二区后入| 国产精品91一样| 国模精品一区二区三区苹果色戒| 天天在线91| 亚洲91网。| 强奸乱亚洲| 国产精品视频自拍在线| 欧美色就是色| 久久精品操| 日韩无码视频黄色| 人妻少妇久久中文字幕一区二区 麻豆| 综合婷婷| 日韩激情中文字幕有码| 亚洲人妻色图| 久久九九精品一区二区| 亚洲男人天堂2016| 天天夜夜久久| 天堂日本亚洲欧美| 久久人人爽爽爽人久久久| 国产亚洲精品av一区| 日本一区二区亚洲综合| 欧美草草高清日韩视频| 九区国产| 我想要啊 啊 啊| 五月天久久综合网| julia中文字幕在线观看| 色婷婷成人| 户外裸露刺激视频第一区| 国产 亚洲 一二三四| 91综合站| 成人三级片一区二区三区视频| 91狠婷| 日韩成人精品| 干我久操| 亚洲AV噜噜狠狠网址蜜桃动漫| 亚洲玖玖爱| x97av| 青女在线| 亚州综合图片| 九九九九精品精| 在线人人人人人人精品超| 国产97综合| 嗯嗯啊啊日韩精品| 欧美激情精品久久久久久| 干妹子| 日韩欧美蜜桃精品久久中文字幕久久 | 欧美成熟性爱精品| 欧美色图电影| 亚洲高清视频在线免费观看| 岛国黄片网站| 啪啪综合网| 欧美天天弄| 亚洲国男人的天堂| 免费视频一二三区| 色97欧美| 开心五月深爱五月| 98一区二区精品| 日韩免费福利在线观看| 无遮挡一级毛片视频免费的| 精品国产乱码久久久| 成人精品一区二区91毛片不卡| 亚洲色天堂九9| 天天爽天天操| 亚洲日韩av一区二区三区百合| 一本精品日本在线视频精品| 人人妻人射| 强奸乱伦αv片| 深爱五月婷婷| 超碰久久中文| 亚洲一区二区中文字幕| 深夜国产一区二区三区在线看| 操逼片中文| 中文字幕五月婷婷免费| 偷拍精品一区二区三区| 久久久精品,3| 无码人妻精品一区二区中文| 亚洲AV成人无码一区二区三区在线观看 | 欧美色三级片91| 午夜啊啊啊| 男人天堂网手机版婷婷| 人人操人人精品影片| 99久久免费看精品国产一区| 亚洲欧美日韩二区视频| 男人的天堂2010| 亚洲欧美日韩电影网站一区| 国产美女自拍AV| 中文字幕丝袜人妻| 不卡六六在线91| 91老司机精品| 久久久久亚洲熟妇熟女| 多乙久久久久久| 大伊香蕉在线视频免费| 亚洲欧美情色| 午夜九九| 色香综合天天影视综合| 少妇天堂网络| 精品对白久久不卡| 91精品大奶人妻| 国产精品视频电影| 97精品97久久| 99re这里只有精品2| 亚洲资源网| 欧美 亚洲精品首页| 啊嗯嗯啊好大好爽| 丁香六月激情| 国桃视频产巨乳精品一区二区在线| 久久久久久久少妇| 女人18精品一区二区三区| 成 人 A V免费视频在线观看| 日韩熟女无码| 99久久com免费视频′| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 超碰成人人人爽人人爽| 婷婷中文网| 狠狠操一区二区| 99re99| 日本三级中国三级99人妇网站| 久久伊人大香蕉| 日本有码久久| 亚洲天堂久久| 综合操逼| 久久精品国产精品亚洲艾通辽熟妇 | 97亚洲精品超碰| 国产v片在线免费观看| 九九亚洲视频| 国产精品一区二区麻豆| 91丝袜视频在线观看| 国产一级内射无挡观看| 精品国产99| 亚洲最新Av| 丁香激情网| 亚洲国产精品无码AV久久| 美女黄站| 超碰久久性爱| 曰韩人妻中文字幕在线| 中日无幕一二三四区| 青青草字幕AV| 久久久国产av美女私房| 男人的天堂网页| 肏逼视频日本| 亚洲日韩美女中文字幕乱| 亚洲成人贴图| 亚洲精品欧洲色| 美女操逼福利视频| 欧美久久人体| www.激情| 97香蕉网| 婷婷丁香熟妇综合网| 国产精品国产| 欧美精品999| 亚洲男人综合网| 香蕉人人操tv| 性色综合网| av婷婷色网| 国产精品 久久久精品一牛| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 天堂av2019| 亚洲无线观看久久| 久久精品72| 久久性爱视频免费看| 热久久99999| 中文字幕交换人妻| 亚洲国产精品成人久久蜜臀| 91久久国产综合精品| 福利视频一区二区微拍| 夜夜夜夜久久久久| 五月天伊人| AV不卡在线| 国产精品白丝AV| 小少妇| 日韩大香蕉AV影片| 爱做久久久久久| 人人操人人色网| 免费看污网址| 欧美色图天堂在线| 天啪| 污污污8888| 91在线秘 男同| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 伊人国产av| 日韩欧美成人午夜福利| 性色高清..……| 亚洲高清无码免费观看视频| 精品九九九九九| 熟妇国产免费一区| 国产欧美一区二区| 欧美精品1区2区3区| 欧美 亚洲精品首页| www.91欧美| 色色无码| 呦呦影院| 老司机午夜精品福利视频一区二区| 三级特黄60分钟播放| 91丝袜美女| 日韩免费看黄片| 欧美日韩青操| 国产动漫操逼视频| 中日韩一区二区三区欧美| 中文久久96| 91色图片| 蜜臀99久久精品久久久久| 成年人一级黄色毛片大全在线观看| 久久综合av| 少妇一区二区三区| 日本免费不卡二区| 成熟熟女国产精品一区二区| 亚洲熟女一区| 婷婷色一区| 欧美福利视频啊啊啊啊| 欧美AB在线| 大逼色网站| 婷色五月| 九九热九九热| 人妻插插人妻人| JIZZJIZZ亚洲女人被躁| julia ann久久| 福利伊人玖玖国产| 欧美不卡在线一区二区| 啊啊啊啊网站| 亚洲色棕合| 久污| 欧美青青草视频| 91久久久老司机| 欧美精品双插| 91性生活久久久| 日韩精品三区四区| 日韩精品熟妇| 免费夜夜爱黄色视频毛片| 亚洲国产一区二区三区四区国产| 欧美专区日本专区| 久久久免费的精品| 成人激情无码在线视频| 国产精品麻豆视频网站| 97人人夜夜精品视频| 色爱三区| 精品国产91久久久久久一区黄无| 日韩性爱小视频| 色阁阁AV综合网| 国产资源中文字幕在线| 精品夜夜澡人妻无码| 天天视频综合在线观看视频| 99视频自拍| 99久热| 人妻少妇色综合| 欧美日韩性爱电影在线| 操操逼视频| 精品美女少妇一区二区| 超碰97COm中文| 日本精品一区二区三区四区的功能| 国产AV人人夜夜澡人人爽麻豆| 国产性爱在线视频一区二区| 亚洲精品中文字幕一区在线视频 | 揉揉揉夜夜| 久久黄色性爱视频| 久久9免费视频| 91色综合激情| 中文日韩欧美熟| 人人摸人人叼| 99热久| 中文字幕日韩人妻视频| AV色图| 人妻嗯啊啊在线播放| 99视频自拍| 日本人妻中文字幕精品| 日韩欧美日韩| 欧美热图99| 久草线上视频免费看| 欧美97色| 久草视频观看视频在线| 中文字幕五区| 熟女精品一区二区三区| 综合自拍| 美女大乳久久久久久久女人18| 九月丁香婷婷| 国产97在线播放| 欧美综合第一| 91欧美偷拍| 97内射偷拍| 欧美精品久久| 国产树林里野战在线看| 欧美91在线| 操操吧亚洲乱伦视频| 99久在线精品99re8热| 精品99999久久久久久| 色九九九九九九| 成人羞羞视频国产| 亚洲成av人片色午夜乱码| 国产亚卅97| 亚洲欧美激情小说| 国产成人精品无码久久| 久久偷拍人| 欧美综合另类| 日本在线不卡一二区| 98精品国产乱码久久久久久| 激情色图| 综合一区中亚洲国产成人综合精品 | 欧美激情激情xxxx欧美专区| 亚洲精品精品一区二区| 日韩中文字幕宗合在线| 影音先锋乱伦资源| 啊啊啊好舒服好爽啊啊啊视频| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 欧美日韩色| 久久人人舔人人爽舔人人av片| 牛牛aV| 婷婷丁香成人| 精品少妇人妻一区二区三区| 国产第25页在线观看| 91中文精品日韩欧美在线| 日韩综合97P| 欧美人妻少妇| 欧美日韩国产另类综合| 中文字日本乱码| 欧美日韩97| 色综合色色| 国产激情在线| 一二三四免费视频| 女性喷水高潮在线观看| 亚洲最大黄网| 色噜噜日韩精品| 成人福利视频网| 91精产一区二区三区| 国产www色在线观看| 欧美乱妇狂野欧美在线视频| 国产亲戚伦亲在线| 天天综合网合集91| 婷婷激情四射| 密臀视频三区免费网站| 一牛影视成人片免费| 精吧天堂| 亚洲色图尤物视频| 超碰69| 网页导航五月天免费一二三区| 久久25| 肏逼视频日本| 乱人伦 国语对白:视频直接看| 金典av| 无码操逼网| 人妻无一区二区三区| 日韩精品在线视频,日韩精品……| 国产精品久久久久久久久久二区三区| 伊人影院中文字幕| 人妻少妇久久久| 视频在线观看一二三区| 欧美狠狠操| 美女刺激久久国产欧美| 淫骚熟女一区二区三区| 91日韩国产欧美亚洲另类精盘州至城都| 亚av顶级裸体一区二区三区四区五区 | 国产成人精品日本亚洲语言| 天综合网| 亚洲中文字幕熟女少妇一区二区| 欧美性,亚州色| 亚洲诱惑天堂 | 欧美综合色站| 国产丁香精品露脸视频| 18禁无码永久免费无限制| 欧美激情性久久久久久| 国产精品91ai| 国产女同视频在线播放| 熟妇艹鸡八| 精品免费一区| 国产天天骚| 性欧美另类高清| 欧美熟妇乱码在线一区| 99.色网| 91搡老女人老妇女老熟女歌词翻译| 精品午夜福利导航| 亚洲男人天堂网久久| 蜜臀99久久精品久久久懂爱| 国产超碰国产97| 97 九色| 亚欧性爱ab| 就去色综合| www.色婷婷| 男人天堂东京热| 成人婷婷丁香| 日韩无码视频黄色| 色成人Www精品永久观看| 麻豆人妻偷人精品无码视频| 91久久午夜无码鲁丝片久久人妻| 南澳成人一级片在线播放| 日韩av乱伦| 欧美组图日韩亚洲中文字幕| 99精品成人免费看| 熟女人妻一区二区三区| 人妻喷水| 一区| 日韩99神马视频播放| 一类无码操逼视频| 高清国产精品福利网站| 看看日B真人视频| 欧美日不卡| 色眯眯射| 91黑人无码激情在线| 免费αV在线视频| 九九九九精| 啊啊啊啊啊好舒服视频| 麻豆精品久久久久久久| 97人人模人人爽人人| 诱惑人妻欧美一区在线播放| 亚州操逼网| 久久久久久69国产一区二区| 亚洲影院无码在线| JuliaAnn丝袜熟女系列| 欧美综合自拍亚洲综合图| 超碰性爱97| 久久性爱城| 久久久久久电影| 综合伊人网12色| 九九九九免费高| 中文字幕精品区先锋资源| 亚洲成人精品在线一区| 欧美成人A√在线一区二区| 亚洲欧美日韩不卡人妻| 蜜臀Av一区二区三区| 欧美日韩国产色五月综合在线| 蜜桃久久综合视频| 亚洲成人av电影在线| 综合影院永久入口国产| av网站国产主播在线| 成人精品无码| 中文字幕AV乱伦| 逼逼逼逼操操操操操操操操操午夜剧场| 国产AV天美| 日韩精品三区四区| AV一二区| 乱伦3P视频| 日韩少妇无码| 少妇无码av专区线| 亚洲欧美日韩中文播放| 欧美色www亚洲国产阿娇要播| 成人片视频| 色悠久久久av| 91情色在线| 国产色图乱伦| 欧美,日韩综合久久| 国产97色在线| 国产精品乱人伊人网| 美国久久一二三四| 欧美偷| 2017亚洲天堂| 人人摸人人叼| 日本超碰在线国产一区| 少妇内射www在线观看视频| 熟妇高潮精品一区二区三区下载| 91在线限制级| 九九毛片这里只有精品| 欧美在线 亚洲| PMv在线观看| 麻豆国产成人精品| 东北黄色电影| 九九九九精品在线| 免费精品中文字幕| 亚洲精品日韩国产欧美| 国产成人一级av88| 99国产精品在线观看| 亚洲日韩美女丝袜美腿人妻视频| 久久久人妻| 国产一级高清免费观看| 黄色大片视频在线免费看| 国产精品一区二区校花| 欧美少妇高潮久久91| 高潮的A片激情扒开一区| 麻豆天美电影一区二区| 九九碰九九爱97超| 淫色网综合| 国产精品久久久久久片| 图色综合网| 丰满美女一级毛片在线播放| 性站| 欧美激情性爱视频网站| 亚洲国成人情色好看电影| 精品久| 欧美色偷拍| 百度百度日本操逼| 婷婷激情五月天小说网| 久久久九| 九九九久千久久激情蜜桃在线看 | 97久久国产亚洲精品超碰热| 夜夜影视四色| 精品免费囯产一区二区三区| 日韩素人无码一区二区三区三州| 欧美人人天天网| 凹凸久久人人| 超碰色大香蕉| 婷婷五月花| 国产美女销魂在线观看不卡| 啊啊啊 在线| 国产免费大片| 九九久久一区二区伦理| 天天噜| 91free福利| 欧美Aⅴ| 精品传媒在线一区| 激情看片网站| 性爱乱伦视频免费| 91久久久久久久久18| 国产伦精品免编号公布| www.色吧5.com| 青木玲在线不卡| 蜜桃久久综合视频| 老熟妇91| 亚洲风情综合网| 97超级久久强资源| 99久久综合网| 色噜噜人妻丝袜a∨先锋影| 69国产对白刺激| 安微少妇操BBB| 亚洲AV无码久久精品蜜桃小说| 久9精品| 后入福利视频| 嗯嗯啊好大| 久操 高清| 欧美日韩222| 国产精品一二三免费网站| 人人看人人插| 97在线观看免费| 超碰午夜| 99热18| 99这里都是精品| 色五月激情综合网| 欧美在线干| 日日碰狠狠添天天爽超| 日韩三级av片| 日韩av熟女一区二区三区成人| a片 xxxx受爽视频| 日本媚薬中文字幕在线| 女人爽到高潮潮喷18禁网站| 色情成人五月天| 精品久久青青草| 婷婷色香| 欧洲一区二区三区四区在线观看| 九九拍拍精品视频在线播放| 美女刺激久久国产欧美| 午夜福利在线视频1000| 天天干夜夜操一区二区| 天天上日日上日韩精品| 九九探花视频在线观看| 国产成人+综合亚洲+天堂| 日韩av乱伦| 超碰79人人乐| 五月天欧美色图| 日本99一区二区| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 超碰免费人妻人人| 一区二区三区 日韩欧美| 国产原创剧情在线丝袜 | 中文字幕久久精视频久久大全| 亚洲av影院在线观看| 亚洲欧洲国产综合av| www.久久制服糖| 操逼日批| 久操B网| 一区二区激情国产熟女| 国产传媒日本欧美专区| 怡红院亚洲怡春院av| 亚洲人91| 蜜乳视频网站| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 久久久久ab| 中文字幕一区二区无码成人 | 被操高清无码视频| 国产伦乱91| 另类专区加勒比| 国产内射爽爽大片| 久久亚洲影院一区二区| 久久亚洲日韩国产欧| 午夜乱轮操逼视频免费看| 三级三级三级日本99| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 亚洲午夜av| 久久黄色视频一区二区三区 | 亚洲91射| 欧美久久伊人| 91色艳| 狼人综合婷婷激情四射| 清纯唯美综合亚洲| 性91| 女人妻一区| 亚洲男人久久综合天堂| 美女主播色欲91抠b在线播放| 神马久久久久久久久久久久| 免费观看网黄| 欧美躁死她一区二区| KK色在线影院| 亚洲国产成人精品无码专区| 中文乱码字幕观看视频| 久操九九九九| 中文色综合| 久草精品一区 | 东京太热男人的天堂久久久| 亚洲精品国产精品成人| 大香蕉一人在线| 97人人干人人操| 老熟女91| 亚洲色资源| 欧美强奸一区二区诱惑| 麻豆精品.欧美精品.日韩精品.| 一级岛国大片| 97精品国产97久久久| 欧美呦呦性爱| 亚洲天堂少妇| 国产aⅴ无码片毛片一级网站| 超碰超碰欧美| 国产亚洲性生活视频播放| 鸥美插入视频| av优播| 一级A啪啪啪啪| 国产精品久久久啊| 在线观看免费视频国产| 青青草影视蜜久久| 欧美精品久久| 91国产丝袜足交精品视频| 女人高潮抽搐喷水视频网站| 中文字幕视频2区| 手机看av网站在线看| 国产精品夜夜夜| 久久6热视频免费观看| 免费精品国偷自产在线在线| 免费观看一区| 美女诱惑久久| 麻豆视频一区二区| 99re这里只有精品2| 亚洲AV成人无码一区二区三区在线观看| 伊人丝袜美腿高跟在线观看高清| 天天草夜夜草高潮片| 色九九九九| 日韩传媒在线| 久久综合av| 日本精品九九九| 久久精品人妻一区二区三区| 国产中午字一暮区| 精品一区99999| av日韩中文字幕| 国产搭汕a级片| 日韩猛交| 日韩免费福利在线观看| 亚洲密乳AV| 性色av网站| 日本欧美中文字幕| 色综合1991| 亚洲少妇免费视频\| 成人无遮挡毛片免费看| 啊啊啊不要好爽日韩无码一区| 另类 日韩 熟女| 日本在线不卡v二区| 久久97| 久偷拍| 天天插天天射| 囯产乱伦一区二区三女| 蜜臀av中字字幕网站| 91国精产品| 国产精品96| 国产精品爽爽v| 大香网伊人久久综合| 久久久穴999| 好爽视频在线观看视频| 国产一级不卡在线观看| 91狠狠综合| 留下AⅤ黄色片| 嫩草 人人网精品| 日日夜夜狠狠| 刺激精品视频| 深喉吞精| 久久99亚洲精品久久99果| 78久久久| 欧美日本成人一区二区| 亚洲AV无码国产成人| 密臀AV在线| 肉动漫无遮挡h在线观看| 日本123区操B视频| 亚精品无码毛片一区二区三区| 韩国嫰模上门援交视频| 97在线日韩中文字幕| 中文字幕日韩专区精品系列| julia高潮后不停追击中出| 国产精品国产| 欧美精品激情| 99色综合| 日本操BAV| 又摸又舔在线观看网站| 熟妇色99| 人人扣人人操| 日韩成人小视频| 澳门特级毛片免费观看| 99最新日韩偷拍视频| 色哟哟av网址| 福利社区午夜一区二区| 超碰98综合网| 日韩不卡毛片Av免费高清| 青青草华人在线欧美在线| 尤物国产一区在线观看| 久久春色| 亚洲1区2区三区高清中文字幕| 国产精品原创巨作?v网站| 美女尤物福利视频| 999久久久免费精品国产牛牛| 亚洲 日本 国产 综合| 91成人在线| 国产美女高潮叫床视频| aa片毛片| 思思热免费视频观看| 99rre在线精品99re8| 久久免费中文字幕在线观看| 亚洲日韩视频二区| 色激情五月天| 欧美不卡五十路| 操碰97| 中文AV制服乱伦| 国产亚洲在线观看| 亚洲欧美日韩免费观看| 岛国不卡超碰护士AV在线播放| 精品无码一区二区三区| 亚洲精品白丝| 一区二区三区四区姦女| 在线国产探花| 久草电影网| 久久av网| 精品人妻一区二区三区-国产| 国产又粗又长的视频| 久久9精品视频| 9 9精品一区二区三区| 亚洲综合另类小说色区亚洲成av人片在www| 最新国产精品久久精品| 国产无码三级视频在线观看| 午夜噜噜噜| 天堂亚洲精品久久老牛| 亚洲视频,小说| 91大神电影天堂| 性爱动态120秒| 在线观看日韩av不卡| 韩日男人的天堂| 国产成人+综合亚洲+天堂| 97精品全部| 超碰这里有精品| 学生妹天天看| 色色色热| 亚洲成人精品在线一区| 伊人久久综合影院精品久久久| 亚洲Av噜噜一区二区三区妖精| 亚洲一区二区中文字幕| 国产三区免费在线观看| 乱伦av麻豆| 婷婷九月国产| 东京热大香焦| 伊人骚琪琪亚洲天堂网站| 色汉综合| 操逼天美3区| 色香欲综合| 欧美狠狠| 国产在线激情视频| 密乳AV免费观看| 欧美性爱一级操| AV中文在线| 中文字幕高清20页视频| 久久爽爽精品| 少妇人妻在线| 日韩熟女操逼| 国产97亚洲| 日韩 国产 欧美自拍| 黄片免费看黄片免费看| a久久| 麻豆精品A片免费观看| 日本黄色天堂| 欧美 亚洲 在线| 97久久超碰日韩精品| 激情五月综合开心五月| 97欧美性爱| 操逼国产免费| 国产三级资源在线观看| 天美传媒一二三区永久网站| 日韩欧美天天爽爽爽天天爽爽| 成人五月天色网| 久久中出| 久久精品中文字幕无码l| 先锋精品av色鲁| 青青草成人视频在线观看二区| 大香蕉伊人在线成人AV在线观看 | 可以免费观看的av| 91日日夜夜| 嗯嗯啊啊啊好爽| 南澳成人一级片在线播放| 欧美黄色大片在线观看 | 在线观看啊啊啊啊啊| 国语av狠狠色丁香婷婷综合激情| 欧美欧美啪啪视频| 欧美国产日韩清纯唯美| 99国产精品人妻人伦| 天天日天天操心| 超碰欧美97资源| 综合自拍| 久久黄黄| 人人噜夜夜操| 人摸人人操人| 久久久久国产精品人妻aⅴ天堂| 91狠狠狠| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 大学生美女口爆| 人人喜人人妻| 91成人高清在线观看| 97视频620| 亚洲精品国产熟女久久久久久| 十八禁成人网站在线观看| 婷婷久草| 国产精品交换一区二区| 欧美一区二区成人一卡| 亚洲免费在线探花| 亚洲第一二区另类图| 操逼逼福利视频| 亚洲人综合| 黑丝少妇在线观看| 国产高清自拍视频| 中 文字幕一区二区三四 五 区日 日 骚 | 国产大学生口爆吞精合集| 91精品操美女| 蜜臀亚洲中文| av资源在线播放天堂| 亚洲国产美女久久久久| 九月婷婷综合| 日韩一级性爱无码| 91熟女熟妇视频网站| 久9re热视频这里只有精品| 国产久久久| 91精品导航| 91 丝袜在线播放| 国产精品ww久久| 强奸抽插av| 精品国产一区二区三区香蕉欧美| 中文字幕精品亚洲熟女| 99最新日韩偷拍视频| 天天综合精品| 伊人网高清| 少妇人妻激情四射| 毛片17S| 色一射色一射| 大香蕉综合在线| 99热99色| 玖玖资源综合在线视频| 国产一进一出视频网站| 成人一二| 94色色电影网| 天操天操夜操夜月操月年年操操| 亚洲啪啪视频一区二区| 国内精品a| 日本一区视频在线观看| 欧亚性爱在线视频| A级国产欧美激情在线| 国产精品高清2021在线| 亚洲无码精品AV久久久| 三级色影综合网| 91n美女视频| 最新一二三区视频| 久久久久骚| 国内毛片婷婷六月色| 国产综合操逼高清| 无码人妻精品一区二区中文 | 日韩超碰97| 俞拍久久国应视频| 久久这里只| 高清无码久操视频| 少妇一区二区三区精选| 日韩三A大片在线观看| 综合国产影视三级| 丁香7月婷婷| 美欧色综合| 欧美传媒| 人人操人人大香蕉| 色色五月婷| 美日韩一卡二卡三卡免费人妻精品| 亚洲欧美中文一区二区三| 日韩不卡毛片Av免费高清| 日日夜夜天天| 久操在97| 青女偷拍网| av毛片aaaaa免费看| 少妇专区一二三四五| 激情婷婷丁香网| 91AV入口| 亚洲人妻日日日| 新亚洲无码| 黄色小视频日本txt| 97玖玖超碰| 九九热av| 99精品成人免费看| 韩国一级婬片A片无码天美 | 五月丁香啪啪啪| 五月天偷拍| 在线小视频| 免费观看性欧美一级| 99e久久国产精品| 婷婷在线播放| 亚洲精品久久久久久| 亚洲蜜乳av| 激情五月天婷婷| 亚欧美综合| 3d成人精品一区二区| 亚拍在线| 色乱二区| 亚洲美女黄色| 天天做日日做天天欢。| 99热18这里只有精品| 久久久精品成人国产| 欧美中文狠| 嗯啊抽插大香蕉网页| 2025亚洲男人天堂| 中文字幕人成乱码熟女香港| 大吊色| 26uuu国产成人综合| 国产欧洲精品亚洲午夜拍精品| 亚洲黄色电影| 婷婷久久综合久| 97色碰| 97超碰亚洲| 国产精品免费视频人成| 哈哈操电影| 亚洲第一页欧美| 美女视频尤物网在线看| 亚洲。天堂。日本在线观看| 婷婷综合五月天| 国内精品嫩模A∨私拍小视频| 91九九| 久久久久久久久久久免费精品| a在线观看| 日产操逼| 欧美色图在线视频少妇| 一级毛片电影免费看| 丁香六月婷婷| 岛国激情视频在线观看| 久久久久久久久久8888| 日韩一级欧美一级国产一级台湾| 日韩综合97P| 国产欧美第五页| 蜜乳av一区二区| 色网色网色网色网色网色| 韩国国产欧美情侣视频在线| 激情色色| 色呦呦呦在线观看视频| 久久久精品中文字幕爱豆| 九七超碰人人乐| 人人搡人人肉久久精品| 老鸭窝亚洲毛片| 欧美综合国产精品久久丁香| 久久婷婷一区| 欧美天堂超碰97| 伊人色综合超碰| 亚洲日产专区| 一区二区激情国产熟女| 久久婷婷综合国际产色怕| 新怡红院| 超碰97极品9| 91天天爽| 日本二区不卡| 美女上床网站| 97久久超碰国产精品| 秋霞鲁丝午夜无码一区二区三| 日韩乱插| 青娱乐淫乱1314| 91丨人妻丨国产丨丝袜| 欧美性色网| 激情小说亚洲| 欧美激情视频在线一区| 日本人妻伦在线中文字幕| 久久国产成人精品国产成人亚洲 | 大屁股熟女一区二区三区| 激情五月综合| 久久女人一区二区三区| 精品久久久久9999| 欧美极品色| 精品在线蜜臀| 中文字幕一区二区韩| 九九在线视频| 日本不卡二三区| 久九干| 日韩pv中文| 精品国产乱码久久久久A| 97超久碰| 加勒比aⅴ| 天天爽夜夜操| 性性久久| 97亚洲综合在线| 黄骗免费网站| 国产精品亚洲美女久久久久| 国产AV无码AV| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 天天看精品动漫视频一区| 八戒无码国产午夜福利| 五月婷婷六月天| 日韩超碰精品综合| 熟妇女伦乱视频| 精品人妻1区| 亚洲国产av中文字幕久久| 欧美日韩不卡传媒| 久九9精品| 国产久久成人| 69国产对白刺激| 亚洲中文字幕三级在线| 亚洲……91| 色97欧美| 久久久久免费看少妇A片特黄| 日本欧美韩国国产在线| 青青操青娱乐| 亚春色色| 啊啊啊啊一区| 色色九区| 色99视频| 欧美一二三| 国产一区二区三区不卡手机在线| 人人摸人人干| 一本久道久久综合狠狠爱一密臀精| 亚洲综合91| 78综合网| 97国产精品一区| 亚洲男人bt天堂| 天堂v无码免费视频| 日本超碰在线国产一区| 热久久精品| 久久东京热久久| 激情啪啪拍91| 涩亚洲欧洲| 亚洲综合网电影91| 日本性感人妻91| 97jingpin| 五月丁香啪啪网| 精品人妻中文字幕高清| 人人妻人人色| 精品-91人妻子系列| 欧美成人一级麻豆| 国产第二页| 亚洲图片 91| 无码逼| 国产欧美在线观看免费观看| 欧洲精品欧洲精品| 日韩一级片在线看| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 久久国模av| 午夜福利一区二区影院| 91N综合网在线| 欧美亚洲国产91在线| 一区超碰一区| 亚洲va有码在线天堂| 久久女人| 97热视频在线观看| 超碰在线观看av不卡| 91 丝袜在线播放| 国产精品熟妇一区二区三| 婷婷亚洲天堂| 日韩国产乱子伦App| 激情综合 婷婷五月 红杏 | 精品午夜福利国产一区二区在线观看| 九九性视频| 人妻精品视频一区二区| 日韩性爱小视频| 91亚州| 精品午夜福利| 99re6在线视频播放免费精品| 啪啪综合网| 亚洲乱码国产乱码精网站| 一本大道久| 蜜臀久久99精品久久久| 后入精品| 天天干夜夜操一区二区| 97久久综合网| 91蜜臀人妻中文字幕在线| 青青草影视蜜久久| 国产一级片| 久操精品网| 久久午夜伦| 乱伦熟女专区| 日韩人人精品| 色色97爱| 亚州色国| 日韩精品电影| 日本免费一区二区不卡|