亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

Java 生成微信小程序二維碼:5 種 HTTP 調用方式與避坑指南

Java 生成微信小程序二維碼:5 種 HTTP 調用方式與避坑指南 簡介面向Java后端開發(fā)者的小程序二維碼生成示例工程基于微信官方服務端能力實現(xiàn)覆蓋裂變分享、渠道推廣等常見營銷場景。針對每個賬號生成專屬邀請二維碼的訴求系統(tǒng)梳理了5種實現(xiàn)方式并設計前端-后端API-微信API的安全調用鏈路規(guī)避secret與token泄露風險核心使用永久有效、無數(shù)量限制的getUnlimitedQRCode接口。資源包共69個文件壓縮后約53KB按Maven標準拆分主代碼、測試與資源配置包括java源碼、xml配置、properties參數(shù)文件及少量jar依賴可直接導入IDE運行驗證。已有2647人學習下載整體目錄結構清晰便于對照不同實現(xiàn)方式在參數(shù)構造、異常處理、返回碼校驗上的差異理解各方案的適用邊界源碼中保留了完整應用配置與接口調用骨架替換appid等參數(shù)即可快速集成到實際裂變活動中對中小團隊及個人開發(fā)者均很友好能有效降低二次開發(fā)與聯(lián)調成本。1. 生成微信小程序二維碼本質上是一次帶 access_token 的 HTTP 請求做 Java 后端久了你會發(fā)現(xiàn)“生成微信小程序二維碼”這件事說穿了就是一次帶 access_token 的 HTTP 請求。運營要的是每個用戶一張專屬碼微信官方不會提供可視化按鈕能靠的只有那幾個接口和一把 HTTP 客戶端。很多人第一反應是找封裝好的 SDK但 SDK 封裝一多token 過期、接口報錯反而更難排查。這篇筆記不綁定具體業(yè)務框架從 JDK 原生 HttpURLConnection 到常見的 HttpClient、OkHttp、RestTemplate、Hutool整理 5 種可落地的實現(xiàn)方式把接口選型、參數(shù)設置和踩過的坑一起說清楚。后面涉及的代碼都保持同一個方法簽名方便你直接抄進自己的 Service 里。2. 微信小程序二維碼接口與 AccessToken先選對接口再動手2.1 三個官方接口的差異getwxacodeunlimit 才是主力微信官方一共給了三個生成二維碼/小程序碼的接口名字接近但限制天差地別。我見過不少新人把三個接口混著用照著 createwxaqrcode 寫了一版上線第一天就撞數(shù)量限制。所以動手寫代碼前務必先確認你用的是哪個接口。第一個是 getwxacodeunlimit全稱“獲取不限制數(shù)量的小程序碼”。它支持通過 scene 傳入自定義參數(shù)生成數(shù)量不限制是做帶參數(shù)推廣的首選。page 參數(shù)可以指向已發(fā)布的小程序頁面也能配合 env_version 參數(shù)在開發(fā)版、體驗版里調試。缺點是 scene 有長度和字符限制最長 32 個可見字符只支持數(shù)字、大小寫英文和!#$()*,/:;?-._~這些特殊字符中文、空格、換行都不行。這個限制會在后面避坑部分重點展開。第二個是 getwxacode獲取小程序碼但不支持 scene 參數(shù)直接用 page 作為路徑。它生成的也是方形帶 logo 的小程序碼數(shù)量有限制適合某些固定頁面的低頻場景。第三個是 createwxaqrcode獲取小程序二維碼返回的是傳統(tǒng)二維碼樣式掃碼后跳轉指定頁面同樣有限制。這里還有一個小誤區(qū)用戶嘴上說“要二維碼”實際要的往往是掃完能直接打開小程序的碼。getwxacodeunlimit 返回的是小程序碼為了讓用戶識別建議在需求階段就確認清楚。選型上我的習慣是只要業(yè)務里需要按用戶或按活動生成不同參數(shù)就統(tǒng)一用 getwxacodeunlimit。它雖然沒有傳統(tǒng)二維碼樣式但把參數(shù)放 scene后端拿到場景值自己解析是擴展性和穩(wěn)定性最好的組合。下面是三接口對比建議直接收藏接口是否支持 scene數(shù)量限制返回樣式推薦場景getwxacodeunlimit支持不限小程序碼帶參推廣、按用戶生成getwxacode不支持有限小程序碼固定頁面、低頻createwxaqrcode不支持有限傳統(tǒng)二維碼需要舊版樣式接口調用頻率也得留意。getwxacode 和 createwxaqrcode 有累計數(shù)量限制而 getwxacodeunlimit 雖然不限總量但接口本身的 QPS 仍受官方限制不建議在循環(huán)里批量生成幾百張。如果業(yè)務要預生成大量碼需要分批執(zhí)行控制每秒最多幾次請求。2.2 先用 curl 走通鏈路再寫 Java 封裝在寫 Java 代碼之前強烈建議先用 curl 把鏈路跑通。這樣能排掉大部分網(wǎng)絡和參數(shù)問題也能對返回結果有一個直觀認識。第一步是獲取 access_token微信接口文檔要求使用你的小程序 appid 和 secretGET 請求就行curl -s https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credentialappidAPPIDsecretAPPSECRET返回 JSON 包含 access_token 與 expires_inexpires_in 固定 7200 秒。這里有個容易忽略的點access_token 是 appid 維度的全局唯一值頻繁獲取會互相擠掉而且舊 token 失效前新 token 并不會立刻生效所以生產環(huán)境必須做緩存。后面第 5 章會專門講。拿到 access_token 后再調生成接口這一步就是 POST JSONscene、page、width 是必填參數(shù)curl -s https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_tokenTOKEN \ -H Content-Type: application/json; charsetutf-8 \ -d {scene:uid_1001,page:pages/index/index,width:430} \ -o wxacode.png如果生成的 wxacode.png 能正常打開說明參數(shù)鏈路沒問題接下來換成 Java 只是換了 HTTP 客戶端。這里要強調微信接口雖然文檔里叫 HTTP 請求實際全部走 HTTPSJava 的 HTTP 請求庫會幫我們處理 SSL 握手不需要自己寫證書邏輯。curl 跑通之后建議再用file wxacode.png看一眼文件類型確認是 PNG 圖片。如果返回的是 JSON大概率是參數(shù)錯誤或者 token 失效。常見錯誤碼可以先記住40001 表示 access_token 無效41030 表示 page 路徑無效41031 表示 scene 無效。這些錯誤碼在 Java 里要按照 errcode 落到日志而不是只打印 HTTP 狀態(tài)碼。第 3 章的代碼都假設你已經(jīng)有有效 access_token并把生成方法統(tǒng)一為byte[] createWxACode(String accessToken, String scene, String page, int width)這樣每種客戶端只需要關注請求體、響應體和異常處理。3. 5 種 Java HTTP 調用方式從原生到第三方工具庫下面的代碼示例都聚焦在“生成微信小程序碼”這一步方法簽名統(tǒng)一為byte[] createWxACode(String accessToken, String scene, String page, int width)。入?yún)⒁呀?jīng)拿到了 access_token所以代碼塊里不會再出現(xiàn)獲取 token 的邏輯。每種方式的依賴、超時配置、異常處理各不一樣我會在每個小節(jié)后面說明。3.1 方式一JDK 原生 HttpURLConnection這是零依賴的實現(xiàn)適合不引入第三方庫的項目。JDK 8 的用戶需要把readAllBytes()換成手動讀取流下面代碼以 JDK 9 為例邏輯大家都能看明白。public byte[] createWxACode(String accessToken, String scene, String page, int width) throws IOException { // 把 access_token 拼在 query 參數(shù)里這是微信接口的要求 URL url new URL(https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token accessToken); HttpURLConnection conn (HttpURLConnection) url.openConnection(); conn.setRequestMethod(POST); conn.setDoOutput(true); conn.setConnectTimeout(3000); // 連接超時單位毫秒 conn.setReadTimeout(5000); // 讀超時圖片生成一般很快5000 足夠 conn.setRequestProperty(Content-Type, application/json; charsetutf-8); // 拼 JSON 請求體這里沒有做 JSON 轉義實際生產建議用 JSON 庫 String body String.format({\scene\:\%s\,\page\:\%s\,\width\:%d}, scene, page, width); try (OutputStream os conn.getOutputStream()) { os.write(body.getBytes(StandardCharsets.UTF_8)); } int responseCode conn.getResponseCode(); if (responseCode 200) { // 微信返回的是圖片二進制流不是 JSON try (InputStream is conn.getInputStream()) { return is.readAllBytes(); } } // 非 200 時錯誤流里一般是 JSON 錯誤碼讀出來方便排查 try (InputStream es conn.getErrorStream()) { String errorBody new String(es.readAllBytes(), StandardCharsets.UTF_8); throw new IOException(微信接口返回失敗HTTP responseCode , body errorBody); } }邏輯說明HttpURLConnection 打開連接后通過setDoOutput(true)聲明要寫請求體然后用getOutputStream()寫入 JSON 字符串。微信接口成功時返回圖片二進制失敗時返回 JSON 錯誤信息需要分別處理。參數(shù)說明connectTimeout控制 TCP 連接建立時間readTimeout控制等待響應的最長時間如果你用的網(wǎng)絡環(huán)境較差可以把 5000 調到 8000但沒必要更長接口通常會秒回。3.2 方式二Apache HttpClient 5Apache HttpClient 是老牌 HTTP 客戶端適合項目里已經(jīng)用了 httpclient 依賴的團隊。HttpClient 5 的 API 比 4.x 更清晰連接池管理也更成熟。public byte[] createWxACode(String accessToken, String scene, String page, int width) throws Exception { // 默認會使用連接池每次調用結束后要 close否則連接無法釋放 try (CloseableHttpClient client HttpClients.createDefault()) { HttpPost post new HttpPost(https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token accessToken); post.setHeader(Content-Type, application/json; charsetutf-8); String json String.format({\scene\:\%s\,\page\:\%s\,\width\:%d}, scene, page, width); post.setEntity(new StringEntity(json, ContentType.APPLICATION_JSON)); try (CloseableHttpResponse resp client.execute(post)) { byte[] bytes EntityUtils.toByteArray(resp.getEntity()); int status resp.getStatusLine().getStatusCode(); if (status 200) { return bytes; } throw new IOException(微信接口返回失敗HTTP status , body new String(bytes, StandardCharsets.UTF_8)); } } }這里用try-with-resources確保 HttpClient 和響應都關閉。EntityUtils.toByteArray會把整個響應讀進內存微信返回的圖片一般在幾十到幾百 KB不會有內存壓力。如果想要更穩(wěn)健可以通過RequestConfig設置連接超時和讀取超時但示例從簡生產環(huán)境要補上。對于并發(fā)較高的服務用同一個 HttpClient 實例比每次 new 一個更好連接池復用是 Apache HttpClient 的核心優(yōu)勢。3.3 方式三OkHttp 4OkHttp 是 Android 和 Java 后端都很常用的 HTTP 客戶端API 簡潔內部對連接復用和超時處理做了大量優(yōu)化。項目里如果用 OkHttp推薦優(yōu)先用它的 Builder 配置。public byte[] createWxACode(String accessToken, String scene, String page, int width) throws IOException { OkHttpClient client new OkHttpClient.Builder() .connectTimeout(3, TimeUnit.SECONDS) .readTimeout(5, TimeUnit.SECONDS) .build(); String url https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token accessToken; String json String.format({\scene\:\%s\,\page\:\%s\,\width\:%d}, scene, page, width); Request request new Request.Builder() .url(url) .post(RequestBody.create(json, MediaType.parse(application/json; charsetutf-8))) .build(); try (Response response client.newCall(request).execute()) { if (!response.isSuccessful()) { // body() 只能調用一次先取字符串再拋異常 throw new IOException(微信接口返回失敗: response.body().string()); } return response.body().bytes(); // bytes() 會把響應體全部讀入內存 } }OkHttp 的線程模型是異步可中斷的但這里用的是同步execute()返回后就是最終結果。注意response.body()只能調用一次所以先判斷成功再取 bytes。超時配置在 Builder 里完成connectTimeout和readTimeout與方式一的含義一致。如果你擔心 OkHttpClient 被反復創(chuàng)建可以在類里聲明為static final因為 OkHttpClient 本身就是線程安全的。3.4 方式四Spring RestTemplate如果項目已經(jīng)是 Spring BootRestTemplate 是很多人最早接觸的客戶端。它最大的坑是默認消息轉換器可能把圖片二進制當字符串處理所以接收類型必須聲明為byte[]。public byte[] createWxACode(String accessToken, String scene, String page, int width) { // 生產環(huán)境建議把 RestTemplate 聲明為單例避免每次 new 浪費性能 RestTemplate restTemplate new RestTemplate(); // 添加 ByteArrayHttpMessageConverter并放到第一位優(yōu)先處理二進制響應 restTemplate.getMessageConverters().add(0, new ByteArrayHttpMessageConverter()); String url https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token accessToken; String json String.format({\scene\:\%s\,\page\:\%s\,\width\:%d}, scene, page, width); HttpHeaders headers new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntityString entity new HttpEntity(json, headers); ResponseEntitybyte[] response restTemplate.exchange( url, HttpMethod.POST, entity, byte[].class); if (response.getStatusCode().is2xxSuccessful()) { return response.getBody(); } throw new RuntimeException(微信接口返回失敗: HTTP response.getStatusCode()); }這里最關鍵的是new ByteArrayHttpMessageConverter()否則 RestTemplate 會根據(jù)響應頭中的Content-Type選擇轉換器圖片的響應頭往往不是標準的 application/jsonSpring 可能用 StringHttpMessageConverter 把它轉成亂碼字符串。把ByteArrayHttpMessageConverter放到 List 第一位能保證它優(yōu)先處理。如果你在 Spring Boot 項目里使用 RestTemplate最好用Bean統(tǒng)一配置而不是在方法里 new這樣也能避免多個調用點重復設置轉換器。3.5 方式五Hutool HttpUtilHutool 是工具集合很多項目已經(jīng)有它的依賴。用 HttpUtil 發(fā)請求非常簡潔特別適合在內部工具、定時任務里快速實現(xiàn)。public byte[] createWxACode(String accessToken, String scene, String page, int width) { String url https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token accessToken; // 這里用 Hutool 的 JSONObject 拼參數(shù)避免手寫 String.format 的轉義問題 JSONObject body new JSONObject() .set(scene, scene) .set(page, page) .set(width, width); HttpResponse response HttpRequest.post(url) .body(body.toString()) .timeout(5000) .execute(); if (response.isOk()) { // bodyBytes() 返回原始字節(jié)流不會做字符串解碼 return response.bodyBytes(); } throw new RuntimeException(微信接口返回失敗: response.body()); }Hutool 的HttpRequest.post支持鏈式調用.body()可以傳 JSON 字符串.timeout()統(tǒng)一設置連接和讀取超時。response.isOk()判斷 HTTP 狀態(tài)碼是否為 2xx。注意這里返回的是HttpResponse需要用bodyBytes()而不是body()因為body()會默認按文本解碼圖片會被弄亂。如果你已經(jīng)依賴 Hutool這種方式是最省事的。3.6 五種方式怎么選如果你已經(jīng)把上面的代碼都看懂了選型其實就看你項目里的依賴現(xiàn)狀。我給一個常見選擇參考方式依賴適用場景我的建議HttpURLConnection無零依賴、學習或簡單工具小流量可用但連接管理要自己做Apache HttpClient需要引入已用 httpclient 的團隊連接池成熟推薦長期服務OkHttp需要引入已用 OkHttp 或追求 API 簡潔綜合體驗好推薦RestTemplateSpring 項目自帶已在 Spring 生態(tài)注意 ByteArray 轉換器Hutool HttpUtil需要引入工具腳本、定時任務上手最快但依賴會綁 Hutool我的做法是內部定時任務用 Hutool業(yè)務接口用 OkHttp 或 RestTemplate少一個依賴就少一分排查成本。選哪一種不重要核心是把第 4 章的參數(shù)和第 5 章的坑處理好。4. 參數(shù)與返回圖片處理scene、page、width 以及二進制流4.1 scene、page、width 的填寫規(guī)則和常見誤解先給參數(shù)一個明確的表然后逐個拆。這是我在生產環(huán)境執(zhí)行了無數(shù)次的參數(shù)組合下面是關鍵參數(shù)清單參數(shù)類型必填說明sceneString是unlimit 接口最大 32 個可見字符只能數(shù)字字母和部分符號pageString否默認首頁頁面路徑如 pages/index/index不帶 / 和后綴widthInteger否默認 430圖片寬度單位 px范圍 280-1280auto_colorBoolean否自動配色true 時忽略 line_colorline_colorObject否線條顏色默認 black如 {r:0,g:0,b:0}env_versionString否release、trial、develop默認 releasescene 最容易踩坑。很多運營把訂單號、渠道碼、用戶ID 全塞進去比如order202401010001userabcchannelxxx一不小心就超過 32 字符而且中文直接報錯。正確的做法是scene 里只放一個短的業(yè)務標識比如數(shù)據(jù)庫自增 ID或者uid_12345由后端拿到 scene 后去查真正的業(yè)務數(shù)據(jù)。如果確實要組合多個維度可以用_或-分隔但要控制在字符集和長度內。page 參數(shù)必須是小程序里真實存在的路徑不能帶.html或前導/也不能帶?參數(shù)。如果你在開發(fā)階段調試需要配合env_version: develop并確保這個頁面在開發(fā)者工具里已經(jīng)配置為可訪問。width 控制圖片寬高430 在小程序碼里視覺效果最好如果嵌入到海報或長圖中需要大圖可以調到 500 以上但不要超過 1280否則微信也會拒絕。在線下聯(lián)調時如果小程序頁面還沒發(fā)布getwxacodeunlimit 默認會校驗 page 是否屬于 release 版本此時生成失敗。你需要在請求體里加env_versiondevelop并且保證后端使用的 appid 和小程序開發(fā)工具登錄的是同一個賬號。trial 則對應體驗版release 對應正式版。這個參數(shù)容易被忽略我第一次聯(lián)調時就是被這個參數(shù)卡了一天。還可以用 line_color 指定小程序碼的顏色例如生成紅色碼。這里給一個帶顏色參數(shù)的請求體示例后續(xù)接口邏輯不變只是 JSON 多兩個字段String json {\scene\:\uid_12345\,\page\:\pages/index/index\,\width\:430, \auto_color\:false,\line_color\:{\r\:255,\g\:0,\b\:0}};4.2 拿到 byte[] 之后保存文件、轉 Base64、直接輸出圖片流微信接口正常返回時body 是一張 PNG 圖片的二進制流完全不是 JSON。不同業(yè)務場景對這份二進制的消費方式不同我拆成常見的三種。第一種是保存到服務器磁盤適用于定時生成、預生成文件后上傳 CDN 或 OSS 的場景// 保存前確保目錄存在否則會拋 NoSuchFileException byte[] bytes createWxACode(token, uid_12345, pages/index/index, 430); Path file Paths.get(/data/qr/uid_12345.png); Files.write(file, bytes);第二種是返回 Base64 字符串給前端前端可以直接放進img srcdata:image/png;base64,...。注意要拼接data:前綴否則瀏覽器不會識別byte[] bytes createWxACode(token, uid_12345, pages/index/index, 430); String base64 Base64.getEncoder().encodeToString(bytes); // 返回給前端的就是 data:image/png;base64,xxxxxx String dataUrl data:image/png;base64, base64;第三種是后端接口直接輸出圖片流前端用img src/qrcode?scenexxx來加載。這種方式適合低頻調用每次請求實時生成// 偽代碼Controller 層 GetMapping(/qrcode) public void qrcode(HttpServletResponse response, RequestParam String scene) throws IOException { byte[] bytes createWxACode(token, scene, pages/index/index, 430); response.setContentType(image/png); response.getOutputStream().write(bytes); }微信接口成功時 Content-Type 通常是 image/png失敗時則是 application/json。在 Java 中不要只判斷 HTTP 狀態(tài)碼因為接口失敗也可能返回 200 但 body 是 JSON微信接口在部分錯誤場景下會用 HTTP 200 返回 errcode。所以更穩(wěn)妥的做法是先讀取 byte[]然后判斷圖片魔數(shù)。PNG 文件的前四字節(jié)固定是0x89 0x50 0x4E 0x47也就是\x89PNG可以用下面的方式判斷byte[] bytes createWxACode(token, scene, page, width); if (bytes.length 4 (bytes[0] 0xFF) 0x89 bytes[1] P bytes[2] N bytes[3] G) { // 正常圖片繼續(xù)處理 } else { // 錯誤 JSON轉字符串查看 errcode String err new String(bytes, StandardCharsets.UTF_8); log.error(微信接口錯誤: {}, err); }三種返回方式各有取舍保存文件適合預生成Base64 適合后端接口直接返回 JSON 給前端不需要額外請求直接輸出流最簡單但每次都要調微信流量一大就會觸發(fā)頻率限制。我建議把 Base64 和直接輸出流都作為上層選擇底層統(tǒng)一暴露byte[]這樣切起來非常快。5. 避坑指南微信二維碼接口最常見的 4 個坑以下都是真實場景里反復出現(xiàn)的問題我按“現(xiàn)象 → 原因 → 解決”的順序寫每條都可以直接對照排查。5.1 坑一access_token 在服務里頻繁失效接口報 40001現(xiàn)象生成二維碼的接口偶爾報錯日志里出現(xiàn)errcode:40001, errmsg: invalid access_token而且不是每次失敗是隔一段時間就集中報一批。原因access_token 有效期 7200 秒但你的服務可能部署了多個節(jié)點每個節(jié)點各獲取各的 token。后拿到的 token 會把先前的擠掉但微信對 token 的生效有延遲多節(jié)點之間會出現(xiàn)短暫的空窗期。另一個常見原因是沒有做緩存每次生成二維碼都重新調 token 接口也會引發(fā) token 被刷新。解決用一個全局緩存比如 Rediskey 按 appid 區(qū)分value 存 access_token過期時間設為 7000 秒比有效期提前 200 秒刷新。如果請求期間發(fā)現(xiàn) token 過期加鎖重新獲取避免多個線程同時刷 token。下面是一個典型的封裝示意public String getAccessToken() { // 第一步查緩存命中就直接返回 String token redis.opsForValue().get(WX_TOKEN_KEY appid); if (token ! null) { return token; } // 第二步加鎖防止并發(fā)重復刷新 synchronized (this) { token redis.opsForValue().get(WX_TOKEN_KEY appid); if (token ! null) { return token; } // 調用微信 token 接口刷新 token fetchTokenFromWeixin(appid, secret); redis.opsForValue().set(WX_TOKEN_KEY appid, token, 7000, TimeUnit.SECONDS); } return token; }如果項目沒用 Redis也可以用本地內存緩存但要注意多實例部署時每個實例的 token 可能不一致最好還是引入一個共享存儲。如果已經(jīng)用了 Redis 還出現(xiàn) 40001檢查多個服務實例的時鐘是否一致以及 Redis 的 key 是否被手動刪除。這個坑不解決第 3 章的 5 種實現(xiàn)方式誰寫都會炸。5.2 坑二scene 內容超長或帶中文接口返回 41031現(xiàn)象curl 或 Java 調用返回errcode:41031, errmsg: invalid scene。有時甚至生成成功但掃碼后小程序拿不到預期的參數(shù)。原因scene 參數(shù)被拼接得又長又復雜或者里面帶了中文、空格。微信對 scene 有嚴格限制最多 32 個可見字符只允許數(shù)字、字母以及!#$()*,/:;?-._~這些特殊字符。很多后端會下意識把userId123activityId456channelabcd整個塞進去長度超限。解決scene 里只放一個短 ID比如用戶表主鍵。需要傳多維度信息時可以在服務端維護一個超短隨機碼例如s 9 位隨機字符串把它和真實業(yè)務參數(shù)存到 Redis并設置過期時間。這樣 scene 永遠只有 10 個字符既滿足限制又能讓掃碼后的頁面一次性拿到完整參數(shù)。// 生成短標識作為 scene避免直接拼業(yè)務參數(shù) String scene s RandomStringUtils.randomAlphanumeric(9); redis.set(scene: scene, userId123activityId456, 300, TimeUnit.SECONDS);如果只是中文可以嘗試用英文字母替代但不建議對中文做 URL 編碼因為 scene 的總長度限制按字符數(shù)算編碼后的 % 會占多個字符更容易超限。另外注意和是允許的但傳參前要對拼接后的字符串做一次長度校驗超過 32 字符直接拒絕并告警別讓它走到微信接口才報錯。5.3 坑三page 路徑寫錯或帶了 .html生成失敗現(xiàn)象調用接口返回errcode:41030, errmsg: invalid page或者生成了一張碼但是掃碼后提示頁面不存在。原因page 參數(shù)必須是小程序內已存在的頁面路徑而且不能帶前導/不能帶.html不能帶參數(shù)。常見錯誤是把pages/index/index.html寫進去或者寫成了/pages/index/index。還有一個小程序端大小寫敏感的問題路徑大小寫不匹配也會報 41030。解決先在小程序開發(fā)工具的“頁面”列表里確認路徑復制不帶后綴的路徑。如果接口已經(jīng)報 41030先檢查路徑是否匹配。開發(fā)階段記得給請求體加env_version:develop否則默認 release 模式會直接校驗線上已發(fā)布頁面本地未發(fā)布的頁面會失敗。下面是一個修復后的請求體示例{ scene: uid_12345, page: pages/index/index, width: 430, env_version: develop }還有一個細節(jié)page 如果不傳默認跳小程序首頁如果你的首頁路徑不是pages/index/index最好顯式傳遞。如果想把這個參數(shù)配置化放到application.yml里不同環(huán)境用不同 path可以避免聯(lián)調時反復改代碼。5.4 坑四用 String 接收圖片響應得到一堆亂碼現(xiàn)象代碼里用response.body().string()或ResponseEntityString接收微信返回結果打印出來是一串亂碼或者保存后的文件不是圖片打開報錯。原因微信接口返回的是二進制圖片流但你用了文本解析器。比如 Hutool 的body()會按默認編碼解碼RestTemplate 的 String 轉換器也會把字節(jié)流轉成亂碼字符串。更隱蔽的是某些 HTTP 客戶端會自動把響應頭里的Content-Type當作文本類型導致內部轉碼。解決統(tǒng)一用byte[]或字節(jié)數(shù)組接收響應不要用 String。上面第 3 章代碼里我們用的readAllBytes、EntityUtils.toByteArray、response.body().bytes()、response.bodyBytes()都是正確的。如果使用 RestTemplate必須保證消息轉換器列表里ByteArrayHttpMessageConverter在最前面否則 Spring 會選 String 轉換器。排查時可以先打印響應頭看Content-Type是不是image/png如果變成了application/json說明接口返回了錯誤信息而不是圖片這時候再去解碼錯誤 JSON。6. 進階玩法把二維碼生成做成穩(wěn)定生產線6.1 用 Redis 做圖片緩存按場景分層第 5 章的 token 緩存只是保底真正的生產環(huán)境我會把“二維碼圖片本身”也緩存起來。比如同一個活動碼如果 scene 是 activityId所有用戶共用一張碼緩存 7 天都沒問題。按用戶維度生成的碼內容不同不能復用但也可以把生成結果存下來用戶再次請求時直接返回圖片字節(jié)。我在 service 層一般做兩層查詢byte[] getQrCode(String scene) { // 第一層Redis 緩存圖片字節(jié)避免重復調微信 byte[] cached redis.get(qr: scene); if (cached ! null) { return cached; } // 第二層調微信實時生成然后寫回緩存 byte[] fresh createWxACode(token, scene, pages/index/index, 430); redis.set(qr: scene, fresh, 24, TimeUnit.HOURS); return fresh; }緩存時間不要太長因為小程序頁面內容迭代后舊碼掃碼可能進到一個報錯頁面。一般 24 小時或按活動周期設置。高頻活動碼建議異步預生成而不是用戶點要求時才去請求微信。常見做法是在活動創(chuàng)建時把需要的 scene 列表丟進消息隊列消費者拉取后統(tǒng)一調用微信接口生成圖片上傳到 OSS 或 CDN再把 URL 寫入數(shù)據(jù)庫。前端拿到的是一張 CDN 圖片不直接依賴微信接口。6.2 重試、監(jiān)控和最后留個習慣異步預生成也別忘了重試和監(jiān)控。微信接口失敗后延遲 1 分鐘重試并記錄錯誤碼如果連續(xù)失敗超過 3 次郵件告警。這樣把實時調用變成了異步任務微信接口頻率限制的影響就小很多。小程序二維碼接口本身不復雜真正復雜的是 token 有效期的網(wǎng)絡問題、參數(shù)格式的嚴格限制以及圖片流的正確消費方式。以前我在一個業(yè)務系統(tǒng)里圖省事直接每次實時生成結果活動流量一大微信接口報了很多超時和限流又被運營追著問為什么圖片加載不出來。后來改成“Redis 緩存 異步預生成 圖片上傳 OSS”這套組合接口基本沒有打滿過微信頻率限制。每當你準備在業(yè)務代碼里直接調微信接口時多想想能不能緩存、能不能提前生成這比選哪個 HTTP 客戶端更關鍵。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月丁香婷婷综合| 天天爱天天韩国日本牛牛牛牛| 91GD.COM| 四虎av在线| 精品午夜福利国产一区二区在线观看 | 成人天天看站长推荐| 久久久无码精品人妻二区| 国产精品日韩在线一区| 嗯嗯啊啊啊好舒服| 99久久久无码精品国产人| 五月丁香激情综合| 日韩免费一级性爱视频| 中文字暮97| 手机在线大香蕉| 欧美网站免费| 热久久无毒不卡| 亚洲密乳AV| 一区二区三区四区姦女| 91精品人| 台湾佬激情综合| 日韩精品午夜操呦呦不卡影院| 深夜国产一区二区三区在线看| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 两性色网| 色娱乐色呦呦夜夜夜夜av| 欧美精品69性爱| 97爱欧美| 操逼A∨| 99re3这里只有精品| 天天综合网91| 性生活久久久久久久久久| 超碰偷拍| 午夜天堂精品久久久久91| 国产农村妇女毛片精品久久| 午夜天堂精品久久久久91| 天天射天天色成人| 色狠狠综合噜一二三区| 74成人在线| 久久深夜无码| 国产成人亚洲精品无码古代早漏男| 97在线无精品| 内射黑人| 福利色色| 国产精品成人无码a v毛片| 中文字幕一区二区三区蜜臀| 女人双腿搬开让男人桶| 午夜九九| 磁力99AV| 久草免费在线一区二区| 人妻铁牛TV| 欧美永久激情一区二区| 做爱A级亚欧| 亚洲一区制服诱惑| 午夜免费视频1000| 99re免费视频精品全部| 久久精品无码一区二区三区| 在线女人91| 日本一区视频在线观看| 99色热| 五月天激情综合网| 国产av强奸美女| 国产精品夜夜夜| 亚洲人成网www| 天天懆天天日| 大香蕉中文网| 日本天天干天天搞一区| 亚洲欧美经典一区二区| 久操免费观看| 色综合色| 日韩欧美麻豆 | 91久久18禁| 日本免费一级AAA大片器 | 六六久久日韩不卡| 亚洲无码精品AV久久久| 色哟哟精品1精品2| 人妻夜夜爽天天爽麻豆三区网站| 午夜电影在线观看无码专区| 欧美日韩大香蕉| 一区,二区,三区视频| 大香蕉av在线| 国产精品亚洲天堂网址| 国产丝袜美女诱惑| 日本肉体xxxx裸交| 午夜国产综合视频在线观看 | 91狠狠综合久久久| 日韩av不卡在线看| 久久精品国产亚洲AV先锋| 久久鲁夜| 色香阁在线| 日本天天色| 国产精品肉丝自拍| 韩国女主播青草福利视频| 日本高清_区二区三区 | 色与欲影视| 大屁股国产在线视频| 亚洲情色第一页| 韩国一级婬片A片AAAAA| 精品黑人一区二区| 国产欧美一级在线观看| 日小BB小视频| 欧美欧美啪啪视频| 97亚洲色图| 97网址97| 欧美线天码中字| 日韩ab网| 91欧美丝袜| 色大师网站www永久网站视频| 26uuu欧美| 探花激情视频| 97人人模人人爽人人| 无码精品一区二区三区潘金莲| 久久久9999| 超碰在线综合97| 9999九九九久久久| 精品国产久久乱码| 超碰1997| 五十路成人在线视频二区三区| 国产在线精品电影观看| 免费超碰97久久| 蜜臀色乳| 欧美综合网1| 粉嫩国产精品久久粉嫩| 久久国色天香香蕉| 性色av一区二区| 欧美性生活内射| 一区二区首页| 裸模AV女优| 日本一区不卡| 亚洲国产精品无码AV久久久| av爱爱爱| 岛国AB视频| 色五天伊人| 国产小黄片在线免费观看| h4610国产人妻| 天天天天天天天天天天干美女| 中文字幕第2页| 久九色| 91人人操| 日本人妻伦在线中文字幕| 69XX一中文字幕人妻91| 亚洲人妻av| 一区二区日韩欧美久久| 色婷婷蜜臀av| 新视频sss国产| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 免费成人在线熟妇网| 91超碰人人| 亚洲精品欧美专业| 国产乱不卡| 欧美人妻制服| 92性色国产午夜福利在线661 | 日本熟妇自慰性高潮一区二区三区| 夜夜嗨一区| 国内精品伊人久久久久影院会| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 香蕉大久久久| 久久这里只精品免费福利| 欧美人人曰人人操人人射射| 亚州精人品大香蕉| 亚洲日韩乱码中文无码蜜桃臀网站 | 无码国产精品久久久久| 东京日日夜夜| 91l欧美在线| 欧美日韩1234| 黄片在线免费在线观看| 亚洲国产综合久久久性感熟妇| 绑缚麻绳人妻寝取完整版| 青青草国产一区二区三区| 久久少妇| 五月天黄色激情视频| 欧美制服网站美腿丝袜| 蜜臀99久久精品久久久久久| 精品美女少妇一区二区| 欧美 亚洲 制服 精品| 欧美美女在线高潮999| 国产成人精品日本视频| 天天干天天日天天射黄色| 色www精品视频在线观看| 婷婷15月天青娱乐| 操老熟女AV| 老妇女91| 青娱乐久久艹| 日日A∨| 999国产精品999久久久久久| 久久亚洲AV无码专区首页| 大香网伊人久久综合| 日本欧美色| 91精片| 亚洲中文字幕三级在线| 91亚洲欧美综合高清在线| 偷拍精品一区二区三区| 精品久久人妻成人网| 特污免视频| 狠久久| 一区二区三区 日韩欧美| 啊啊啊快操我视频| 性爱av在线免费观看| 炮色五月| 蜜臀AV午夜精品久| 亚洲精品xxx| 久久鲁夜| 97超碰总站| 精品久久艹| 无码人妻一区二区一牛影视| 一区在线国产播放| 日本一区二区亚洲综合| 偷偷人人精品女女久久| 九久久精品| 91天美传媒精品| 国产精品老熟女一区二区| 国产视频一区二区免费| 嫩草影院在线观看精品| av最新免费中文字幕| aaa亚无码专区| 欧美亚洲首页| 麻豆天美一区二区| 女人18精品一区二区三区| 天天综合网一91网| 日本狠狠干| 五月婷婷基地| 欧洲色色| 嗯嗯啊啊亚欧精品| 久久九七| 老司机午夜福利视频一区二区| 亚洲自拍欧美国产首页网曝| 神马午夜久久久| 九月AV| 欧美图片色综合| 91大神电影天堂| 99中出在线| 国产怡红院| 天天香香欲综合| 久久神马影院| 男人天堂免费| 天天综合网~91综合网| 自拍第一页| 97超碰影音| 久久超碰天天| 欧美综合亚洲综合| 国产隔壁老王影院在线| 国产精品自在线发布| 国产 无码 一区二区| 午夜理论片在线观看免费| 日本高清一区二区在线| 蜜臀99久| 色色福利| 色色色热| 美女网站黄页| 大香蕉免费3| 男人的天堂午夜av| 国产女人和拘做爰视频 | 五十路熟女,国产欧美精品区一区二区三区| 蜜臀在线看片| 另类图片综合| 性爱精品一区| 91精品人妻一区二区三区蜜桃臀 | 怡红院成人视频| 亚洲开心网| 久久久久国产精品久久久| 国产60页| 激情接吻视频久久久久久| 综合激情五月丁香| 中文字幕天天天天天| 国产乱码久久久久久| 青青操国产夫妻| 国产精品天干天干综合网麻豆| 亚洲天堂另类| 丝袜美腿亚洲| 日本www操操操| 日本色婷婷| 婷婷五月天久久精品视频一区二区三区| 91精品免费| 97在线观| 国产三区免费在线观看| 欧美亚洲玖玖玖| 91在线丝袜视频| av2014 日韩在线中文字幕| 天堂а√在线最新版在线| 亚洲无码com| 四虎午夜影院| 女人被添高潮免费视频| 亚洲中文电影| CCYY草草影院地址入口| 日本有码久久| 大香蕉草草| 亚洲图片日本AⅤ欧美在线| 96AV精品| 97视频免费播放| 91人妻做a观看视频| av在线浏览| 欧色网址| 中文字暮97| 国产精品另类一区大香蕉| 国产女人和拘做爰视频 | 天天干天天拍| 1204人成网站色www| av绯色| 国产又大又粗又长视频在线| 一区二区三区美女超清| 爱爱60秒免费视频| 骚女天天综合网| 天天干天天狼在线视频| 九九九成人| 国产一区二区三区影片| 91在线丝袜视频| 亚洲日韩在线a不卡99精品| 五月天社区| 欧美亚洲在线| 伊人影院中文字幕| 日本一二区不卡| 色噜噜综合在线| 国产久久久| 1024香蕉视频| 亚洲综合电影| 久草婷婷| 青娱乐淫乱1314| 91国产精品熟女| 另类图片天天影视| 91国产丝袜足交精品视频| 国产99热| 色色毛片| 午夜国产成人精品视频| 天天综和| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 青青草吊丝| 永久电影三级在线观看| 3P丝袜熟女 色综合| 色噜噜人妻丝袜a∨先锋影| 伦理日韩国产久久| 免费看美国人人爽,人人操 | 六月激情网| 精品人妻一区二区三区在线视频不卡| 国产999精品久久久久久| 欧亚日韩一区在线| 嗯嗯啊好大| 操逼视频亚洲| 99热18这里只有精品| 日韩中文字幕在线视频观看| 夜夜欢天天干| 天综合中文| 免费国产视频| 草伊人高潮喷水超碰| 国产精品欧美日韩久久| 天堂种子在线www网资源| 不卡日本一区二区| 亚洲91网。| 日韩一级成人毛片免费观看| 国产精品一区二区三区在线| 九九九九久久久| 亚洲一区二区三区春色| 亚州九九九精品视频| 一区二区三区探花在线观看| 97爱亚洲| 加勒比AV网| 亚洲强奸乱伦影视网| 台湾佬大香蕉| 一本大道综合伊人精品热热| 久久精品亚洲成a人天堂| 久久久性| 日天天九九天堂666| 强上我不卡卡| 97资源站久久| 超碰在线人妻不卡| 精品超碰中文在线| 国产三区免费在线观看| 成人免费毛片| 青娱乐淫乱1314| 亚洲精品九九九九九九| 天天舔天天日天天射| 亚洲色图超碰在线| 91在线无码精品秘 软件| 亚洲男人天堂AV| 中文字幕二区| 在线中文AV| 天天碰操中国年青熟妇| 91天堂色男人的天堂| 乱伦一二三| 91欧美亚洲| 毛片麻豆91糖心精品毛情片| 亚洲色9| 蜜臀久久99精品久久久久久久久| 国产黄a三级三级三级av在线看| 天天草夜夜草高潮片| 日韩欧视频| 久久久久国产精品喷潮免费观看臀| 99re这里只有| 91模特在线观看| 美女黄码视频午夜| 日韩av色图综合| 97青青操视频| 一区二区三区精品黑丝白丝酒店对鸡 | 人妻天堂综合网| 中国国产精品一区视频| 欧美性爱无码一区二区三区| 偷拍三区| 色久桃花影院在线观看| 亚洲另类小说卡通动漫| 日本欧美韩国国产在线| 免费人成在线观看网站品爱网| 精品人妻中文字幕高清| 日韩97| 成人精品在线免费视频| 飘花国产午夜精品不卡| 久久久久久久久久久久久久9999| 亚洲天堂区| 免费精品福利在线观看| 五月婷婷啪啪| 欧美日韩第一页| 欧美99热| 好淫网一二三视区| 情色五月天久久久| 久久久久久裸体| 久久久久婷婷精品av电影| 精彩久久中文| 97在线视频免费看| 人人干人人操人人爱| 无码直播久久久| 亚洲欧洲综合av在线| 亚洲导航深夜福利| wwwss在线观看| 青青草视频久久| 中文有码第五页| 亚洲成人妻日韩在线| 欧美区亚洲区偷拍区| 91丝袜美女视频| 亚洲久久久久| 波多野42部无码喷潮在线观看 | AAAA欧美日韩| 欧美日韩一区二区三区四区蜜桃| 国产九九九九九九九九| 九九这里只有精品| 日日黄色三级网站| 色九九久九九| 激情黄色片在线观看| 久久亚洲AV无码专区国产精品 | 94色色电影网| 26uuu性物| 五月色综合| 欧美无圣光在线| 日韩人妻精品| 立川理惠被中出无码| 秋霞免费AV| 97色色婷婷| av亚洲天堂资源网站| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 欧美97av| 黑人中出21连凳花野真衣| 无码男人天堂| 国产美女自拍AV| 综合激情婷婷| 久草精品视频| 影音先锋日本乱伦| 天天综合色电影| 欧美骚少妇| 波多野结衣之双飞调教在线播放| 美女自卫慰黄网站免费| 欧亚揄拍偷拍精品视频| 大色综合| 国产毛片精品一区二区色欲黄A片| 九九英色视频| 亚洲一区二区三区婷婷| 国产欧美一区激情交| 久热久操| 超碰国产精品无码| 国产亚洲99久久精品| 婷婷五月天无码 | 热久久99999| 97在线免费观看| AV综合中文字幕干| 日本性一区| 中文字幕,人妻,日韩| 青娱乐导航AV| 九九九久久久| 国产丝袜视频| www.男人的天堂| 人妻激情偷乱视三区频一区二区| 亚洲 综合 第一页| 强奸乱伦AV网站| a人欧美综合天堂麻豆| 美女91网站| 熟女人妻av在线资源,黄色的资源| 91欧洲入口| 操我无码| 伊色久人大在线| 99久久婷婷| 亚洲情色 自拍| 五月婷婷丁香| 九九热九九| 淫妻综合网| 啊啊啊好想要| 超碰亚洲97| 亚洲综合另类| 五月天久久婷婷亚洲 | 色婷婷五月天| 综合久久2017| 蜜臀精品1区2区| 欧美一区二区一级岛国大片| 激情亚洲天堂| 大香蕉久| 天天久久久久久| 午夜免费视频1000| 天天干人人看综合| 大香蕉在线视频重口味毛片在线| A V视频日本| 欧亚成人在线视频| 性做久久久久久免费观看软件| 九九久久国产精品怡红院| 婷婷五月成人| 国产真乱mangent| 少妇丝袜在线观看AV| 无码少妇精品一区二区60岁老人| 久久免费9| 亚洲18禁| 密乳AV免费观看| 人妻精品一区一区三区蜜桃91| 丁香五月激情婷婷| 人人爱人人乐人人操| 色噜噜人妻av 中文字幕| 国产一进一出视频网站| 色原狠狠天天天| 亚洲精品丝袜| 日本色色色色色视频| 久久αⅴ| 亚洲欧洲久久天堂| 啊啊啊 在线观看| 污污汅18禁网站在线永久免费观看| 中文字幕AV片| 欧美.亚洲.另类.丝袜.制服.诱惑| 天天综合-91入口| 欧美78| 激情综合五月| 日本操逼aaaaa| 国产91 丝袜在线播放 | 精品一区二区三区18| 欧美色图片91| 色99色| 成人七区| 尤物av网站免费在线播放| 中国黄色特级精品一区二区三区片| 亚洲成人综合在线| 久操网无码在线| 人人妻人人爱人人玩| 精品一国2| 国产老熟女| 中文字幕在线免费观看视频| 欧美一区二区三区另类精品| yiqicaoav| 久久久久久久久久久久黄色 | 天天躁狠狠躁av| 91九久| 久9视频| 美女操逼福利视频| 亚洲 欧美 制服 另类 自拍| 五月婷亚洲精品天堂| 久久蜜桃一区二区| 一区二区播放| 国产超碰97| 北野未奈加勒比av| a片亚洲一本通视频| 亚洲91网。| 欧美淫穴| 97视频观看| 伊人AAA| 91欧美| 熟女人妻av在线资源,黄色的资源| 超碰碰碰碰| 天天综合网国产| 久久久不能久久久久| 激情图片亚洲色图| 我中文字幕6区 | heyZO天然素人无码AⅤ专区| 91精品人妻一品二品三品| 日日摸日日弄日日拍| 骚日日av| 东京热毛片177b2viP| 蜜臀久久99精品久久久久久无删减| 蜜臀99久久精品久久久懂爱| 五月丁香黄色网| 高清在线不卡一区二区 视频| 久久性爱精品一区| 激情五月天社区| 五月丁香网站| 91电影色诱| 久久美国毛片| 亚洲小说视频| 人人 操人人 操人人| 天堂中文日本在线观看| 99热国产| 超碰97玖玖爱| 久久精品女同亚洲女同13| 国产97亚洲| 影音先锋日本一区二区| av天堂5| 久操高青| 青青青草原| 色综合一本| 最新国产亚洲精品精品国产亚洲综合| 99热伊人| 大香蕉久| 99热这里只有精品地址| 久久熟女嫩草成人片免费| 精品视频日日夜夜| 免费人人搞97| 手机av天堂久久久久| h无码动漫在线观看| 开心五月天激情网| 小骚逼被操的爽不爽| 亚州黄站| 天堂无码精品国产久| 五月丁香网站| 久9久9精品| 欧美色网络| 极品美女福利在线观看| 天堂日本亚洲欧美| 日日摸日日碰夜夜爽视频| 手机在线中文字幕国产| 欧美制服网站美腿丝袜| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 国产真实子伦对白| 欧美很很操视频| 美日韩一二三区| 91精品国产91久久青草| 日本高清久久| 极品出轨视频网站| 一区二区三区免费岛国片| 国产一区二区三区不卡手机在线| 日韩大香蕉AV影片| 5月婷婷6月六月丁香| 天天看片麻豆| 人妻偷拍一区二区三区| 天天摸天天插天天日| 91美女片在线| 91啪啪| 成年人免费观看网站| 亚洲精品国产专区在线观看| 第45页一区二区| 色欲天天综合久久久无码网中文| 久久香蕉网| 欧美日韩欧美| 六月色婷婷| 大香蕉淫人| 久久综合九九| 96麻豆精品一区二区三区| 亚洲色诱惑| 日本高清视频在线观看黄已三辽| 91 亚洲 欧美 日韩 国产 综合| 欧美97视频| 欧美日产国产在线成人第一区| 精品国产72| 不卡av在线中文字幕| 1二区9| 亚洲va有码在线天堂| 天天综合网~91入口| 乱伦图av| 欧美最婬乱婬爆婬牲视频| 色色色色电影网| 亚洲人妻爽爽爽| 亚洲av夫妻操穴网| 久久双插| 国产性爱欧美性爱在线| 亚洲国产高清福利视频| 综合自拍| 久9久| 亚洲囯产精品女人久久久| 超碰69| 超碰在线国产| 中文字幕一区二区视频在线观看| 久久综合日韩亚洲欧美| 亚洲国产尤物yw在线观看| 国产精品久久久久久久久久二区三区| 亚洲AV成人在线| 78久久| 妇人噜噜| 亚洲啪啪性视频| 91性色| 国产性爱欧美性爱在线 | 精品人妻视频一区二区在线播放| 高清在线偷拍自拍视频| 日韩欧美日韩| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 国产精品9999| 一区二区三区四区久久视1| 亚洲一区二区三区四区视频| 色综91| 我中文字幕6区 | 亚洲色图欧美色18直播在线| 91 丝袜在线| 探花一区在线| 狠狠操,使劲操| 亚欧美综合| 宅男91视频在线播放| 黄色小视频日本txt| 亚洲色婷婷久久久综合日本| 狠狠2050在线观看| 精品久久視頻在线| 欧美午夜视频精品久久| 久久久久亚洲| 啊啊在线| 97丝袜亚洲在线播放| 91麻豆天美国产欧美| 人妻人人做人人澡人人爽欧美一区| 欧美色图第一页| 青青草无码视频| 亚洲城人男人的天堂| 久久精品性| 夜夜天天噜狠狠爱2021| 久久综合九色综合欧洲98| 人妻喷水| 欧美性天天影院| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 美日韩男女操屄视频| 91久久国产精品| 欧美一区二区三区黄色影视| 打av高清| 91在线美女| 天天操天天插| 久久综合九九| 久久久国产成人一区二区三区在线| 久热在线精品免费观看| 色在线视频导航| 亚洲国产综合图区中文字幕| 成人AV在线网站| 超碰97欧美日韩| 农村妇女精品一区二区| 久久av色| 九九成人精品| 亚洲 se图 欧美电影| 亚洲中文制服诱惑| 熟女字幕| 久久男人| 性色高清..……| 久久 久久国内精品亚洲 | 国产精品国产| 亚州色阁| 99re6国产精品99re| 激情视频一二三| 91天天c| 殴洲老熟女| 夜草欧美| 高清肉丝中文无码| 制服中出中文人人精品| 噜噜噜亚洲精品| 日韩资源网| 欧美一区二区三区成人性生活| 亚洲限制级| 色麻豆AV| 99久在线精品99re8| 97国产中文| 欧美自拍网| 欧美色乱| 麻豆国产97在线| 中文字幕日韩专区精品系列| 青青青国产手线观看视频2| 九九视频黄色片| 国产不卡免费在线视频| 欧美视频一区二区在线| 青娱乐日韩无码| 99热这里都是精品| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 搡老女人911熟妇老熟女| 国产最火爆久久国产网站网站 | 日韩丨制服丨中文|在线| 国产97/欧美| 亚洲在饯| 天天干干天天干干| 亚洲欧美日韩综合在线尤物| 亚洲AV小说| 日本大香蕉| 999色欧美中文字幕| 日躁天天爽爽| 日本免费一级AAA大片器 | 色天使AV天堂| 无码78| 精品人体无圣光凹凸| 婷婷久久网| 五月婷婷hd| 一卡二卡三卡| 国产精品嫩草影院午夜两性 | 51一区二区三区| 999久久久| 日韩一级成人毛片免费观看| AV中文在线可看| 97资源免费视频| 超碰地址久久| 你想操日本小逼吗| 久久久啊啊| 91精品婷婷国产综合久久| 蜜臀一区二区三区在线| 国产18精品亚洲精品| 久久综合久久综合人久久夜精品| 国产高清在线自在拍69| 中国熟女老妇仑乱一区二区三区| 国产精品成人无码av无码免费| 91国产精品熟女| 2020天天色综合| 久久久久久一日韩字幕无码| 亚洲天堂,男人| 中文熟女五十乱码在线| 91久久九九精品国产综合| 亚洲操逼网| 欧美色图人妻| 韩三级a视频在线观看 | 日韩国产精品人妻无码久久久| 天天躁日日躁AAA片李宗瑞| 日韩精品熟妇| 大色综合| 99热超碰在线| 99久在线精品99re8| 熟妇的味道HD中文字幕| 91天天日| 中文字幕第2页| 国产精品熟女乱伦| 中国熟女91| 中文字幕AV乱伦| 大香蕉 222| 91老司机在线| 婷婷色五月激情| 色香欲天天天天综合色| 人人艹亚洲| 天天干天天日天天射黄色大片| 一本色道人妻久久| 亚洲欧美日韩夜夜| 操逼大黄片| 丁香六月婷婷| 99操逼| 久久丁香五月婷婷| 亚洲在线综合| 国产高潮AA片免费看| 后入日本1234| 91人人臊| 9精品久久久久| 五月丁香影院| 亚洲性天堂| 99性爱视频| 国产精品播放| 国产主播福利| 黄色大片一区二区密桃丝袜| 美女9118禁| 亚洲人人操| 色臀AV| 亚洲丝袜色| 亚洲爽图| 青青草手机在线免费观看| 蜜乳成人AV| 91爱看| 久久香蕉国产线看观看猫咪av| 大屁股熟女一区二区三区| 黄色小视频日本txt| 精品一区二区2| 99热超碰| 精品国产av一区二区三区四区入口| 精品久一区免费| 欧美日韩国产另类综合| 91美女国产在线| 99精品久久| 一起草三级AV电影在线观看| 91色图片| 少妇高潮特黄A片| 9美女超碰在线免费观看| 中文字幕啊啊啊在线观看视频| 亚州综合| 97就爱干| 国模一区二区三区| 国产精品高清2021在线| 一级黄碟| 超碰97起碰| 黄色大片免费在线| 人妻少妇无码| 亚洲另类久操网| 欧美操逼熟女| 国产精品夜夜| 大香蕉综合久久| 国产成人自拍视频在线| 伊人天天久久动态图| 2017大香蕉国产精品久久| 自偷自拍的亚洲视频| 精品欧美不卡在线播放| 激情久久日韩精品中文字幕麻豆| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 精品少妇99| 日本999精品视频| 五月激情视频| 先锋激情∨在线视频播放| 无码二级三级| 久久伊人青青草| 亚洲少妇喷视频看| 手机在线播放国产福利| 色香欲影| 91美女视频电影| 91色黑人少妇| 六月丁香啪啪啪| 人人操人人摸人人看人人干| 日韩9区| 欧美丝袜美女电影一二三四区| 久久久久13| 1769精品一区二区三区| 人人做,人人操,人人摸| 嗯嗯啊啊啊好爽| 激情四射熟女丝袜| 性生活久久久久久久久久| 亚洲AV免费在线| 51一区二区三区| 18禁看网站一区| 亚欧美综合网| 亚欧操逼片在线观看| 1二区9| 日韩97视频!在线| 婷婷丁香六月天| 天堂8在线新版官网| A 在线网址| 熟女乱3伦999| 婷婷色综合欧美日韩| 精品国产a∨一区天美传媒| 久久久久久久久久久久九| 超碰在线974| 蜜臀久久99精品久久久老,,| 国产AV高清AV无码| 一级啊性爱在线视频| 亚洲图片色图欧美另类| 国产亚洲精品一区二区三区| 亚欧成人一级片在线播放| 97久久超碰日韩精品| 自拍第一页| 国产91丝袜在线播放蜜月| 久久亚洲色图中文字幕| 色综和网| 偷拍在线观看视频| 日韩精品一区,二区 九九...老司机| 国产AV超爽| 午夜福利在线合集| av在线观看不卡网站| 国产强奸91| 超碰国产精品无码| ,成人免费啪啪视频| 美日韩男女操屄视频| 欧美片第一页| 国产高清视频无码在线| 在线亚洲 欧美 日本专区| 在线日韩精品一区二区三区| 一级乱伦网站| 91免费看一区二区三区| 亚洲一区二区三区在线激情| 欧美精品精品一区二区| 91色人妻| 波多野结衣被操50分钟免费视频 | 变态乱伦伪娘灌肠一区二区| 国产野战露脸在线播放| 日本精品无码三级网站| 在线可观看的黄色网址| 日本中文字幕在线电影| 婷婷五月天av| 99热亚洲| 黄色污污污污污污网站| 欧美不卡在线美女| 欧美性,色九九| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 天天视频黄| 婷婷丁香九月| 青娱乐日韩无码| 欧插网站| 亚洲性少妇| 久久国产精品一区二区| 亚洲天堂男人| 国产操操日韩三级黄| av资源在线观看少妇| 啊…啊…操我用力操我 | 九九视频黄色片| 国产剧情AV不卡在线观看| 91狠狠色丁香婷婷综合久久| 久久久久9久久久久| 大香蕉琪琪日本女优不卡| 久久超碰天天| 色呦呦国产精品免费看| 333kkkk·亚洲com久久| 欧美 亚洲 综合 制服| 青春草A| 午夜经典| 色综合久久av| 久久精彩视频| 91 亚洲情侣偷拍 久久| 啊啊啊好舒服视频| www.黄色在线| 天美国产三级传媒| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 日本加靬比网站发布页| 日韩欧美天堂| 日韩熟女无码| 99色日| 男人的天堂va在线| av网页一区二区三区| 亚洲午夜免费狠狠干| 久久日本熟女精品一区| 国产99999| 午夜无码精品免费看性色| 99热色这里只有精品| 国产自啪精品视频网站黑丝| 秋霞午夜成人福利片片| 干婷婷综合网| m欧洲一级午老| 久久久精品网站| 熟女乱伦二区| 国产成人精品午夜福利| 老司机午夜精品视频| 99久久九九| 国产精品午夜福利视频| 国产二区三区免费视频| 色色国产| 大香蕉手机在线| www..com操老师| 中文字幕亚洲欧美在线不卡| 深夜视频| 人人色人人操在线| 搡老熟女国产1000部| 日本精品网站在线中文| 旡码电影特区| 91麻豆天美传媒在线| 日韩一级免费性爱| 亚洲九九爱| 伊人五月天婷婷| 操狠狠| 青青五月天| 日本免费亚洲欧美| 亚洲影视高清第一页| 强奸乱伦大香蕉| 在线黄色污污网站| 日韩中文字幕国产| 成人老鸭窝人人在线视频| 九九九久久久| 97精品国产97久久久久久免费| 亚洲性高潮| 99热超碰在线| 亚洲男人天堂网站| 99操逼| 亚洲同性aV综合| 久久97| 日韩人妻丝袜中文字幕| 淫妻综合网| 囯产精品久久久久久久久久二区三区| 99九九精品| 96超碰网| 狠狠欧美| 91综合色噜噜| 午夜精品久久久99| 久久久久久久久久久免费精品| 色诱avtt| 日本东京热加勒比久久| 偷拍综合亚洲| 亚洲性爱无码乱伦av| 超碰97人人乐| 欧美成人都市人妻| 夜色91| 欧美亚洲国产自久久| 欧美呦呦性爱| 欧美熟女丝袜| 国产18精品亚洲精品| 欧美一区二区| 玖玖97综合| 亚洲乱色熟女一区| 日本熟妇精品九九| 人成午夜免费大片| 密臀视频三区免费网站| 亚洲AV资源| 国产成人一级av88| 丝袜加勒比| 久久久久精| 国产一级高跟丝袜| 2019男人的天堂| 狂操嫩妻视频一区二区三区| 在线a亚洲视频播放在线| 九九亚洲精品| 黄色av一区二区在线| 男人天堂新| 北京美女一区二区| 中文字幕 国产区| 色牛aV| 超碰97在线中文| 九九成人| 老熟妇一区二区三区…| 91中出在线| 综合 亚洲 欧美| 北条麻妃性愛视频| 伊人久久婷婷| 岛国1区2区3区在线观看| 久久人体一区二区| 超碰亚洲97| 久久99午夜精品一区人妻| 精品一区二区三区丰满熟女-亚洲欧美一区| 高清不卡国产| 国产av美女被艹的乱叫| 视频国产欧美在线播放| 超碰精品人妻狠狠干| 天美传媒一二三区永久网站| 欧美黄色大片在线观看| 97视频免费| 伊人aaa| 91久热这里只有精品| 亚洲欧美国产成人综合不卡| 精品人妻一二三| 亚洲素人综合| 蜜臀久久99精品| 骚货| 丁香五月性| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 少妇超碰在线| 亚洲一区二区性爱电影| 国产三级资源在线观看| 九月伊人中文字幕| 超碰在线在公开超碰在线在公开| 青青草国产亚洲精品久久| 91狠狠综合久久久久久| 免费在线黄片视频| 欧美18 在线观看| 久久一二三四| 97人人夜| 青青草好吊| 无码久| 久久做97| 欧美久久婷| 青青网三级视频| 婷婷在线精品| 99热这里只有精品地址| 日韩A优精品在线观看| 美女视频尤物网在线看| 20cm女自慰在线日韩欧美| 四虎免费在线观看| 男人综合网| 欧美成人精品欧美一级乱黄一区二…| 激情婷婷丁香| 色老久久| 大香蕉伊然在亚洲91| 日本高清加勒比| 9精品久久| 色网1| 国产精品乱码久久久久久久| 97欧美日韩中文| 狠色婷婷久久一区二区三区_| 日本97久久久精品| 日韩懂色网| 青青草乱入乱欲视频在线观看| 麻豆性爱视频在线播放| 97超碰色屌| 1区2区3区中文字幕日韩| 日本不卡五区| 成人性爱全视频观看| 性爱视频免费网址| 亚洲天堂精品日韩电影| 香蕉综合网| 蜜臀99久久| 成人免费性爱视视| 亚欧无码线免费观看视频| 亚洲欧美综合| 青青操网| ji熟女.com| 亚洲无码免费看| a级成人毛片免费视频高清| 欧美视频一区二区在线| 国产极品一区二区三区三州| 久久久久国产一区二| 久久激情视频| 久久精品欧美一区蜜桃|