欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

PHP微信支付V3生產(chǎn)級(jí)封裝:認(rèn)證、請(qǐng)求、冪等與驗(yàn)簽全解析

PHP微信支付V3生產(chǎn)級(jí)封裝:認(rèn)證、請(qǐng)求、冪等與驗(yàn)簽全解析 簡介本資源是一份面向PHP中高級(jí)開發(fā)者的微信支付與退款功能實(shí)現(xiàn)方案聚焦電商及在線服務(wù)類網(wǎng)站的支付閉環(huán)需求無需集成微信官方SDK即可快速接入JSAPI支付與原路退款。壓縮包共3個(gè)PHP文件總大小僅7KB精簡實(shí)用核心為wxpay.class.php封裝統(tǒng)一下單、簽名生成、退款請(qǐng)求等邏輯wxpay.php提供調(diào)用示例notify.php專用于處理支付與退款異步回調(diào)代碼結(jié)構(gòu)清晰、注釋完整便于理解簽名機(jī)制、參數(shù)組裝及狀態(tài)校驗(yàn)等關(guān)鍵環(huán)節(jié)。目前已有1008人學(xué)習(xí)下載適合希望避開SDK復(fù)雜配置、深入掌握微信支付底層交互流程的開發(fā)者可直接復(fù)用核心類并結(jié)合業(yè)務(wù)調(diào)整訂單號(hào)、密鑰等參數(shù)快速集成到現(xiàn)有項(xiàng)目中。1. 為什么你寫的“PHP微信支付和退款類”上線三天就被商戶投訴資金異常這不是一個(gè)講SDK怎么安裝的入門教程。某開發(fā)者在交付一個(gè)本地生活SaaS系統(tǒng)時(shí)用網(wǎng)上抄來的“通用PHP微信支付類”直接接入微信V3接口結(jié)果退款到賬延遲超2小時(shí)、部分訂單重復(fù)扣款、回調(diào)驗(yàn)簽頻繁失敗——不是代碼跑不通而是類的設(shè)計(jì)邏輯和微信V3真實(shí)業(yè)務(wù)流嚴(yán)重脫節(jié)。這個(gè)標(biāo)題里的“類”本質(zhì)是一套可維護(hù)、可審計(jì)、可灰度、能扛住微信支付網(wǎng)關(guān)抖動(dòng)與冪等邊界條件的業(yè)務(wù)封裝層不是把curl包一層function就叫“類”。它面向的是需要對(duì)接微信支付含JSAPI/H5/小程序、處理原路退款、同步查單、異步通知驗(yàn)簽、敏感字段加密解密、錯(cuò)誤重試退避、日志可追溯的中后臺(tái)PHP服務(wù)。適合正在用ThinkPHP/Laravel/Swoole或純原生PHP搭建支付中臺(tái)、SAAS計(jì)費(fèi)模塊、會(huì)員系統(tǒng)且已申請(qǐng)好微信商戶號(hào)、配置好APIv3密鑰、開通了退款權(quán)限的工程師。別急著復(fù)制粘貼先看清微信支付V3接口和PHP生態(tài)的真實(shí)水位線它不接受裸curl、不信任$_POST、不兼容PHP 7.2以下、對(duì)時(shí)間戳/隨機(jī)串/簽名頭格式零容忍。下面帶你從零手寫一個(gè)真正能進(jìn)生產(chǎn)環(huán)境的WechatPayService類。2. 從微信支付V3接口規(guī)范反推類結(jié)構(gòu)為什么必須拆成4個(gè)核心組件微信支付V3接口不是“調(diào)個(gè)API就行”它是一套強(qiáng)契約、高安全、多狀態(tài)的金融級(jí)協(xié)議。直接寫一個(gè)WechatPay::pay()方法必然崩盤。我一般會(huì)按微信官方文檔的能力域隔離原則把整個(gè)類拆成四個(gè)不可拆分的組件認(rèn)證器Auth、請(qǐng)求器Request、響應(yīng)處理器Response、業(yè)務(wù)門面Facade。這不是炫技是為后續(xù)加監(jiān)控、換日志、切流量、做AB測試留出縫。2.1 認(rèn)證器用APIv3密鑰生成Authorization頭不是拼接字符串微信V3要求每個(gè)請(qǐng)求頭帶Authorization: WECHATPAY2-SHA256-RSA2048 ...其值由timestampnonce_strbody三者SHA256哈希后再用商戶私鑰RSA2048簽名。很多人卡在這一步——用openssl_sign()但沒設(shè)OPENSSL_ALGO_SHA256或body沒做JSON標(biāo)準(zhǔn)化空格、換行、鍵序錯(cuò)亂導(dǎo)致簽名不一致。?php class WechatPayAuth { private $mchId; private $serialNo; private $privateKey; public function __construct(string $mchId, string $serialNo, string $privateKeyPath) { $this-mchId $mchId; $this-serialNo $serialNo; $this-privateKey file_get_contents($privateKeyPath); if (!$this-privateKey) { throw new InvalidArgumentException(Failed to load private key from {$privateKeyPath}); } } public function generateAuthHeader(string $method, string $url, string $body ): array { $timestamp (string)time(); $nonceStr bin2hex(random_bytes(16)); // 必須每次請(qǐng)求新生成 $message $method . \n . parse_url($url, PHP_URL_PATH) . \n . $timestamp . \n . $nonceStr . \n . $body . \n; $signature ; $privateKey openssl_pkey_get_private($this-privateKey); openssl_sign($message, $signature, $privateKey, OPENSSL_ALGO_SHA256); openssl_free_key($privateKey); $authHeader sprintf( WECHATPAY2-SHA256-RSA2048 mchid%s,nonce_str%s,signature%s,timestamp%s,serial_no%s, $this-mchId, $nonceStr, base64_encode($signature), $timestamp, $this-serialNo ); return [ Authorization $authHeader, Wechatpay-Serial $this-serialNo, Wechatpay-Timestamp $timestamp, Wechatpay-Nonce $nonceStr, ]; } }參數(shù)說明$method必須大寫如POST$url必須是完整路徑不含域名如/v3/pay/transactions/jsapi$body必須是未格式化JSON字符串無空格、無換行、鍵名按字典序排列——微信校驗(yàn)嚴(yán)格。$privateKeyPath指向你從微信商戶平臺(tái)下載的apiclient_key.pem文件路徑。注意openssl_sign()返回的是二進(jìn)制簽名必須base64_encode()后填入header。2.2 請(qǐng)求器用cURL而非file_get_contents必須控制超時(shí)與重試微信支付網(wǎng)關(guān)有明確SLA支付下單99%請(qǐng)求300ms退款95%1s。但網(wǎng)絡(luò)抖動(dòng)、DNS解析失敗、連接池耗盡時(shí)裸curl會(huì)卡死。必須設(shè)置CURLOPT_TIMEOUT_MS非CURLOPT_TIMEOUT并實(shí)現(xiàn)指數(shù)退避重試最多2次。?php class WechatPayRequest { private $baseUrl https://api.mch.weixin.qq.com; private $httpClient; public function __construct() { $this-httpClient curl_init(); curl_setopt_array($this-httpClient, [ CURLOPT_RETURNTRANSFER true, CURLOPT_HEADER false, CURLOPT_FOLLOWLOCATION false, CURLOPT_SSL_VERIFYPEER true, // 必須開啟證書校驗(yàn) CURLOPT_SSL_VERIFYHOST 2, CURLOPT_CONNECTTIMEOUT_MS 3000, CURLOPT_TIMEOUT_MS 10000, // 總超時(shí)10秒微信要求最長15秒 CURLOPT_HTTPHEADER [Content-Type: application/json; charsetutf-8], ]); } public function send(string $method, string $path, array $headers [], string $body ): array { $url $this-baseUrl . $path; $attempts 0; $maxAttempts 2; do { curl_setopt_array($this-httpClient, [ CURLOPT_URL $url, CURLOPT_CUSTOMREQUEST $method, CURLOPT_HTTPHEADER array_merge([Content-Type: application/json; charsetutf-8], $headers), CURLOPT_POSTFIELDS $body, ]); $response curl_exec($this-httpClient); $httpCode curl_getinfo($this-httpClient, CURLINFO_HTTP_CODE); $error curl_error($this-httpClient); if ($response false || $httpCode 0) { if ($attempts $maxAttempts) { usleep((int)pow(2, $attempts) * 100000); // 指數(shù)退避100ms, 200ms continue; } throw new RuntimeException(cURL failed after {$maxAttempts} attempts: {$error}); } $responseBody json_decode($response, true); if (json_last_error() ! JSON_ERROR_NONE) { throw new RuntimeException(Invalid JSON response: . substr($response, 0, 200)); } return [ code $httpCode, body $responseBody, headers $this-parseHeaders(curl_getinfo($this-httpClient, CURLINFO_HEADER_OUT)), ]; } while (false); throw new RuntimeException(Unexpected flow in request); } private function parseHeaders(string $rawHeaders): array { $headers []; foreach (explode(\r\n, trim($rawHeaders)) as $line) { if (strpos($line, :) ! false) { [$key, $value] explode(:, $line, 2); $headers[trim($key)] trim($value); } } return $headers; } }關(guān)鍵點(diǎn)CURLOPT_SSL_VERIFYPEER必須為true微信強(qiáng)制HTTPSCURLOPT_TIMEOUT_MS設(shè)為10000毫秒是平衡成功率與用戶體驗(yàn)的血淚經(jīng)驗(yàn)——設(shè)太短丟單設(shè)太長用戶等不及。usleep()退避時(shí)間按2^n * 100ms計(jì)算這是微信官方推薦的客戶端重試策略。parseHeaders()用于調(diào)試時(shí)打印原始請(qǐng)求頭生產(chǎn)環(huán)境可刪。3. 支付與退款的核心業(yè)務(wù)方法如何讓unifiedOrder()和refund()真正冪等微信支付V3的“冪等”不是靠傳out_trade_no就能解決的。它要求同一筆訂單多次調(diào)用下單接口必須返回相同prepay_id同一筆退款多次調(diào)用退款接口必須返回相同refund_id且不重復(fù)扣款。這需要你在類里內(nèi)置狀態(tài)機(jī)和本地緩存哪怕只是Redis而不是把責(zé)任全甩給微信。3.1 下單接口JSAPI支付必須帶openid且notify_url要帶商戶號(hào)參數(shù)微信JSAPI支付要求payer.openid字段且notify_url必須是HTTPS、可公網(wǎng)訪問、且不能帶?參數(shù)微信不支持帶query的回調(diào)地址。常見翻車點(diǎn)用$_SERVER[HTTP_REFERER]拼notify_url或把測試域名寫死在代碼里。?php class WechatPayService { private $auth; private $request; private $cache; // PSR-16 cache interface, e.g. Redis public function __construct(WechatPayAuth $auth, WechatPayRequest $request, $cache null) { $this-auth $auth; $this-request $request; $this-cache $cache ?: new ArrayCache(); // fallback } public function unifiedOrder(array $params): array { // 1. 強(qiáng)校驗(yàn)必填字段 $required [appid, mchid, description, out_trade_no, amount, payer, notify_url]; foreach ($required as $field) { if (!isset($params[$field])) { throw new InvalidArgumentException(Missing required field: {$field}); } } // 2. 構(gòu)建請(qǐng)求體微信要求鍵名小寫、順序固定 $body [ appid $params[appid], mchid $params[mchid], description $params[description], out_trade_no $params[out_trade_no], amount [ total (int)$params[amount][total], currency $params[amount][currency] ?? CNY, ], payer $params[payer], // 必須含 openid notify_url $params[notify_url], // 必須HTTPS且不能帶?參數(shù) ]; // 3. 冪等控制檢查本地是否已存在該out_trade_no的prepay_id $cacheKey wxpay:order: . $params[out_trade_no]; $cached $this-cache-get($cacheKey); if ($cached isset($cached[prepay_id]) $cached[status] success) { return $cached; } // 4. 發(fā)起請(qǐng)求 $headers $this-auth-generateAuthHeader(POST, /v3/pay/transactions/jsapi, json_encode($body)); $result $this-request-send(POST, /v3/pay/transactions/jsapi, $headers, json_encode($body)); if ($result[code] ! 200) { throw new RuntimeException(Wechat pay failed: . json_encode($result[body])); } // 5. 提取prepay_id并緩存TTL 2小時(shí)覆蓋微信預(yù)支付有效期 $prepayId $result[body][prepay_id] ?? null; if (!$prepayId) { throw new RuntimeException(No prepay_id in response); } $this-cache-set($cacheKey, [ prepay_id $prepayId, status success, created_at time(), ], 7200); return [ prepay_id $prepayId, timestamp (string)time(), nonce_str bin2hex(random_bytes(16)), package prepay_id{$prepayId}, sign_type RSA, ]; } }參數(shù)說明$params[payer]必須是[openid xxx]格式$params[amount]必須是整數(shù)分如100代表1元$params[notify_url]建議用路由生成器動(dòng)態(tài)拼例如https://yourdomain.com/api/wechat/notify?mchid123456789然后在回調(diào)入口里用$_GET[mchid]區(qū)分多商戶。緩存TTL7200是硬性要求——微信prepay_id2小時(shí)過期緩存比它短會(huì)導(dǎo)致重復(fù)下單。3.2 退款接口必須校驗(yàn)原訂單狀態(tài)且out_refund_no要全局唯一微信退款要求1原訂單必須是SUCCESS狀態(tài)2退款金額≤原訂單金額3同一out_refund_no只能成功一次。很多人忽略第1條直接調(diào)退款結(jié)果微信返回ORDERNOTEXIST或REFUNDAMOUNTERROR。?php public function refund(array $params): array { // 1. 校驗(yàn)參數(shù) $required [out_trade_no, out_refund_no, amount]; foreach ($required as $field) { if (!isset($params[$field])) { throw new InvalidArgumentException(Missing refund field: {$field}); } } // 2. 查詢原訂單狀態(tài)微信要求退款前必須確認(rèn)訂單有效 $orderStatus $this-queryOrder($params[out_trade_no]); if ($orderStatus[status] ! SUCCESS) { throw new InvalidArgumentException(Cannot refund order with status: {$orderStatus[status]}); } // 3. 構(gòu)建退款請(qǐng)求體 $body [ out_trade_no $params[out_trade_no], out_refund_no $params[out_refund_no], amount [ refund (int)$params[amount][refund], total (int)$params[amount][total], currency $params[amount][currency] ?? CNY, ], reason $params[reason] ?? 用戶申請(qǐng)退款, notify_url $params[notify_url] ?? https://yourdomain.com/api/wechat/refund-notify, ]; // 4. 冪等檢查refund_no是否已存在 $refundCacheKey wxpay:refund: . $params[out_refund_no]; $cachedRefund $this-cache-get($refundCacheKey); if ($cachedRefund $cachedRefund[status] success) { return $cachedRefund; } // 5. 調(diào)用微信退款接口 $headers $this-auth-generateAuthHeader(POST, /v3/pay/transactions/out-refunds, json_encode($body)); $result $this-request-send(POST, /v3/pay/transactions/out-refunds, $headers, json_encode($body)); if ($result[code] 200) { $refundId $result[body][refund_id] ?? null; if (!$refundId) { throw new RuntimeException(No refund_id in refund response); } $this-cache-set($refundCacheKey, [ refund_id $refundId, status success, created_at time(), ], 86400); // 退款I(lǐng)D長期有效緩存1天 return [ refund_id $refundId, out_refund_no $params[out_refund_no], status success, ]; } // 微信退款可能返回422業(yè)務(wù)校驗(yàn)失敗需透出具體錯(cuò)誤 if ($result[code] 422) { $err $result[body][code] ?? UNKNOWN_ERROR; $msg $result[body][message] ?? Unknown error; throw new RuntimeException(Wechat refund failed ({$err}): {$msg}); } throw new RuntimeException(Wechat refund HTTP error: {$result[code]}); }關(guān)鍵邏輯queryOrder()方法必須先調(diào)用/v3/pay/transactions/id/{transaction_id}或/v3/pay/transactions/out-trade-no/{out_trade_no}查單確保原訂單是SUCCESS。out_refund_no必須由你的系統(tǒng)生成如date(YmdHis) . rand(1000,9999)且全局唯一——微信不接受重復(fù)out_refund_no哪怕對(duì)應(yīng)不同訂單。緩存TTL86400是因?yàn)閞efund_id永久有效但退款狀態(tài)可能變更如轉(zhuǎn)為ABNORMAL所以實(shí)際業(yè)務(wù)中還需定時(shí)查單同步狀態(tài)。4. 回調(diào)驗(yàn)簽與解密為什么90%的“驗(yàn)簽失敗”都栽在Wechatpay-Serial頭和響應(yīng)體格式上微信所有異步回調(diào)支付成功、退款成功都帶兩個(gè)關(guān)鍵頭Wechatpay-Timestamp、Wechatpay-Nonce、Wechatpay-Signature、Wechatpay-Serial。而最常被忽略的是Wechatpay-Serial——它標(biāo)識(shí)本次回調(diào)用的是哪個(gè)平臺(tái)證書你必須用對(duì)應(yīng)的公鑰驗(yàn)簽。很多人用錯(cuò)證書或把整個(gè)響應(yīng)體當(dāng)$body傳給驗(yàn)簽函數(shù)卻忘了微信回調(diào)的$body是原始二進(jìn)制不是JSON且$message拼接規(guī)則和請(qǐng)求時(shí)完全不同。4.1 支付回調(diào)驗(yàn)簽先取原始body再拼message微信回調(diào)的$_POST為空必須用file_get_contents(php://input)讀原始數(shù)據(jù)。且$message拼接格式為${wechatpay-timestamp}\n${wechatpay-nonce}\n${response-body}\n注意末尾換行。?php public function verifyNotify(string $rawBody, array $headers): bool { // 1. 提取必要header $timestamp $headers[Wechatpay-Timestamp] ?? ; $nonce $headers[Wechatpay-Nonce] ?? ; $signature $headers[Wechatpay-Signature] ?? ; $serial $headers[Wechatpay-Serial] ?? ; if (!$timestamp || !$nonce || !$signature || !$serial) { return false; } // 2. 獲取對(duì)應(yīng)序列號(hào)的平臺(tái)證書需提前從微信下載并緩存 $certPem $this-getPlatformCert($serial); if (!$certPem) { return false; } // 3. 拼接待驗(yàn)簽字符串注意rawBody是原始二進(jìn)制不能json_decode $message $timestamp . \n . $nonce . \n . $rawBody . \n; // 4. 驗(yàn)簽 $pubKey openssl_pkey_get_public($certPem); $ok openssl_verify($message, base64_decode($signature), $pubKey, OPENSSL_ALGO_SHA256); openssl_free_key($pubKey); return $ok 1; } private function getPlatformCert(string $serial): ?string { // 實(shí)際項(xiàng)目中這里應(yīng)從Redis或文件緩存讀取證書 // 證書需定期更新微信每3個(gè)月輪換建議用定時(shí)任務(wù)自動(dòng)拉取 $certPath /path/to/certs/{$serial}.pem; return file_exists($certPath) ? file_get_contents($certPath) : null; }血淚經(jīng)驗(yàn)$rawBody必須是原始輸入不能json_decode($rawBody, true)后再拼——微信驗(yàn)簽用的是原始字節(jié)流。$message末尾的\n是硬性要求漏掉就100%失敗。getPlatformCert()必須支持多證書微信可能同時(shí)啟用多個(gè)serial且證書要存本地文件不能每次HTTP拉否則高并發(fā)下IO打滿。微信平臺(tái)證書有效期90天必須監(jiān)控過期時(shí)間并自動(dòng)刷新。4.2 退款回調(diào)解密用AES-256-GCM不是簡單base64微信退款回調(diào)的resource字段是AES-256-GCM加密的JSON需用$associated_data和$nonce解密。很多人用錯(cuò)算法如用AES-128-CBC或把$nonce當(dāng)$iv用或忽略$associated_data。?php public function decryptResource(array $resource, string $apiv3Key): ?array { if (!isset($resource[algorithm], $resource[ciphertext], $resource[nonce], $resource[associated_data])) { return null; } if ($resource[algorithm] ! AEAD_AES_256_GCM) { return null; } $ciphertext base64_decode($resource[ciphertext]); $nonce base64_decode($resource[nonce]); $aad base64_decode($resource[associated_data]); // AES-256-GCM解密 $decrypted openssl_decrypt( $ciphertext, aes-256-gcm, $apiv3Key, OPENSSL_RAW_DATA, $nonce, $aad ); if ($decrypted false) { return null; } $data json_decode($decrypted, true); if (json_last_error() ! JSON_ERROR_NONE) { return null; } return $data; } // 使用示例 // $rawBody file_get_contents(php://input); // $headers getallheaders(); // if ($this-verifyNotify($rawBody, $headers)) { // $notifyData json_decode($rawBody, true); // $decryptData $this-decryptResource($notifyData[resource], $this-apiv3Key); // if ($decryptData $decryptData[refund_status] SUCCESS) { // // 更新本地訂單狀態(tài) // } // }參數(shù)說明$apiv3Key是你在微信商戶平臺(tái)設(shè)置的32位APIv3密鑰不是APIv2的key必須嚴(yán)格保密。openssl_decrypt()第4個(gè)參數(shù)是OPENSSL_RAW_DATA第5個(gè)是$nonce第6個(gè)是$aad——三者缺一不可。解密失敗時(shí)openssl_decrypt()返回false不要直接json_decode()。5. 避坑那些讓線上支付服務(wù)凌晨三點(diǎn)告警的5個(gè)真實(shí)問題別等線上出事才看日志。以下是我在三個(gè)不同項(xiàng)目中踩過的坑每一條都附帶現(xiàn)象、根因和可落地的解決方案。5.1 現(xiàn)象退款成功后用戶收不到錢微信商戶平臺(tái)顯示“退款異常”原因調(diào)用退款接口時(shí)amount.total傳了字符串100而非整數(shù)100微信后端解析失敗但返回HTTP 200refund_id卻為空。解決在refund()方法開頭強(qiáng)制類型轉(zhuǎn)換$params[amount][refund] (int)$params[amount][refund]; $params[amount][total] (int)$params[amount][total];并在日志中記錄$params[amount]原始值便于排查。5.2 現(xiàn)象支付回調(diào)驗(yàn)簽通過但$rawBody解析出的resource字段為空原因Nginx配置了client_max_body_size 1M而微信回調(diào)體可能超1MB尤其含大量商品信息時(shí)導(dǎo)致body被截?cái)?。解決在Nginx配置中增加location /api/wechat/notify { client_max_body_size 5M; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; }并用strlen($rawBody)校驗(yàn)長度小于100字節(jié)即告警。5.3 現(xiàn)象同一out_trade_no多次調(diào)用unifiedOrder()返回不同prepay_id原因緩存使用了memcached但未設(shè)置serialize選項(xiàng)導(dǎo)致ArrayCachefallback生效而ArrayCache不支持跨進(jìn)程共享。解決強(qiáng)制使用Redis緩存并在構(gòu)造函數(shù)中校驗(yàn)if (!$cache instanceof \Psr\SimpleCache\CacheInterface) { throw new InvalidArgumentException(Cache must implement PSR-16); }5.4 現(xiàn)象WechatPayAuth::generateAuthHeader()偶爾生成重復(fù)nonce_str原因bin2hex(random_bytes(16))在某些PHP版本如7.3以下的random_bytes()可能返回弱熵導(dǎo)致碰撞。解決改用更健壯的生成方式$nonceStr bin2hex(openssl_random_pseudo_bytes(16)); if (!$nonceStr) { $nonceStr bin2hex(random_bytes(16)); }5.5 現(xiàn)象退款回調(diào)解密后$decryptData[refund_status]始終為PROCESSING原因微信退款是異步流程PROCESSING表示正在處理需等待5-30分鐘但業(yè)務(wù)代碼誤以為失敗觸發(fā)重試導(dǎo)致微信重復(fù)退款。解決在回調(diào)處理中對(duì)PROCESSING狀態(tài)不做任何DB更新僅記錄日志并啟動(dòng)一個(gè)5分鐘后的延遲任務(wù)查單if ($decryptData[refund_status] PROCESSING) { // 推送延遲任務(wù)到隊(duì)列5分鐘后執(zhí)行 queryRefund($out_refund_no) $this-delayQueue-push(check_refund_status, [ out_refund_no $out_refund_no, retry_count 0, ], 300); // 5分鐘 }6. 進(jìn)階技巧用phpstan和psalm靜態(tài)分析守住支付類的類型安全紅線支付類一旦出錯(cuò)就是資金事故不能只靠單元測試。我堅(jiān)持在CI中加入靜態(tài)分析堵住90%的低級(jí)錯(cuò)誤。比如unifiedOrder()的$params[amount][total]必須是int但PHP默認(rèn)是stringjson_encode()后微信會(huì)拒收。6.1 用PHPStan定義嚴(yán)格類型契約在phpstan.neon中添加parameters: level: 8 paths: - src/WechatPayService.php typeToStrictTypes: int: [int, integer] string: [string] checkAlwaysTrueCheckTypeFunctionCall: true然后在類方法注釋中寫明/** * param array{ * appid: string, * mchid: string, * description: string, * out_trade_no: string, * amount: array{total: int, currency?: string}, * payer: array{openid: string}, * notify_url: string * } $params * return array{prepay_id: string, timestamp: string, nonce_str: string, package: string, sign_type: string} */ public function unifiedOrder(array $params): array運(yùn)行vendor/bin/phpstan analyse它會(huì)立刻報(bào)錯(cuò)Parameter #1 $params of method WechatPayService::unifiedOrder() expects array{amount: array{total: int, ...}, ...}, parent type array given.逼你把$params[amount][total] (int)$_POST[total]寫進(jìn)代碼而不是靠“應(yīng)該沒問題”的僥幸。6.2 用Psalm檢測數(shù)組鍵缺失風(fēng)險(xiǎn)Psalm能發(fā)現(xiàn)$params[payer][openid]可能不存在的問題。在psalm.xml中projectFiles directory namesrc / ignoreFiles directory namevendor / /ignoreFiles /projectFiles并在方法上加/** * psalm-param array{payer: array{openid: string}} $params */當(dāng)有人傳[payer []]時(shí)Psalm直接標(biāo)紅“Missing keyopenidin array”。6.3 給關(guān)鍵方法加throws文檔讓IDE自動(dòng)提示異常鏈/** * throws InvalidArgumentException 當(dāng)參數(shù)缺失或格式錯(cuò)誤 * throws RuntimeException 當(dāng)微信接口返回非200或JSON解析失敗 * throws RuntimeException 當(dāng)驗(yàn)簽失敗或解密失敗 */ public function verifyNotify(string $rawBody, array $headers): bool這樣在調(diào)用處PHPStorm會(huì)顯示所有可能拋出的異常提醒你try-catch而不是讓Exception一路冒泡到頂層500。最后說一句我寫這個(gè)類的第7版時(shí)把WechatPayService拆成了WechatPayV3Client純HTTP、WechatPayDomain業(yè)務(wù)規(guī)則、WechatPayGateway適配器因?yàn)槟炒挝⑿磐蝗簧?jí)了證書格式只改了一個(gè)適配器就全量切流。支付類不是越“全能”越好而是越“可替換”越穩(wěn)。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷五月激情基地| 婷婷色色综合| 婷婷激情五月综合丁| 热久久思思热思思| 超碰高清在线| 夜夜嗨一区二区三区直播内容| 婷婷六月激情丁香| 国产亚洲99| 99精品偷自拍| 99久久99久久综合| 天天天久久人人人合| 99riAV国产精品视频| 五月丁香影院| 久碰婷婷视频| 国产精品色婷婷AV综合色色| 插插干干干色| 亚洲精品色色| 综合久久高清| www.91AV.COM| 久草婷妨| 97五月婷| 性欧美大战久久久久久久83| 五月丁香六月婷| www.lingjunshare.com| 色五月天天| 色色激情五月| 婷婷丁香六月| 99国产视频网| 天天干天天射色综合| 99九九综合久久九九| 欧美性做爰大片免费看办公室| 婷婷丁香五月婷婷| 色在线视频网2025| 日韩AV大全| 五月丁香亭亭成人电影| 五月天激情在线视频| 97色97干| 婷婷五月天Av| 影音先锋一区二区三区| 一级性感黄色内射视频| 日本久热| 99色这里| 青草性爱视频| 国产67194| 亚洲精品视频电影| 色九网| 色444综合网| www.yw尤物| 日本人妻A片成人免费看片| 婷婷.com| 天天日综合| 新五月天婷婷激情电影| 中文字幕色色色| 九九爱这里只有精品| 久色网址| 五月婷六月综合在线观看| 91操片| 十区av| 99热免费18| 婷婷五月丁香图片人人操| 男女啪啪做爰高潮无遮挡| 超碰成人在线观看| 深爱五月婷婷| 91se精品国产| 婷婷六月丁综合| 丁香五月婷婷色综合| 97在线观视频免费观看| 狠狠色噜噜色狠狠狠综合色 | 九九色黄色| 九九综合九| 亚洲欧洲中文日韩久久AV乱码| 婷婷爱五月| 99色天堂| 激情内射人妻1区2区3区| 亭亭玉月丁香| 丰滿爆乳一区二区三区| 色丁香五月| 五月婷婷色播| 人人爱天天摸摸天天爱| 深夜激情网| 五月天综合在线观看视频| 自拍盗摄 另类| 色五月亚洲| 久久久无码精品成人A片小说| 97久操视频| 超碰免费电影| 久久婷婷五月综合97色一本| 久久机热这里只有精品| 日本色图综合| 亚洲性爱AV在线| 国产99久| 久久伊人五月天| 中文网AV| 伊人婷婷五月天| 日夜操B| 99色色网| 99ri在线播放| 久香草视频在线观看| 五月综合激情视频在线| 激情综合五| 91色呦哟| 激情网第九色| www.婷婷六月天| 色九月| 婷婷激情性爱| 一级视频网址| 亚洲国产精品五月天| 亚洲十月婷婷综合| 日韩一级片| 香蕉AV777XXX色综合一区| 大香蕉久久伊人网| 午夜美女人啪最红院| 五月丁香六月婷婷综合网缴情| 亚洲人妻电影| 婷婷五月丁香成人网| 丁香五月开心亚洲| 蜜臀嫩草| 91超级碰| 99热婷婷| 九月av| 99热免费| 18av天堂| 99免费在线| 久久sp免费视频| 少妇丁香婷婷| 天天干天天操天天拍| 大香伊人久色| 国产五月婷| 青青草原伊人网| 99无码| 色婷婷香蕉丁丁网| 五月丁香婷色| 五月天淫乱视频| 国产做A爰片毛片A片美国| 色婷婷播放| site:hcxsz888.com| 人妻VideOssS人妻高清| 99操九九网| 婷婷五月天激情文学小说| 欧美婷婷综合| 97在线/日本| 清色五月天| 99ri在线视频| www.狠狠| 人妻AV在线| 久热中文字幕| 女婷久久| 思思色播| 国产成人精品亚洲线观看| 久久婷婷综合基地| 亚洲a色| 久热在线观看视频9| 五月深爱婷婷| 91re色综合视频| 亚洲综合网激情小说| 色色色色色色网站| 成人色五月天| 婷婷五月丁香基| 人人色AV| 9久热在线视频| 婷婷五月天综合中文| 老师的粉嫩小又紧水又多A片视频| 九月丁香婷婷综合激情| 久久久久久人妻| 热九九精品| 丁香五月电影| 欧洲激情五月天婷婷| 人妻少妇色综合| 噜噜噜狠狠色综合| 久久精品国产精品| 婷婷丁香五月在线播放| www.久久爱.c n| 婷婷五月天视频亚洲| 天天综合网~91| 六月婷婷九月丁香亚洲综合| 五月婷婷深深爱| 精热在线综合网| 五月天婷婷久久视频| 天天爽夜夜爽夜夜爽精品| 婷婷综合色色| 亚洲瑟瑟精品在线| 亚洲午夜一区二区| 啪啪啪大香蕉| 丁香色综合| 亚洲成人精品三区| 色色丁香| 日日插日日干| 五月大香蕉| 99在线精品免费视频| 亚洲 无码 中文字幕 中出| 色色欧美色色色| 色色色色热热| 丁香婷婷老司机久操| 5月婷婷激情在线| 1024成人在线观看| 蜜臀AV在线观看| 亚洲久久婷婷| 伊人激情啪啪| 91九色 熟| 停婷丁五月在线| 丁香九月婷婷综合| 婷婷色资源| 天堂综合久久| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 99热99精品| 色播综合| 日本97在线看片| www.五月婷婷久久.com| 五月天婷婷深深爱| 五月丁香啪啪| 97超碰欧美中文字幕| 91ncom.色| 五月丁香婷婷久久| 欧美日韩99| www.超碰在线| 伊人玖玖精品| 日韩十国产极品久久| 97久久精品| 免费做A爰片77777| AV大香蕉| 久草狼人| 99re最新地址| 天天艹天天色| 欧美在线97| 极品人妻VIDEOSSS人妻| 五月天婷婷久久| 性色人人爽| 色色色色色色色色色色色色色色,网站| 婷婷五月天激情小说| 97婷婷丁香五月| 91超碰在线播放| www五月婷婷88导航| 99操逼| 色五月综合激情| 激情五月天婷婷激情| 激情五月婷婷色色| 国产av第一专区| 色一情一乱一乱一区91Av| www.婷婷五月| 日日舔夜夜操| 天天日,天天射,天天舔| 超碰精品手机在线| sisi热国产| 日韩啪| 超碰啪啪网| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 婷婷在线精品| 久热9| 色啪影院| 欧美成人A片AAA片在线播放| 五月色婷婷中文字幕| 色五月第四色| 激情综合五| 丁香五月婷婷激情中文| 女高怪谈在线观看| 狠狠人人婷婷| 狠狠色97| 91在线日| 色婷五月天| 日本91在线| 在线观看亚洲AV| 五月丁香免费看| 99成人精品视频| 婷婷五月丁香伊人网| 五月婷婷成人网首页| 超碰99在线| 91要啪| www91色网站| 播丁香五月婷婷欧美| 色五月情| 色亭亭九月| 美女被操一区二区| 欧美在线视频免费播放| 五月丁香婷婷色色| 亚洲日本激情| 天天日天天狠狠操| 日韩欧美不卡| 久久久九九九 99| 丁香五月婷婷操逼| 美欧成人视频| 激情小说五月天社区丁香 | 永久的网站AAAA | 激情五月综合婷婷| 婷婷大香蕉| 欧美乱码国产一级A片| 五月婷婷日| 婷婷激情视频欧美视频自拍视频欧美剧 | 狠狠综合网| 综合五月天完整| 亚洲色视频| 激情五月婷| 99ri精品在线| 人妻av在线| 色色色色色网| 9久热在线视频| 538任你爽视频不一样的| 97人人操人| 99免费在线视频| 日本美女上人| wwwxxx五月婷婷小说| 色亚洲视频| 色婷小说| 成人短视频在线| xxxx五月| 九九亚洲| 亚洲国产精品SUV| 9999热免费视频视频| 97婷婷狠狠久久综合9色| 婷婷综合av| 丁香五月婷婷基地| 五月丁香在线国产 | 国产AV一区二区三区日韩| 五月天婷婷Av| 激情网五夜婷婷| 国产高清精品色| 九九99九九99九九99视频网| 桃色成人网| 超碰爱爱爱| .操區COm| 日本高清久| 国产真人做爰视频免费| 狼人婷婷久久| 深夜激情网| 天天色天天日| 婷婷欧美激情综合| 五月婷色激情五月| 日产精品久久久久久久蜜臀| 中文字幕在线日亚洲9| 亚洲成人乱码av网站| 成人av播放| www.seqingwuyuetian| 99热日韩| 免费成人网在线观看| 丁香五月天AV在线| 色婷婷AV在线| 怡红院成人AV| av性爱在线| 五月婷婷色播| 黄网免费观看| 色五月大| 久久一品区| 五月婷婷无码专区| 五月激情影院| 激情网站五月| 色一情一乱一乱一区91Av| 色婷婷激情| 91丨九色丨国产打屁股网站| 五月天婷婷开心| 色色色欧美| 任我肏视频精品| 九九热视频网站| 99操免费视频| 丁香激情五月| 丁香久久久| 大香蕉丁香五月| 欧美日韩大黄| 99热官网| 九九这里是免费的视频5| 激情综合亚洲色婷婷五月| 色播综合| 成人久久天天x资源站| 丁香五月婷婷啪啪啪| 影音先锋综合网| 蜜桃婷婷丁香| 大大香蕉综合在线| 色婷婷久久综合丁香五月| 亚洲欧洲中文日韩久久AV乱码| 九九黄色网| 天堂中文国产| 狠狠色色| 色色操| 最熟少妇乱码| 在线成人视频免费| 久久婷色| 久久久中文| 99视频内射三四| 啊V视频在线观看| 蜜桃婷婷狠狠久久| 99热官网| www.99久久久| 99激情| 五月天色婷婷av| 久久精品国产一区二区三区四区| 桔色成人官方网站| 99久久婷婷国产综合亚洲| 激情五月天婷婷视频| 操操操B| 青草激情在线| 99热费观看| 台湾无码A片一区二区| 日本三久久| 99久在线精品99re8热| 色综合色婷色基地| 久久激情网| 狠狠 婷婷| 婷色天堂| 91丨九色丨白浆| 五月色情婷婷| 婷婷五月丁香综合| 五月婷深深爱激情网| 亚洲狠9| 天天色视频| 丁香六月啪| 亚洲婷婷五月天| 丁香六月视频免费观看| 色色五月婷婷久久| 国产精品美女久久久久AV超清| 天天操夜夜玩!| 九九精品碰| 69精品人人人人| 99热这里只有精品国产免费| 色综合播放| 六月天六月婷| 操久久网| 91久久九| 丁香五月AV| 丁香五月综合在线观看| 日本色频| 色色丁香色五月| 亚洲99热| 亚洲五月停停| 我要色综合五月婷婷| 激情婷婷视频在线| 天天爽夜夜操| 五月丁香六月婷婷亚洲激情综合| 丁香 久久| 成 人片 黄 色 大 片| 婷婷五月丁香伊人| 九九蜜臀精品| 在线资源av-超碰中文在线-成人AV| 另类小说五月天| Www,五月天| 丁香丁婷五月激情| pom538精品视频| 91 九色大美女| 色色综合网站| 五月天婷婷丁香基地在线观看| 侠女刀之记忆电影在线看免费| 大香蕉丁香| 免费无码毛片一区二区A片| 婷婷丁香五月综合| 五月天影院| 色婷婷黄色网络| 婷婷丁香社区| 91九九| 综合色影院| 五月丁香婷成人网| 99热福利| 色丁香久久| 激情五月天视频| 91视频精品99| 久99久99精品免| 99这里是精品| 爱婷婷久久视频| 丁香五月花婷婷开心| 99热欧美偷拍| 色爱99| 五月婷久久综合| 成人国产欧美大片一区| 高清无码网址| 天天干天天干天天干| 日韩在线婷婷五月天综合| 婷婷五月天xxx| 五月天无码| AV在线免费播放| 精品亚洲日韩99欧美片| 久久人视频| 欧美槡BBBB槡BBB少妇| 综合色五月| 久久综合五月天| 97香蕉久久超级碰碰高清版| 久久婷婷五月天| 五月激情六月综合| 人人色婷婷| 五月婷婷亚洲色视频| 97丁香花五月天激情小说| 丁香五月综合婷婷| 天天插天天狠| 久久视频这里都是精品| 九九九午夜影院成人| 色婷婷激情小说网| 很操日本7| 99re26视频| 色噜噜狠狠色综合伊人| 亚洲色五月天是什么| 一区二区中文字幕| 开心五月激情五月丁香五月婷婷| 五月久久丁香| 无套内射极品大美女| 亚洲另类日本| 99热久草| 色婷婷a v| 久久五月丁香| 亚洲欧美成人在线| 久久视频在线视频| 婷婷中文综合网| 影院久久久| 婷婷丁香18| 91丁香婷婷综合久久欧美| 亚洲国产另类av| 偷拍九九五月丁香婷婷| 欧美激情丁香五月| 色五月丁香在线| 色色色色色色色色色999| 天天色综合网吨吧| 色五月婷婷综合| 丁香五月社区| 91五月花丁香| 激情五月天第四色| 俺来也综合网精品一区| 这里只有精品9| 久久久27操| 国产99久| 26uuu亚洲精品国产| 夜夜爽天天干| 97五月天| 久久99久久久久久久噜噜| 婷久久| 五月天成人在线视频丁香| 色婷婷成人丁香| 丁香婷婷色六月| 婷婷午夜丁香| 思思干精品| 亚洲综合在线播放| 深爱五月亚洲| 久婷婷| 色99综合色88| 亚洲色色五月天| 五月亚洲激情| 99热综合色图| 91综合视频丁香| 99人碰碰碰| 天天色色婷婷| 狠狠色狠狠操| 丁香五月天日韩无码| 在线视频你懂得| 久久这里有精品在线观看| 99男人的天堂| 偷拍99在线视频观看| 精品久色| 免费看成人747474九号视频在线观看| 热99这就是精品视频| 日本偷拍九九九| 狠狠色噜噜狠狠色噜噜噜999| 开心激情网在线| 免费看欧美成人A片无码| 99热久97| 狠狠操狠狠干综合| 人妻丰满精品一区二区A片| 综合久久8| 开心四月婷婷在线色播播| 热99热9| 97综合在线| 久久99大全| 丁香五月激情综合啪啪| 五月丁香天堂网| 色综合香蕉| 婷婷色五月激情| 激情九九综合网| 九月丁香| 5月色婷婷| 婷婷性爱五月天| 91妻人人爽人人看片| 丁香五月天狠狠操| 天天干电影| 四川BBB搡BBB搡多人乱亂| 综合亚洲六月婷婷在线| 99热这里只有精品99| 伊人九热| 婷婷五月欧美综合| 久草热8精品视频在线观看| 色色九区| 无码动漫av| 丁香色色网| 亚洲精品乱码久久久久久按摩观| 激情四射五月天| 成年人夜夜喷水| 五月婷婷丁香啪啪| 伊人网碰碰| 99免费视频在线观看爱| 日本天堂网站99| 欧美综合婷婷欧美综| 婷婷五月天久久久| 就99这里只有精品| 99热久久这里只有精品| 五月久久亚洲| 99精彩视频在线观看| 婷婷丁香色五月久久88| 久久网址99热| 秋霞AV淫| 大香蕉手机视频| 中文字幕成人| 色婷婷丁香六月| 风流少妇A片一区二区蜜桃| 日本三级黄色大片| 欧美一级色| 婷婷五月天,影院| 六月成人网| 五月婷婷五月天亚洲无码| 欧美性爱丁香五月| 思思热在线精品视频| 九九色区| 日日夜夜干| 激情另类综合| 91色色五月天| 思思热精品在线| 伊人色综合影院视频| 中文字幕在线日亚州9| 开心六月丁香五月婷婷| 五月天婷婷久久| 婷婷五月综合视频| www99在线观看视频| 激情婷婷六月天| 日韩AAA| 丁香97综合| 婷婷射综合| 热的国产,热的综合,热的有码 | 99视频这里有精品| 91日本在线| 98国产精品综合一区二区三区| 五月天另类小说久久小说网| 色欲九区| 五月婷婷av在线| WWW,五月| 美女激情婷婷| 性色综合网| 久久激情五月| 五月综合激情视频在线| 色五月之第四色| 日噜噜色| 五月婷婷基地| 思思精品视频| 五月婷久久| 97资源碰碰在线| 亚洲成av人影院| 丁香六月无码播放| 伍月婷丁香婷| 亚洲成人无码网站| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 99热成人在线观看| 开心深爱五月天| 色九月国产| 另类图片五月天| 成人五月天丁香婷| 99热青青草原| 激情婷婷五月天。| 婷婷终合色图| 亚洲中文AV| 能看的av| 欧洲不卡视频| 丁香五月,激情五月,深爱五月| 色婷婷香蕉| 久久国产AV| 久久538| h在线看免费版在线看| 久久婷婷欧美| www.五月天婷婷.com| 久久9999| 激情五月天色色色| 久9综合| 国产午夜精品一区二区| 婷婷五月丁香久久| 丁香五月婷婷色五月| 亚洲成人一区| 综合色影| 国产九九一区二区三区| 欧美日本99| 五月丁香花成人社区| 色五月首页| 人妻人人操| 99玖玖在线视频| 色色色色色色色色网站| 丁香六月视频| 丁香五月成人论坛| 亚洲AV综合网| 激情婷婷五月| 日本啪啪网| 99久久玖玖| 婷婷 月 丁香| 噜噜久| 青青草原福利在线| 色五月婷婷狠狠撸| 婷婷五月综合婷婷| 激情五婷精品网在线观看网址| 99热在线中文字幕| 在线色色| 人人叉久| 婷婷五月色影视先锋| 欧洲精品爱爱| 丁香九九九九| 婷婷丁香五月天哟啪| 日韩在线成人电影| www激情网站| 婷婷五月天黄色网址| 精品99视频| 第五婷婷伊人丁香色| 91色综合网| 九九色人| 久久婷婷色情7777网站| 婷婷91| 综合色网站| 无码人妻电影| 日韩狠狠色婷婷| 草婷婷在线| 日夜夜久久| 99精彩视频| 五月婷婷综合激情网| 开心激情综合| 67194国产| 99精品视频在线观看| 美女久久天堂| 色婷婷狠狠久久YY| 成人片在线播放| 丁香久色| 六月丁香VA| 99re热在线观看| 狠狠草在线观看| 亚洲精品久久久久久久久久飞鱼| 有码一区二区三区| 亚洲综合视频网| 国产婷婷色综合AV蜜臀AV| 99婷五月| 日本三级日本三级三级人妇四虎| 久热这里只有精品在线观看 | 狠狠操狠狠插| 99热一本久道| 桃色Av色哟哟| www.丁香五月| 成人五月丁香社区| 91 影音先锋| 五月亭亭欧美女人| 九九热10| 天天影视色综合网| 97碰碰在线看视频免费| 四川BBB搡BBB爽爽视频| 日本3级片一区2区| 六月丁香射婷婷欧美色图片 | 99re视频在线播放| 亚洲亚洲人成综合网络 | 天天色伊人| 色婷婷激情| 大香蕉啪啪啪| 91免费试看| 一本久道综合色婷婷五月| 狠狠色丁婷婷日日,伊人激情综合网| 深爱激情小说五月婷婷| 亚洲成人超碰| 性爱激情五月| 五月丁香网视频| 欧美色色网| 久久综合五月天| 激情五月综合第一页| 午夜丁香六月婷| 色玖玖综合网| 色色色五月天婷婷| 亚洲综合视频网| 丁香五月婷婷欧美成人色图| 国产欧洲欧洲精品久久| 精品99在线观看| 天天色天天噜| 天天射影院| 中文字幕高清av| 五月天色婷婷视频| www.激情五月| 99热碰碰热| 久久六月综合| 天天做天天爽| 九九热a| 国产日韩欧美性爱| 色色丁香婷婷五月天| 婷婷丁香77777| 日韩啪啪视频| 9久热在线视频精品| 伊人六月丁香婷婷| 午夜一区| 黄色aaaaa| 色欲天天综合| 性爱五月丁香| 五月婷丁香| 亚洲精品又粗又大又爽A片 | 99热8| 天天综合久久| 婷婷九月丁香| 久久久久亚洲AV成人无码电影| 丁香五月色五月| 夜夜爱爱亚洲| 欧美五月婷婷| 在线观看日韩12345区| WWW.99热| 亚洲综合视频八| Va另类视频| 免费色婷婷| 色日本网| 99在线爽| 天天澡天天狠天天天做| 色婷婷激情| 97精品自拍| 亚洲综合婷婷五月| 成片免费观看视频大全| 伊人青草成人| 97精品人人A片免费看| 欧美婷婷五月激情| 97碰碰叉| 99热这里只有精品2| 婷婷性爱五月天丁香网| 伊人玖玖婷婷| 日韩欧洲亚洲| 操99| 青草热视频这里只有精品| 九九久久玖玖爱| 性爱视频久久| 97狠狠色| www.婷婷五月| 婷婷亚洲丁香五月| 色婷婷在线视频观看| 九九热在线视频观看| 日本熟妇精品99| 99操视频| 天天夜天天色天天| 久久久天堂国产精品女人| 99这里只有精品|v| 伊人色综合影院视频| 泰州成人视频| 日韩在线五月天婷婷| 嫩草视频观看| 99视频| 久久99热这里| 99久久精品亚洲综合| 亚洲综合99| eeuus五月婷| 丁香六月天婷婷| 久久精典| 婷婷精品在线| 丁香情色五月| 婷婷大香蕉| 操你av| 婷婷情色五月天| www久久久久久久久久久| 终合激情网| 中文字幕永久免费| 日韩有码一区| 精品人妻一区| 丁香五月激情啪啪| 亚洲小视频免费播放| 操碰99在线视频观看| 激情综合婷婷| 五月天婷网| 色情性爱视频网址| 97碰碰人人视频| www.99热| 欧美 日韩 成人在线| 婷婷丁香五月天色区| 九九人人看| 中字幕视频在线永久在线观看免费| 91肏| 丁香五月天婷婷中文| 九九99热| 久9草在线观看视频| 久久久中文| yiqicaoav| 97人人操人人干| 久久人妻精品| 99精品7| 九九国产视频| 久久久99婷婷久久久久久| 丰满少妇乱A片无码| 五月婷婷黄色| www.91婷婷| 五月婷婷婷婷婷| 天天日天天狠狠操| 国产一级片| 9久9久| 99综合五月免费视频色婷婷| 色情五月综合婷婷| 婷婷五月综合社区| 欧美色爱五月天| 成人日韩欧美| 国产精品视频| 月色色综合婷婷网| 艹色18p| 久九男女天堂| www婷婷| 久色资源| 亚洲免费看片| 91.com男女操| 久草a片| 色99网| 99色 色| 五月天婷婷丁香社区| 婷婷六月爽| 开心久久xxx色| 亚洲va日| 五月婷婷激情综合在线| 91九色首页| 丁香五月综合高清在线| 色五月色五天色情网| 久久精品夜色噜噜亚洲a∨| 丁香九月激情久久| 综合久久六月| 婷婷五月精品中文| 被强行糟蹋的女人A片| 亚洲爆乳无码精品AAA片蜜桃| 久久婷婷五月综合| 99热最新| 激情深爱五月天| 综合色99| 天天弄天天操| 99视频在线9| 九九99精品视品| 91干婷婷| 九九99在线| 丁香久月婷| 婷婷色五月大香蕉在线观看| 99在线视频资源| 婷婷五月av| 99热99ai| anquye五月| 亚洲色A| 五月草视频| 日韩在线视频中文字幕| 婷婷五月天综合网| 99精品在线| 熟妇无码乱子成人精品| 亚洲视频一区| 人妻熟人中文字幕一区二区 | 中文字幕在线aⅴ免费观看| 久久五月婷6 9| 国产免费一区二区三州老师F1……| 99久久偷拍视频| AV在线收看| 9久久久久久久久久久| 包操45分钟网站| 婷婷五月天激情综合| 亚洲精品性色| 五月丁香亭亭操逼| 99久久这里只有精品| 天天色粽合合合合合合合| 五月婷婷综合天天操| 五月婷婷丁香六月| 亚洲sesesese| 99成人免费热视频| 97色久| 色色色综合| 日韩免费99| 亚洲婷婷在线播放十月| 伊人超碰| 国产综合色婷婷精品久久| 亚洲九九夜夜| 亚洲蜜桃精久久久久久久久久久久| 一区二区传媒视频| 日本欧美在线| 色高清无码视频| 99热官网| 狠狠综合网| 亚州操逼网| 五月丁香啪啪拍| 性爱视频99| 国产一区二区三区影院| 91久久国产综合久久| 欧美色色色色色| 色婷婷五月天不卡| 色婷婷综合网| 欧美日韩成人h| 久久视屏这里只有久久| 五月婷婷福利| 99在线69| 91在线资源| 玖玖综合色| 六月婷婷久久| 九九色逼| 九九热这里只有精品9| 欧美影院婷婷| 99久久玖玖| 狠狠搞狠狠操| 激情性爱五月| 天天精品视频在线观看视频| www.超碰在线| 97碰免费精采视频| WWW、日本色丁香、co m| 在线中文字幕视频| 99在线免费视频播放| 天天玩夜夜操天天爽| 亚洲色夜| 人人操超碰| 欧美激情 日韩无码 婷婷 五月天| 激情久久久久久久久| 丁香婷婷狠狠97| 五月丁香在线视频观看| 亚洲六月婷婷| 国产亚洲成人综合| 激情视频婷婷五月花| 丁香桃色网| 激情内射人妻1区2区3区| 天天日天天舔天天摸| 狠狠干在线| 懂色av粉嫩AV蜜臀AV| 狠狠干总合| 色色色色色网| 欧美激情-区二区三区| 婷婷五月天性| 五月丁香六月激情综合| 婷婷激情丁香五月婷婷激情丁香五月婷婷| 五月天亚洲综合网| 婷婷五月丁香国产| 99视频网| 亚洲狠狠丁香婷婷香蕉| 精品综合五月| 曰韩少妇内射免费播放| 99免费视频久久| 五月丁香啪啪| 九色视频91| ww久久| PORNY九色9l自拍视频成人| 久久亚洲激情五码| 97超碰欧美中文字幕| 五月丁香六月花| 极品人妻VIDEOSSS人妻| 天天综合天天玩夜夜玩天天玩夜夜玩| 日韩aaaaa| 六月撸婷婷| 免费精品99| 婷婷丁香五月激情密臀av| 五月婷婷激情五月| 亚洲综合在线网站| 我要射综合| 99ri精品在线观看| 五月丁香婷婷成人综合网| AV六月丁香| 一起草性爱不卡视频| 五月停亭久久电影| 色五月成人| 99WWW免费视频| 国产成人AV在线| 六月99天天婷婷激情综合| 色色色9| 久久亚洲婷婷综合色五月| 久热伊人| 久久人妻在线| 国产性爱色| 五月婷婷啪啪| 中文字幕不卡+婷婷五月| 大香蕉婷婷五月天| 亚洲色爽| 99热8在线| 日韩五月丁香| 超碰成人在线观看| 丁香五月在线| 婷婷五月AV| 99欧美三级视频| 中文AV在线观看| 人人爱干人人爱草| AV片一区在线观看| z色五月播播久久| 五月婷婷深深爱| 少妇达人正片在线播放_ikun_福利吧| 伊人久久婷| 婷婷成人五月天| 五月丁香六月婷婷视频| 看全色黄大色大片| 99综合成人视频在线观看| 大香蕉综合| 天天色天天色天天色天天色天天色天天色| A短视频免费在线观看| 丁香五月婷婷色情综合| 91视频五月丁香| 丁香五月伊人| 久热这里只有精品99re,久热这里只有精品7| 九九久久偷拍| 色综合色五月| 婷婷激情网五月天| 亚洲碰碰碰| 国产67194| 俺去也五月| 久草婷婷| 久热在线观看视频9| 日韩啪啪网| 久久av电影| 97色婷婷在线观看| 久热99| 成人免费在线电影| 婷婷丁香五月天综合网| 色色五月天婷婷丁香| 五月婷丁香| 丁香五月欧美激情| 激情综合网五月在线播放| 熟女强人妻一区二区三区四区无| WWW.99视频| 五月婷婷之六月丁香| 成人电影一区| 中文字幕人妻一区二区| 色色无码| 丁香五月天欧美| 婷婷丁香九月| 丁香五月综合激情久久潮喷| 五月丁香综合在线| 五月综合色| 婷婷综合网伊人| 五月丁香六月婷婷,婷| 99玖玖视频| 欧美性生交XXXXX无码小说| 婷婷五月天久久| 婷婷.com| 噜噜噜色噜噜| 黄色99视频| 久久婷婷网站| 综合激情四射一theav| 精品一二三区久久AAA片| 91婷婷丁香| 丁香五月亚洲无码| 色婷丁香五月| 婷婷激情人妻| 久久九九亚洲| 国产露脸150部国语对白| 能看的AV| 人妻久久婷婷| 午夜婷婷久久 | 久久天堂女人| 日韩青青| 欧美黑人巨大性生话| 五月丁香六月婷婷激情网| 天天日日综合| 亚洲人妻一区二区| 六月婷婷日| 久久无码激情视频| 亭亭五月丁香综合欧美| 96精品久久久久久久久| 九九人人精品| 亚洲免费在线观看岛国| 亚洲无码AV片| 婷婷丁香五月社区亚洲| 深爱婷婷网| 色五月播五月| 97天堂| 亚洲久久激情| 五夜婷婷| 99色在线视频观看| 天堂A∨在线| 色婷婷久久| 97干网站| jiujiu热在线视频| 激情另类综合| 五月丁香六月婷婷综合在线| 国产成人AV在线| 无码动漫AV| 秋霞AV淫| 99超级碰碰| 国产成人在线精品| 久久九九玖玖| 偷偷狠狠久久婷婷五月天| AA丁香综合激情| 秋霞学生妹一二级| 欧洲精品欧洲情| 婷婷六月天激情影院| 久久视频九九视频| 丁香五月婷婷影院| 免费观看的婷婷五月视频在线| 婷婷丁香五月综合免费视频百花| 韩国激情五月天综合网| 亚洲午夜视频| 色色色色色色色色综合网| 9久久精品| 办公室少妇激情呻吟A片在线观看| 91se精品国产| 超碰自拍天堂| 婷婷五月天成人网| 九九精品丁香花| 婷婷五月天小说| 丁香九月久久| 色情五月综合婷婷| 电影《战争与艾拉》免费观看| 丁香六月中文| 丁香婷在线| 丁香九九九九| 1000部毛片A片免费观看| 天天日天天色| 亚洲欧洲另类图片| 婷婷五月丁香A∨| 久久久这里都是精品| 成人小说 五月天 婷婷| 亚洲视频伍月婷婷| www.99在线| 色综合区| 亚洲日韩操B| …亚洲黄色在线播放日韩、av中文a…| 91碰| 久久国产精品乱子伦_靑青草…| 色六月视频| 婷婷五月色综合| 狠狠狠狠狠| 久热九九| 久久女婷| 亚洲午夜视频| 成人国产综合| 久久婷婷久久| 婷婷娌伦网| 国内一级精品| 丁香六月婷婷| 久久久久久99精品无码| 五月www| 青草视频在线播放| 新久久五月天激情| www.minyis.com【JT】实力收量可预付QQ2101460746 | 婷婷色五天| 久操人| 婷婷五月天在线观看| 婷婷丁香色性爱| 免费精品99| 日本丁香久在线| 棕合影院色色| 婷婷人人操| 99热在线精品观看| 欧美精品999| 99精品视频在线观看| 国产精品久久久99视频| 久热无码| 狠狠婷婷爱| 婷婷在线中文字幕| 五月天激情.com| 96色婷婷| 日本欧美国产| 成人免费视频一区| 欧美色性色好| 丁香婷婷色九月| 五月天色丁香| 久久天堂女人| 99热在线播放| 色婷操逼| 激情五月综合网最新| 91超碰人人操| 婷婷爱五月| 一本道综合网| 久久日婷婷| 色久天| 4399亚洲视频| 99在线精品观看99| 亚洲丁香五月深爱五月| 九九婷| 久久久无码精品成人A片小说| 激情伊人网| 欧美精品18| 五月丁香六月婷婷不卡免费无码| 国产在线网址1| 婷婷五月丁香伊人网| www.99免费视频| 99精色| 五月色情婷婷开心五月色情| 国产一级黄色影片,| 日日操夜夜爽| 九九热亚洲中文在线观看免费| AA片在线观看视频在线播放| 久热网站| 久久精品五月天| 婷婷成人基地| 亚洲va欧洲va国产va不卡| 婷婷情色五月天| 九色PORNY9l原创自拍| 五月婷婷开心爱| 久久五月天激情婷婷| 丁香婷婷五月色成人网站| 5月婷婷6月丁香aV| 大香蕉伊然在亚洲90| 激情小说五月天| 日韩av干| 婷婷爱爱蜜臀天天操| 九九久久99| 五月丁香做爱视频|