中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

完美利用Yii2微信后臺開發的系列總結
來源:易賢網 閱讀:1506 次 日期:2016-08-12 14:45:59
溫馨提示:易賢網小編為您整理了“完美利用Yii2微信后臺開發的系列總結”,方便廣大網友查閱!

網上有很多關于YII2.0微信開發教程,但是太過復雜凌亂,所以今天在這里給大家整理總結利用Yii2微信后臺開發的系列了,給需要的小伙伴們參考。

一:接入微信

Yii2后臺配置

1.在app/config/params.php中配置token參數

return [

 //微信接入

 'wechat' =>[

 'token' => 'your token',

 ],

];

2.在app/config/main.php中配置路由

因為接口模塊使用的RESTful API,所以需要定義路由規則。

'urlManager' => [

 'enablePrettyUrl' => true,

 'enableStrictParsing' => true,

 'showScriptName' => false,

 'rules' => [

 [

  'class' => 'yii\rest\UrlRule',

  'controller' => 'wechat',

  'extraPatterns' => [

  'GET valid' => 'valid',

  ],

 ],

 ],

],

3.在app/controllers中新建WechatController

<?php

namespace api\controllers;

use Yii;

use yii\rest\ActiveController;

class WechatController extends ActiveController

{

 public $modelClass = '';

 public function actionValid()

 {

 $echoStr = $_GET["echostr"];

 $signature = $_GET["signature"];

 $timestamp = $_GET["timestamp"];

 $nonce = $_GET["nonce"];

 //valid signature , option

 if($this->checkSignature($signature,$timestamp,$nonce)){

  echo $echoStr;

 }

 }

 private function checkSignature($signature,$timestamp,$nonce)

 {

 // you must define TOKEN by yourself

 $token = Yii::$app->params['wechat']['token'];

 if (!$token) {

  echo 'TOKEN is not defined!';

 } else {

  $tmpArr = array($token, $timestamp, $nonce);

  // use SORT_STRING rule

  sort($tmpArr, SORT_STRING);

  $tmpStr = implode( $tmpArr );

  $tmpStr = sha1( $tmpStr );

  if( $tmpStr == $signature ){

  return true;

  }else{

  return false;

  }

 }

 }

}

微信公眾號后臺配置

在微信公眾號后臺配置URL和Token,然后提交驗證即可。

URL:http://app.demo.com/wechats/valid

Token:your token

二:獲取用戶信息

用戶表設計

代碼如下:

CREATE TABLE `wechat_user` (

  `id` int(11) NOT NULL,

  `openid` varchar(255) COLLATE utf8_unicode_ci NOT NULL,

  `nickname` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '微信昵稱',

  `sex` tinyint(4) NOT NULL COMMENT '性別',

  `headimgurl` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '頭像',

  `country` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '國家',

  `province` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '省份',

  `city` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '城市',

  `access_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL,

  `refresh_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL,

  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ALTER TABLE `wechat_user`

  ADD PRIMARY KEY (`id`);

獲取用戶信息的相關接口

1.用戶授權接口:獲取access_token、openId等;獲取并保存用戶資料到數據庫

代碼如下:

public function actionAccesstoken()

{

    $code = $_GET["code"];

    $state = $_GET["state"];

    $appid = Yii::$app->params['wechat']['appid'];

    $appsecret = Yii::$app->params['wechat']['appsecret'];

    $request_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code';

    //初始化一個curl會話

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $request_url);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $result = curl_exec($ch);

    curl_close($ch);

    $result = $this->response($result);

    //獲取token和openid成功,數據解析

    $access_token = $result['access_token'];

    $refresh_token = $result['refresh_token'];

    $openid = $result['openid'];

    //請求微信接口,獲取用戶信息

    $userInfo = $this->getUserInfo($access_token,$openid);

    $user_check = WechatUser::find()->where(['openid'=>$openid])->one();

    if ($user_check) {

        //更新用戶資料

    } else {

        //保存用戶資料

    }

    //前端網頁的重定向

    if ($openid) {

        return $this->redirect($state.$openid);

    } else {

        return $this->redirect($state);

    }

}

2.從微信獲取用戶資料

代碼如下:

public function getUserInfo($access_token,$openid)

{

    $request_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN';

    //初始化一個curl會話

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $request_url);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $result = curl_exec($ch);

    curl_close($ch);

    $result = $this->response($result);

    return $result;

}

3.獲取用戶資料接口

public function actionUserinfo()

{

 if(isset($_REQUEST["openid"])){

  $openid = $_REQUEST["openid"];

  $user = WechatUser::find()->where(['openid'=>$openid])->one();

  if ($user) {

   $result['error'] = 0;

   $result['msg'] = '獲取成功';

   $result['user'] = $user;

  } else {

   $result['error'] = 1;

   $result['msg'] = '沒有該用戶';

  }

 } else {

  $result['error'] = 1;

  $result['msg'] = 'openid為空';

 }

 return $result;

}

三:微信支付

1.微信支付接口:打包支付數據

代碼如下:

public function actionPay(){

    if(isset($_REQUEST["uid"])&&isset($_REQUEST["oid"])&&isset($_REQUEST["totalFee"])){

        //uid、oid、totalFee

        $uid = $_REQUEST["uid"];

        $oid = $_REQUEST["oid"];

        $totalFee = $_REQUEST["totalFee"];

        $timestamp = time();

        //微信支付參數

        $appid = Yii::$app->params['wechat']['appid'];

        $mchid = Yii::$app->params['wechat']['mchid'];

        $key = Yii::$app->params['wechat']['key'];

        $notifyUrl = Yii::$app->params['wechat']['notifyUrl'];

        //支付打包

        $wx_pay = new WechatPay($mchid, $appid, $key);

        $package = $wx_pay->createJsBizPackage($uid, $totalFee, $oid, $notifyUrl, $timestamp);

        $result['error'] = 0;

        $result['msg'] = '支付打包成功';

        $result['package'] = $package;

        return $result;

    }else{

        $result['error'] = 1;

        $result['msg'] = '請求參數錯誤';

    }

    return $result;

}

2.接收微信發送的異步支付結果通知

代碼如下:

public function actionNotify(){

    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

    $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

    //

    if ($postObj === false) {

        die('parse xml error');

    }

    if ($postObj->return_code != 'SUCCESS') {

        die($postObj->return_msg);

    }

    if ($postObj->result_code != 'SUCCESS') {

        die($postObj->err_code);

    }

    //微信支付參數

    $appid = Yii::$app->params['wechat']['appid'];

    $mchid = Yii::$app->params['wechat']['mchid'];

    $key = Yii::$app->params['wechat']['key'];

    $wx_pay = new WechatPay($mchid, $appid, $key);

    //驗證簽名

    $arr = (array)$postObj;

    unset($arr['sign']);

    if ($wx_pay->getSign($arr, $key) != $postObj->sign) {

        die("簽名錯誤");

    }

    //支付處理正確-判斷是否已處理過支付狀態

    $orders = Order::find()->where(['uid'=>$postObj->openid, 'oid'=>$postObj->out_trade_no, 'status' => 0])->all();

    if(count($orders) > 0){

        //更新訂單狀態

        foreach ($orders as $order) {

            //更新訂單

            $order['status'] = 1;

            $order->update();

        }

        return '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';

    } else {

        //訂單狀態已更新,直接返回

        return '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';

    }

}

3.微信支付類 WechatPay.php

代碼如下:

<?php

namespace api\sdk;

use Yii;

class WechatPay

{

    protected $mchid;

    protected $appid;

    protected $key;

    public function __construct($mchid, $appid, $key){

        $this->mchid = $mchid;

        $this->appid = $appid;

        $this->key = $key;

    }

    public function createJsBizPackage($openid, $totalFee, $outTradeNo, $orderName, $notifyUrl, $timestamp){

        $config = array(

            'mch_id' => $this->mchid,

            'appid' => $this->appid,

            'key' => $this->key,

        );

        $unified = array(

            'appid' => $config['appid'],

            'attach' => '支付',

            'body' => $orderName,

            'mch_id' => $config['mch_id'],

            'nonce_str' => self::createNonceStr(),

            'notify_url' => $notifyUrl,

            'openid' => $openid,

            'out_trade_no' => $outTradeNo,

            'spbill_create_ip' => '127.0.0.1',

            'total_fee' => intval($totalFee * 100),

            'trade_type' => 'JSAPI',

        );

        $unified['sign'] = self::getSign($unified, $config['key']);

        $responseXml = self::curlPost('https://api.mch.weixin.qq.com/pay/unifiedorder', self::arrayToXml($unified));

        $unifiedOrder = simplexml_load_string($responseXml, 'SimpleXMLElement', LIBXML_NOCDATA);

        if ($unifiedOrder === false) {

            die('parse xml error');

        }

        if ($unifiedOrder->return_code != 'SUCCESS') {

            die($unifiedOrder->return_msg);

        }

        if ($unifiedOrder->result_code != 'SUCCESS') {

            die($unifiedOrder->err_code);

        }

        $arr = array(

            "appId" => $config['appid'],

            "timeStamp" => $timestamp,

            "nonceStr" => self::createNonceStr(),

            "package" => "prepay_id=" . $unifiedOrder->prepay_id,

            "signType" => 'MD5',

        );

        $arr['paySign'] = self::getSign($arr, $config['key']);

        return $arr;

    }

    public static function curlGet($url = '', $options = array()){

        $ch = curl_init($url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($ch, CURLOPT_TIMEOUT, 30);

        if (!empty($options)) {

            curl_setopt_array($ch, $options);

        }

        //https請求 不驗證證書和host

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

        $data = curl_exec($ch);

        curl_close($ch);

        return $data;

    }

    public static function curlPost($url = '', $postData = '', $options = array()){

        if (is_array($postData)) {

            $postData = http_build_query($postData);

        }

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($ch, CURLOPT_POST, 1);

        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

        curl_setopt($ch, CURLOPT_TIMEOUT, 30); //設置cURL允許執行的最長秒數

        if (!empty($options)) {

            curl_setopt_array($ch, $options);

        }

        //https請求 不驗證證書和host

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

        $data = curl_exec($ch);

        curl_close($ch);

        return $data;

    }

    public static function createNonceStr($length = 16){

        $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

        $str = '';

        for ($i = 0; $i<$length; $i++){

            $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);

        }

        return $str;

    }

    public static function arrayToXml($arr){

        $xml = "<xml>";

        foreach ($arr as $key => $val){

            if (is_numeric($val)) {

                $xml .= "<" . $key . ">" . $val . "</" . $key . ">";

            } else {

                $xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";

            }

        }

        $xml .= "</xml>";

        return $xml;

    }

    public static function getSign($params, $key){

        ksort($params, SORT_STRING);

        $unSignParaString = self::formatQueryParaMap($params, false);

        $signStr = strtoupper(md5($unSignParaString . "&key=" . $key));

        return $signStr;

    }

    protected static function formatQueryParaMap($paraMap, $urlEncode = false){

        $buff = "";

        ksort($paraMap);

        foreach ($paraMap as $k => $v){

            if (null != $v && "null" != $v) {

                if ($urlEncode) {

                    $v = urlencode($v);

                }

                $buff .= $k . "=" . $v . "&";

            }

        }

        $reqPar = '';

        if (strlen($buff)>0) {

            $reqPar = substr($buff, 0, strlen($buff) - 1);

        }

        return $reqPar;

    }

}

四:獲取JS-SDK的config參數

根據微信公眾平臺開發者文檔:

所有需要使用JS-SDK的頁面必須先注入配置信息,否則將無法調用(同一個url僅需調用一次,對于變化url的SPA的web app可在每次url變化時進行調用,目前Android微信客戶端不支持pushState的H5新特性,所以使用pushState來實現web app的頁面會導致簽名失敗,此問題會在Android6.2中修復)。

即:

代碼如下:

wx.config({

    debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。

    appId: '', // 必填,公眾號的唯一標識

    timestamp: , // 必填,生成簽名的時間戳

    nonceStr: '', // 必填,生成簽名的隨機串

    signature: '',// 必填,簽名,見附錄1

    jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2

});

1.微信支付類 WechatPay.php

代碼如下:

<?php

namespace api\sdk;

use Yii;

class WechatPay

{

    public function getSignPackage($url) {

        $jsapiTicket = self::getJsApiTicket();

        $timestamp = time();

        $nonceStr = self::createNonceStr();

        // 這里參數的順序要按照 key 值 ASCII 碼升序排序

        $string = "jsapi_ticket=".$jsapiTicket."&noncestr=".$nonceStr."×tamp=".$timestamp."&url=".$url;

        $signature = sha1($string);

        $signPackage = array(

            "appId"     => $this->appid,

            "nonceStr"  => $nonceStr,

            "timestamp" => $timestamp,

            "url"       => $url,

            "signature" => $signature,

            "rawString" => $string

        );

        return $signPackage;

    }

    public static function getJsApiTicket() {

        //使用Redis緩存 jsapi_ticket

        $redis = Yii::$app->redis;

        $redis_ticket = $redis->get('wechat:jsapi_ticket');

        if ($redis_ticket) {

            $ticket = $redis_ticket;

        } else {

            $accessToken = self::getAccessToken();

            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=".$accessToken;

            $res = json_decode(self::curlGet($url));

            $ticket = $res->ticket;

            if ($ticket) {

                $redis->set('wechat:jsapi_ticket', $ticket);

                $redis->expire('wechat:jsapi_ticket', 7000);

            }

        }

        return $ticket;

    }

    public static function getAccessToken() {

        //使用Redis緩存 access_token

        $redis = Yii::$app->redis;

        $redis_token = $redis->get('wechat:access_token');

        if ($redis_token) {

            $access_token = $redis_token;

        } else {

            $appid = Yii::$app->params['wechat']['appid'];

            $appsecret = Yii::$app->params['wechat']['appsecret'];

            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;

            $res = json_decode(self::curlGet($url));

            $access_token = $res->access_token;

            if ($access_token) {

                $redis->set('wechat:access_token', $access_token);

                $redis->expire('wechat:access_token', 7000);

            }

        }

        return $access_token;

    }

    public static function curlGet($url = '', $options = array()){

        $ch = curl_init($url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($ch, CURLOPT_TIMEOUT, 30);

        if (!empty($options)) {

            curl_setopt_array($ch, $options);

        }

        //https請求 不驗證證書和host

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

        $data = curl_exec($ch);

        curl_close($ch);

        return $data;

    }

    public static function curlPost($url = '', $postData = '', $options = array()){

        if (is_array($postData)) {

            $postData = http_build_query($postData);

        }

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($ch, CURLOPT_POST, 1);

        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

        curl_setopt($ch, CURLOPT_TIMEOUT, 30); //設置cURL允許執行的最長秒數

        if (!empty($options)) {

            curl_setopt_array($ch, $options);

        }

        //https請求 不驗證證書和host

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

        $data = curl_exec($ch);

        curl_close($ch);

        return $data;

    }

    public static function createNonceStr($length = 16){

        $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

        $str = '';

        for ($i = 0; $i<$length; $i++){

            $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);

        }

        return $str;

    }

}

2.獲取config參數接口

public function actionConfig(){

 if (isset($_REQUEST['url'])) {

 $url = $_REQUEST['url'];

 //微信支付參數

 $appid = Yii::$app->params['wechat']['appid'];

 $mchid = Yii::$app->params['wechat']['mchid'];

 $key = Yii::$app->params['wechat']['key'];

 $wx_pay = new WechatPay($mchid, $appid, $key);

 $package = $wx_pay->getSignPackage($url);

 $result['error'] = 0;

 $result['msg'] = '獲取成功';

 $result['config'] = $package;

 } else {

 $result['error'] = 1;

 $result['msg'] = '參數錯誤';

 }

 return $result;

}

以上就是利用Yii2微信后臺開發全部過程及示例代碼,希望本文對大家基于php的微信公眾平臺開發有所幫助。

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
26uuu国产一区二区三区| 久久精品国产免费看久久精品| 亚洲综合偷拍欧美一区色| 老色鬼精品视频在线观看播放| 不卡一卡二卡三乱码免费网站| 91精品欧美一区二区三区综合在| 欧美激情在线观看视频免费| 7777精品伊人久久久大香线蕉经典版下载 | 成人高清免费观看| 91精品国产日韩91久久久久久| 亚洲欧洲日产国产综合网| 麻豆传媒一区二区三区| 精品视频在线视频| 亚洲蜜臀av乱码久久精品| 国产91露脸合集magnet| 精品久久久久久亚洲综合网| 三级久久三级久久久| 在线免费观看日本一区| 亚洲日本va在线观看| 国产精品99久久久久久久女警| 51精品国自产在线| 五月天中文字幕一区二区| 一本大道久久a久久精品综合| 国产亚洲婷婷免费| 国产成人精品综合在线观看| 久久蜜桃香蕉精品一区二区三区| 麻豆专区一区二区三区四区五区| 欧美精品丝袜中出| 首页国产欧美日韩丝袜| 678五月天丁香亚洲综合网| 亚洲一区二区在线免费观看视频| 99国内精品久久| 亚洲精品久久久蜜桃| 在线免费观看日韩欧美| 亚洲一区二区在线播放相泽| 欧美日韩精品久久久| 五月婷婷激情综合| 日韩一级高清毛片| 国产美女精品在线| 中文字幕在线一区免费| 91免费观看视频在线| 亚洲精品大片www| 欧美日韩免费一区二区三区| 日韩av网站在线观看| 日韩三级免费观看| 黄色小说综合网站| 国产精品久久久久久久岛一牛影视 | 欧美电影影音先锋| 久久精品免费观看| 国产日韩精品一区二区浪潮av| 成人高清免费观看| 亚洲一区二区三区美女| 这里只有精品免费| 国产成人在线色| 日韩美女久久久| 91精品国产欧美一区二区18| 狠狠狠色丁香婷婷综合激情 | 精品久久久久久久一区二区蜜臀| 国产精品88888| 亚洲品质自拍视频| 欧美一区二区在线播放| 国产乱色国产精品免费视频| 国产精品久久久久久久午夜片| 欧美日韩中文一区| 国产一区91精品张津瑜| 亚洲美女偷拍久久| 日韩精品一区二区在线| 91在线精品一区二区| 亚洲va欧美va人人爽午夜 | 宅男在线国产精品| 成人综合日日夜夜| 日韩电影一区二区三区| 国产精品久久久久影院老司| 555夜色666亚洲国产免| 波多野结衣视频一区| 人禽交欧美网站| 亚洲人成网站影音先锋播放| 日韩一级欧美一级| 欧美在线观看一二区| 韩日精品视频一区| 亚洲成在线观看| 亚洲欧美在线观看| 精品欧美一区二区久久| 欧美性大战xxxxx久久久| 国产成人精品三级| 看电视剧不卡顿的网站| 五月天亚洲精品| 18成人在线观看| 日本一区二区三区在线不卡| 欧美一区二区网站| 欧美日韩精品是欧美日韩精品| 国产不卡视频在线播放| 男男视频亚洲欧美| 亚洲国产毛片aaaaa无费看| 国产精品福利影院| 国产欧美1区2区3区| 日韩午夜三级在线| 欧美美女bb生活片| 欧美影院午夜播放| 91久久久免费一区二区| 成人91在线观看| 不卡av在线网| 成人动漫一区二区三区| 国产69精品久久久久毛片| 韩国v欧美v亚洲v日本v| 精品影视av免费| 久久99在线观看| 国内精品写真在线观看| 久久99精品久久久久久国产越南| 亚洲国产aⅴ成人精品无吗| 亚洲一区二区高清| 亚洲国产欧美一区二区三区丁香婷| 亚洲男人的天堂网| 亚洲综合一区二区| 性做久久久久久| 天堂一区二区在线免费观看| 亚洲国产精品久久艾草纯爱| 午夜a成v人精品| 日本午夜一区二区| 美女尤物国产一区| 国产精品中文字幕日韩精品 | 中文字幕在线一区| 一区二区三区免费网站| 午夜精品影院在线观看| 午夜精品久久久久久不卡8050| 亚洲国产精品久久不卡毛片| 亚州成人在线电影| 精品亚洲国产成人av制服丝袜| 精品中文字幕一区二区小辣椒| 狠狠狠色丁香婷婷综合激情| 国产69精品久久久久777| 99精品视频免费在线观看| 色综合天天综合色综合av| 欧美三级日韩在线| 日韩一区二区三区四区五区六区| 久久综合色一综合色88| 国产精品网曝门| 亚洲国产日韩一级| 国产在线视频精品一区| 99re热这里只有精品免费视频| 欧美性淫爽ww久久久久无| 欧美一级日韩免费不卡| 欧美国产1区2区| 亚洲男人的天堂一区二区| 石原莉奈在线亚洲二区| 风间由美性色一区二区三区| 欧美在线观看18| wwww国产精品欧美| 亚洲国产另类精品专区| 国产一区高清在线| 在线精品视频免费播放| 久久久蜜臀国产一区二区| 亚洲特级片在线| 久久99精品久久久久久动态图| 成人的网站免费观看| 欧美一区二区免费视频| 国产精品久久久久婷婷二区次| 日韩精品电影一区亚洲| av中文字幕不卡| 日韩一区二区三区三四区视频在线观看 | 久久久夜色精品亚洲| 亚洲女女做受ⅹxx高潮| 激情小说欧美图片| 欧美人动与zoxxxx乱| 中文字幕亚洲一区二区av在线| 天天爽夜夜爽夜夜爽精品视频| 成人av动漫在线| 久久天天做天天爱综合色| 亚洲电影你懂得| 99国产精品国产精品毛片| 精品国产区一区| 视频一区二区不卡| 日本道精品一区二区三区| 国产日韩综合av| 久久国产成人午夜av影院| 欧美亚洲日本一区| 中文字幕一区二区三中文字幕| 久久99日本精品| 欧美日本一区二区在线观看| 成人免费一区二区三区在线观看 | 久久久久88色偷偷免费| 天天操天天干天天综合网| 一本色道久久综合狠狠躁的推荐| 日本一区二区三区久久久久久久久不 | 欧美视频在线播放| 亚洲精品视频免费观看| 不卡一区中文字幕| 中文成人av在线| 成人在线综合网站| 久久久久久久久久久久久女国产乱 | 亚洲综合丁香婷婷六月香| av一本久道久久综合久久鬼色| 久久精品欧美一区二区三区不卡| 老司机午夜精品| 欧美精品一区二区三区在线播放| 蜜桃视频免费观看一区| 日韩精品中午字幕| 久久精品国产99久久6| 精品久久久久av影院| 久久国产精品72免费观看|