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

完美利用Yii2微信后臺開發的系列總結
來源:易賢網 閱讀:1454 次 日期: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的微信公眾平臺開發有所幫助。

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
国产自产女人91一区在线观看| 国产欧美午夜| 亚洲影院一区| 亚洲欧美日韩国产精品| 久久se精品一区二区| 你懂的亚洲视频| 国产精品免费视频观看| 亚洲国产精品t66y| 欧美一级久久久| 欧美麻豆久久久久久中文| 国产一区欧美日韩| 一区二区三区黄色| 欧美极品一区| 亚洲第一色在线| 久久国产乱子精品免费女| 国产精品国产一区二区| 亚洲精品久久久久久久久久久久久 | 久久久九九九九| 欧美日韩一级片在线观看| 海角社区69精品视频| 亚洲欧美国产三级| 欧美日韩一区二区三区在线看 | 欧美久久久久久蜜桃| 激情懂色av一区av二区av| 亚洲免费在线观看视频| 欧美精品一线| 亚洲青色在线| 老司机一区二区| 黑人极品videos精品欧美裸| 亚洲欧美一区二区视频| 国产精品久久久久9999| 亚洲少妇一区| 国产精品极品美女粉嫩高清在线| 亚洲精品乱码久久久久久黑人| 美女国产精品| 亚洲激情二区| 欧美日韩精品在线| 日韩视频精品在线观看| 欧美理论在线播放| 亚洲美女av网站| 欧美精品一区三区在线观看| 最新国产成人在线观看| 欧美精品日韩综合在线| 在线亚洲自拍| 国产午夜精品在线| 久久久一区二区三区| 国产精品视频免费观看| 久久日韩粉嫩一区二区三区 | 欧美视频在线观看免费| 黄色av成人| 一区二区高清视频在线观看| 欧美日韩999| 国产精品一区免费视频| 午夜精品久久久久久| 国产一区二区三区免费不卡| 一本色道久久综合狠狠躁篇的优点| 欧美日韩高清在线播放| 一本色道久久加勒比88综合| 欧美视频日韩| 国产热re99久久6国产精品| 亚洲精品日韩激情在线电影| 久色成人在线| 狠狠色丁香久久综合频道| 欧美裸体一区二区三区| 欧美日韩国产一区二区三区| 在线播放亚洲| 亚洲欧美韩国| 伊人天天综合| 99国产精品视频免费观看| 欧美视频在线免费| 久久久精彩视频| 亚洲视频精选| 亚洲第一中文字幕| 国产精品久久久久国产a级| 欧美伊人久久久久久午夜久久久久 | 欧美一区二区三区的| 国产精品xnxxcom| 久久亚洲国产成人| 一区二区三区国产精华| 国模一区二区三区| 欧美日韩综合视频| 美女黄网久久| 久久国产精品99国产精| 亚洲一区黄色| 亚洲精品日产精品乱码不卡| 国产一区二区成人| 国产精品成人一区二区三区吃奶| 欧美日韩ab片| 久久精品视频网| 亚洲一区二区三区影院| 亚洲国产日韩一区| 黄网站免费久久| 国产伦理一区| 国产精品久久久久久久第一福利 | aa日韩免费精品视频一| 亚洲电影av| 很黄很黄激情成人| 国产精品亚洲аv天堂网| 欧美三日本三级三级在线播放| 免费视频最近日韩| 免费成人性网站| 免费看亚洲片| 欧美大片第1页| 欧美成人免费网| 麻豆精品91| 欧美成年人网| 欧美精品日韩综合在线| 欧美激情bt| 欧美另类久久久品| 欧美色网在线| 国产精品欧美日韩久久| 国产嫩草一区二区三区在线观看 | 亚洲精品1区2区| 亚洲国产精品成人综合| 亚洲国产成人精品久久久国产成人一区 | 最新中文字幕一区二区三区| 亚洲一区二区久久| 9国产精品视频| 一区二区三区日韩在线观看| 在线一区二区日韩| 亚洲欧美伊人| 久久久精品久久久久| 蜜桃av久久久亚洲精品| 欧美理论在线| 国产精品一区二区三区四区五区 | 亚洲女同精品视频| 性欧美暴力猛交69hd| 久久久精品国产一区二区三区| 久久精品卡一| 欧美 日韩 国产精品免费观看| 欧美激情欧美激情在线五月| 欧美性猛交99久久久久99按摩| 国产精品色婷婷久久58| 精品不卡在线| 一区二区不卡在线视频 午夜欧美不卡'| 一区二区欧美在线| 久久久久国产成人精品亚洲午夜| 欧美激情aⅴ一区二区三区| 欧美日韩一区二区在线观看视频| 国产精品综合av一区二区国产馆| 精品69视频一区二区三区| 9l视频自拍蝌蚪9l视频成人| 久久成人人人人精品欧| 欧美国产日韩一区二区在线观看| 欧美体内谢she精2性欧美| 国产精品入口麻豆原神| 在线看国产日韩| 亚洲女ⅴideoshd黑人| 免费观看一级特黄欧美大片| 国产精品久久一卡二卡| 在线播放中文字幕一区| 亚洲一区黄色| 欧美激情片在线观看| 狠狠久久五月精品中文字幕| 亚洲调教视频在线观看| 蜜臀久久99精品久久久久久9| 国产女同一区二区| 一区二区三区不卡视频在线观看| 久久久国产视频91| 国产精品永久入口久久久| 日韩网站在线| 欧美国产日韩视频| 精品动漫3d一区二区三区| 亚洲一卡二卡三卡四卡五卡| 欧美激情乱人伦| 亚洲欧洲精品一区二区三区不卡| 女女同性精品视频| 国产美女扒开尿口久久久| 夜色激情一区二区| 免费在线欧美黄色| 尤物在线观看一区| 久久―日本道色综合久久| 国产日韩欧美黄色| 亚洲一区在线视频| 欧美午夜精品理论片a级按摩| 亚洲黄色成人久久久| 久久免费视频一区| 激情综合色综合久久综合| 久久久国产91| 亚洲高清视频的网址| 免费在线亚洲欧美| 91久久国产综合久久| 麻豆精品在线视频| 亚洲缚视频在线观看| 久久一综合视频| 亚洲成色精品| 欧美国产高潮xxxx1819| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲第一在线综合网站| 久久影院午夜片一区| 娇妻被交换粗又大又硬视频欧美| 亚洲欧美国产三级| 国产精品视频在线观看| 亚洲图片欧美日产| 国产精品人人爽人人做我的可爱 | 欧美日韩免费精品| 久久漫画官网| 国产精品美女www爽爽爽| 夜色激情一区二区| 国产精品美女久久久久av超清|