精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

微信小程序云端增強 SDK接入

移動開發
XpmJS可以鏈接任何云端資源,為小程序、移動應用提供云資源通道和后端能力。降低開發門檻,提升小程序的開發效率。無需編寫后端代碼,即可實現用戶登錄、WebSocket 通信、微信支付、云端數據表格、文件存儲等功能。雖然 PHP 是最好的編程語言, 但是使用 XpmJS 后, 無需學習包括 PHP 在內的任何后端語言,用 Javascript 即可搞定一切,NodeJS 也不用!

【引自第九程序的博客】一、XpmJS 是啥

XpmJS可以鏈接任何云端資源,為小程序、移動應用提供云資源通道和后端能力。降低開發門檻,提升小程序的開發效率。無需編寫后端代碼,即可實現用戶登錄、WebSocket 通信、微信支付、云端數據表格、文件存儲等功能。雖然 PHP 是最好的編程語言, 但是使用 XpmJS 后, 無需學習包括 PHP 在內的任何后端語言,用 Javascript 即可搞定一切,NodeJS 也不用!

二、為啥 XpmJS

從代碼結構上看 XpmJS 更優雅!因為使用了 Promise!

 

XpmJS 封裝了常用后端操作,還提供一個管理后臺,微信支付只要一行代碼就可以實現!

 

后端部署在你的云主機上!你可以完全掌控數據。

方法1: 一鍵安裝

推薦使用騰訊云一鍵安裝鏈接 ( 訪問微信接口快, 可以免費申請 Https 證書 )

方法2: 安裝腳本

安裝前,先提前申請 Docker Hub 鏡像 申請地址 https://www.daocloud.io/mirror

  1. # 請采用 Ubuntu 14.04 64位 LTS 
  2.  
  3. curl -sSL http://tuanduimao.com/xpmjs-server.sh | sh -s yourdomain.com http://<your id>.m.daocloud.io  

方法3: 使用 Docker 安裝

  1. # 安裝 Docker  
  2. curl -sSL https://get.daocloud.io/docker | sh 
  3.  
  4. # 啟動容器 
  5. docker run -d --name=xpmjs-server  \ 
  6.     -e "HOST=yourdomain.com" \ 
  7.     -v /host/data:/data  \ 
  8.     -v /host/apps:/apps  \ 
  9.     -v /host/config:/config  \ 
  10.     -p 80:80 -p 443:443  \ 
  11.     tuanduimao/xpmjs-server:1.0  

XpmJS Server 升級

第一步: 下載代碼:

  1. curl http://xpmjs-1252011659.costj.myqcloud.com/xpmjs-server-1.0.tar.gz 

第二步: 解壓并更新:

  1. tar xvfz xpmjs-server-1.0.tar.gz 
  2.  
  3. cd 1.0 && docker cp . xpmjs-server:/code  

三、XpmJS 咋用

1. 用戶 ( User )

用戶登錄 login()

  1. var user = app.xpm.require('User'); 
  2.  
  3. user.login().thenfunction( userInfo ) {  
  4.  
  5.     console.log( '用戶登錄成功', userInfo ); 
  6.     app.session.set('loginUser', userInfo ); 
  7. }) 
  8.  
  9. .catch( function( excp ) {  
  10.     console.log('用戶登錄失敗', excp ); 
  11. }); 

用戶退出 logout()

  1. var user = app.xpm.require('User'); 
  2.  
  3. user.logout().thenfunction( userInfo ) {  
  4.     console.log( '用戶注銷成功', userInfo ); 
  5. }) 
  6.  
  7. .catch( function( excp ) {  
  8.     console.log('用戶注銷失敗', excp ); 
  9. });  

讀取資料 get()

來自微信客戶端的用戶信息 ( 非云端數據 )

  1. var user = app.xpm.require('User'); 
  2.  
  3. user.get().thenfunction( userInfo ) {  
  4.     console.log( '讀取成功', userInfo ); 
  5. }) 
  6.  
  7. .catch( function( excp ) {  
  8.     console.log('讀取失敗', excp ); 
  9. });  

2. 信道( Wss )

使用 Websocket 信道,可以實現雙向實時通信。

打開信道 open()

  1. var wss = app.xpm.require('Wss'); 
  2. wss.open('/wxapp').then(function( res ) { 
  3.     console.log( '信道連接成功', res ); 
  4. }) 
  5. .catch( function( excp ) {  
  6.     console.log('信道連接失敗', excp ); 
  7. });  

在線用戶 liveUsers ()

  1. var wss = app.xpm.require('Wss'); 
  2. wss.liveUsers().then(function( users ) { 
  3.     console.log( '讀取在線用戶成功', users ); 
  4. }) 
  5. .catch( function( excp ) {  
  6.     console.log('讀取在線用戶失敗', excp ); 
  7. });  

用戶信息數據結構

字段 中文 說明
id 客戶端ID  
_id 用戶ID  
nickName 微信昵稱  
gender 性別  
avatarUrl 頭像  
language 語言  
group 用戶組  
isadmin 是否是管理員 0 非管理員 1 管理員

檢查用戶是否在線 isOnline ( xpmjs-server 1.0rc4+ )

  1. var user = app.xpm.require('User'); 
  2. var wss = app.xpm.require('Wss'); 
  3.  
  4. user.login().thenfunction( userInfo ) {  
  5.     return wss.isOnline( userInfo['_id'] ) 
  6.  
  7. }).then function( isOnline ) { 
  8.     if ( isOnline ) { 
  9.         console.log( '用戶在線'); 
  10.     } else { 
  11.         console.log( '用戶離線'); 
  12.     } 
  13. }) 
  14. .catch( function( excp ) {  
  15.     console.log('出錯啦', excp ); 
  16. });  

監聽指令 listen()

小程序僅提供 WebSocket 客戶端 API,所以小程序本身無法實現 WebSocket服務器。 wss.listen() 方法并非啟動 WebSocket Server, 而是用來接收云端信道轉發的指令。

  1. var wss = app.xpm.require('Wss'); 
  2. wss.listen('payment'function( res, status ){ 
  3.     // 當接收到 payment 指令后運行  
  4.     if ( status != 'success'return ; 
  5.     console.log( res, status ); 
  6. });  

發送指令 send()

  1. var wss = app.xpm.require('Wss'); 
  2. wss.liveUsers().then(function( users ) { 
  3.     console.log( '讀取在線用戶成功', users ); 
  4.     // 向第一個用戶發送 payment 指令 
  5.     if ( users.length > 0 )  { 
  6.         return wss.send('payment', users[0], users[0]['id'] ) 
  7.     } else { 
  8.         return {code:404, message:'no live user'}; 
  9.     } 
  10.  
  11. }).thenfunction( res ){ 
  12.     console.log('發送完畢', res); 
  13. }); 
  14. .catch( function( excp ) {  
  15.     console.log('出錯了', excp ); 
  16. });  

綁定事件 bind()

接收并處理 websocket 服務器事件,有效值 ( open/close/message/error )

  1. var wss = app.xpm.require('Wss'); 
  2. wss.bind('open'function(event) { 
  3.     console.log('信道服務器開啟', event ); 
  4. }); 
  5.  
  6. wss.bind('close'function(event) { 
  7.     console.log('信道服務器關閉', event ); 
  8. });  

3. 會話 ( Session )

Session 會話分為客戶端和服務端兩部分,客戶端與服務端會話ID相同,客戶端保存用戶信息資料,服務端保存用戶 openid 等敏感信息。與服務端通信,使用Sesssion ID 鑒權,通過服務器端驗證后,請勿將 Session ID 發送給第三方。

啟用會話 start()

啟用會話后,會自動創建一個會話ID

  1. var session = app.xpm.require('session'); 
  2.     session.start();  

會話 ID id()

  1. var session = app.xpm.require('session'); 
  2. var sid = app.id(); 
  3. console.log( sid );  

客戶端會話數據管理 set() & get()

  1. var session = app.xpm.require('session'); 
  2.  
  3. session.set('hello''world'); 
  4.  
  5. console.log( session.get('hello') );  

4. 云端表格 ( Table )

可以使用云端表格接口,將數據保存在 MySQL 中,可以通過 SQL 查詢數據。

創建數據表 _schema()

僅管理員帳號擁有創建數據表權限 ( 登錄管理后臺,打開用戶表,將開發者對應帳號記錄的 isadmin 字段數值設置為 1 )

 

  1. var table = app.xpm.require('Table''hello'); 
  2. table._schema( 
  3.     [   
  4.       {name:"name", type:'string'option:{length:80, require:true }, acl:"rwd:r:-" }, 
  5.       {name:"company", type:'string'option:{length:100}, acl:"w:-:-" } 
  6.     ],  
  7.     { record:"rwd:rw:-"table:"rwd:-:-", field:'rwd:r:-',  user:'admin'group:'member' } 
  8. true ).thenfunction( data ) { 
  9.     console.log('數據表創建成功', data ); 
  10. }) 
  11. .catch( function( excp ) {  
  12.     console.log('數據表創建失敗', excp ); 
  13. });  

字段配置參數

參數 中文 說明
name 字段名稱  
type 字段類型 string/integer/text/boolean 等
option 字段參數 index:true 索引 unique:true 唯一索引 length:80 字段長度
acl 字段鑒權 rw:rw:rw r: 讀取 w: 寫入 -:無 user:group:other

數據增刪改查 get() create() update() remove()

  1. var table = app.xpm.require('Table''hello'); 
  2.  
  3. // 創建 
  4. table.create(  
  5.     {name:'張藝謀', company:'中國電影制片廠'
  6. ).then(function(data) { // 更新 
  7.     return table.update(data['_id'], {name:'馮小剛'}); 
  8.  
  9. }).then(function(data) { // 讀取 
  10.     return table.get(data['_id']); 
  11.  
  12. }).then(function(data) { // 刪除 
  13.     return table.remove(data['name'], 'name' ); 
  14.  
  15. }).then(function(resp) { 
  16.     console.log( 'remove success', resp ); 
  17.  
  18. }).catch( function( excp ) {  
  19.     console.log('出錯了', excp ); 
  20. });  

數據查詢 query()

  1. var table = app.xpm.require('Table''hello'); 
  2. table.query() 
  3.     .where('name''=''馮小剛'
  4.     .orderby('name''asc'
  5.     .limit(2)  // 僅查詢 2條  
  6.  
  7. .fetch('name','company').then(function(data) {   
  8.     console.log( '查詢結果', data );  
  9. }) 
  10.  
  11.  
  12. table.query() 
  13.     .where('name''=''馮小剛'
  14.     .orderby('name''asc'
  15.     .paginate(3, 2)  // 分3頁,當前顯示第 2頁  
  16.  
  17. .fetch('name','company').then(function(data) {   
  18.     console.log( '查詢結果', data );  
  19. });  

聯合查詢 join(), leftjoin(), rightjoin() (xpmjs-server 1.0rc4+)

Table 1: User

id name title
1 張三 產品經理
2 李四 工程師
3 王五 運維工程師

Table 2: Project

id name uid
1 小程序開發組 1
2 網頁開發組 3

   

  1. var table = app.xpm.require('Table''Project'); 
  2. table.query() 
  3.     .join('User''User.id''=''Project.uid' )  // leftjoin / rightjoin 
  4.     .limit(1)   
  5. .fetch('User.id as userid''User.name as username''Project.*').then(function(data) {   
  6.     console.log( '查詢結果', data );  
  7. })  

返回值

  1.     { 
  2.         "id":1, 
  3.         "name":"小程序開發組" 
  4.         "userid":1, 
  5.         "username":"產品經理" 
  6.  
  7.     } 
  8.  

inWhere 查詢 inWhere()

Table 1: User

id name title
1 張三 產品經理
2 李四 工程師
3 王五 運維工程師

Table 2: Project

id name users
1 小程序開發組 ["1","2","3"]
2 網頁開發組 ["1", "3"]

   

  1. var table = app.xpm.require('Table''Project'); 
  2. table.query() 
  3.     .inWhere('users''User''id''*' ) 
  4.     .limit(1)   
  5. .fetch('User.id as userid''User.name as username''Project.*').then(function(data) {   
  6.     console.log( '查詢結果', data );  
  7. })  

返回值

  1.     { 
  2.         "id":1, 
  3.         "name":"小程序開發組" 
  4.         "users":[ 
  5.             { 
  6.                 "id":1, 
  7.                 "name":"張三"
  8.                 "title":"產品經理" 
  9.             } 
  10.             ... 
  11.         ] 
  12.  
  13.     } 
  14.  

5. 微信支付 ( Pay )

發起支付 request();

  1. var pay = app.xpm.require('Pay'); 
  2. pay.request({ 
  3.     total_fee:500,  // 單位分 
  4.     body:'算命、服務器開光'
  5.     attach:'HELLO XpmJS.com',  
  6.     detail:'{id:888,desp:"算命,抽SSR,贈送服務器開光"}' 
  7. }).then(function( data ){ 
  8.     console.log('Request Pay Success', data ); 
  9. }).catch( function( excp){ 
  10.     console.log('Request Pay Failure', excp ); 
  11. });  

云端事件 before(), success(), fail(), complete() (xpmjs-server 1.0rc4+)

  1. pay.before('create', {  // 創建充值記錄 (統一下單成功后, 發起支付前, 在云端運行 ) 
  2.     'table':'income'
  3.     'data': { 
  4.         sn:'{{sn}}'
  5.         order_sn: data.order.sn, 
  6.         uid:data.order.uid, 
  7.         amount:data.order.sale_price, 
  8.         amount_free:0, 
  9.         status:'PENDING'
  10.         status_tips:"F請求付款" 
  11.     } 
  12. }) 
  13.  
  14. .order({   // 生成訂單  ( 統一下單接口, 僅設定并不發送請求 ) 
  15.     total_fee:data.order.sale_price,  // 單位分 
  16.     body:data.order.show_name, 
  17.     attach:'attach user is ' + mid,  // 應該是當前登錄用戶的 ID  
  18.     detail:data 
  19. }) 
  20.  
  21. .success('update', { // 更新充值記錄 ( 支付成功后回調,在云端運行 ) 
  22.     'table':'income'
  23.     'data': { 
  24.         sn:'{{sn}}'
  25.         status:'DONE'
  26.         status_tips:"income status_tips field" 
  27.     }, 
  28.     'unique':'sn' 
  29. }) 
  30.  
  31. .success('app', {   // 調用APP 示例 ( 支付成功后回調,在云端運行 ) 
  32.     'name':'xapp'
  33.     'api':['ticket','index',{sn:'{{sn}}','status_tips':"{{0.status_tips}}"}], 
  34.     'data': { 
  35.         sn:'{{sn}}'
  36.         status:'DONE' 
  37.     } 
  38. }) 
  39.  
  40. .success('update', {  // 更新訂單狀態 ( 支付成功后回調,在云端運行 ) 
  41.     'table':'order'
  42.     'data': { 
  43.         _id:oid, 
  44.         status:'PENDING' 
  45.     } 
  46. }) 
  47.  
  48. .success('create', {   // 創建消費記錄 ( 支付成功后回調,在云端運行 ) 
  49.     'table':'payout'
  50.     'data': { 
  51.         sn:'{{sn}}'
  52.         order_sn: data.order.sn, 
  53.         uid:data.order.uid, 
  54.         amount:data.order.sale_price, 
  55.         amount_free:0, 
  56.         status:'DONE'
  57.         status_tips:"F請求付款" 
  58.     } 
  59. }) 
  60.  
  61. .request().then(function( payResp  ) {  // 發起請求 
  62.     console.log( payResp ); 
  63. })  

6. 本地存儲 ( Stor )

  1. var stor = app.xpm.require('Stor'); 
  2.  
  3. stor.setSync('key','value'); 
  4.  
  5. console.log(stor.getSync('key')); 
  6.  
  7. stor.setMapSync('map_name''key''value'); 
  8.  
  9. console.log(stor.getMapSync('map_name','key'));  

7. 云端應用 ( App ) (xpmjs-server 1.0rc3+)

調用示例

  1. var xapp = app.xpm.require('App''xapp' );  // xapp 應用名稱 
  2.  
  3. xapp.api( 'ticket''available' )  // ticket 控制器  available 方法名 
  4.  
  5. .post({ 
  6.     'train_date':'2017-01-26'
  7.     'from_station':'BJP'
  8.     'to_station':'SHH' 
  9. }) 
  10.  
  11. .thenfunction( resp ) { 
  12.   console.log('POST RESP:', resp ); 
  13. }) 
  14.  
  15. .catch( function( excp ) { 
  16.   console.log('POST EXCP:', excp ); 
  17. });  

XpmJS 云端應用開發

參考云端應用 Demo <火車票余票查詢接口實現>

https://git.oschina.net/xpmjs/xapp

 

8. 云端隊列 ( Que.js ) (xpmjs-server 1.0rc4+)

  1. var que = app.xpm.require('Que''hello'); 
  2. que.select('world').push('create', {  // 增加數據 
  3.     table:'payout'
  4.     data: { 
  5.         sn:'200193'
  6.         order_sn:'test29993'
  7.         amount:100, 
  8.         status:'DONE' 
  9.     } 
  10. }).push('update', { // 更新數據 
  11.     table:'order'
  12.     data: { 
  13.         sn:'148457330261256'
  14.         status_tips:'{{0.sn}} {{0.status}}' 
  15.     }, 
  16.     unique:'sn' 
  17. }).push('app', {   // 調用APP 示例 
  18.     'name':'xapp'
  19.     'api':['ticket','index',{sn:'{{0.sn}}'}], 
  20.     'data': { 
  21.         sn:'{{0.sn}} {{1.sn}}'
  22.         status:'DONE' 
  23.     } 
  24. }).run().then(function(resp){ 
  25.     console.log( 'Response', resp ); 
  26. }) 
  27. .catch(function(excp){ 
  28.     console.log( 'Error', excp ); 
  29. })  

9. 文件上傳 Utils.upload & App.upload (xpmjs-server 1.0+)

上傳文件到騰訊云對象存儲

  1. var qcloud = app.xpm.require('app''xqcloud'); 
  2. qcloud.api("cos",'upload'
  3.  
  4. .upload( tempFilePaths[0] ) 
  5. .then(function(data){ 
  6.     that.setData({ 
  7.         'rs.corver':data.access_url, 
  8.         'rs.images':[data.access_url] 
  9.     }); 
  10. }) 
  11. .catch( function(excp){ 
  12.     console.log('Upload Fail', excp ); 
  13. });  

10. 常用方法 ( Utils )

請求網址 ( Utils.fetch ) (xpmjs-server 1.0rc3+)

  1. var utils = app.xpm.require('Utils' );   
  2.  
  3. utils.fetch'http://qcloud.com' ).thenfunction( resp ) {     
  4.     console.log('FETCH RESP:', resp ); 
  5. }) 
  6.  
  7. .catch( function( excp ) { 
  8.   console.log('FETCH EXCP:', excp ); 
  9. });  

生成二維碼圖片 ( Utils.qrImageUrl ) (xpmjs-server 1.0+)

返回二維碼圖片地址

  1. var utils = app.xpm.require('Utils' );  
  2. var url = utils.qrImageUrl('hello world', {size:200}); 
  3. console.log( url );  

生成小程序頁面二維碼 ( Utils.qrcode ) ( xpmjs-server 1.0 )

  1. var utils = app.xpm.require('Utils' ); 
  2.  
  3. var url = utils.qrcode('/page/detail?id=1'); 
  4.  
  5. console.log( url );  

三、微信小程序 Demo 

 

小程序 Demo 源碼

四、安裝配置

1. 云端配置

【安裝后端程序】

推薦使用騰訊云( 訪問微信接口快, 可以免費申請 Https 證書 )

方法1: 使用腳本安裝 ( 目前僅支持 Ubuntu 14.04 64 LTS 操作系統 )

創建一臺云服務器,選擇 Ubuntu 14.04 64 LTS 操作系統。 登錄服務器運行以下腳本。

安裝前,先提前申請 Docker Hub 鏡像 申請地址 https://www.daocloud.io/mirror

  1. curl -sSL http://tuanduimao.com/xpmjs-server.sh | sh -s yourdomain.com http://<your id>.m.daocloud.io 

方法2: 使用 Docker 安裝

  1. docker run -d --name=xpmjs-server  \ 
  2.     -e "HOST=yourdomain.com" \ 
  3.     -v /host/data:/data  \ 
  4.     -v /host/apps:/apps  \ 
  5.     -v /host/config:/config  \ 
  6.     -p 80:80 -p 443:443  \ 
  7.     tuanduimao/xpmjs-server:1.0  

【設置管理員名稱和密碼】

訪問: http://yourdomian.com/setup.php

1、填寫后臺信息

 

2、填寫管理員信息

 

【上傳 HTTPS 證書 & 微信支付證書】

訪問:http://yourdomian.com/baas-admin/cert/index 上傳 HTTPS 證書和證書密鑰; 如已申請微信支付,建議盡量上傳支付證書,用于雙向驗證證書和密鑰,確保支付安全。

 

上傳好證書后,登錄服務器,重啟容器。

  1. docker restart xpmjs-server 

訪問: https://yourdomian.com ( 有 "S", 檢查證書是否生效 )

【設置小程序配置信息】

訪問: https://yourdomian.com/baas-admin/conf/index ( 有 "S", 填寫小程序和微信支付的信息 )

 

2. 使用 XpmJS

【下載代碼】

使用 Git Bash , 進入小程序項目目錄, 運行 git clone 拉去代碼。(也可以 使用 Git 等客戶端 Clone 代碼 )

  1. git clone https://git.oschina.net/xpmjs/xpmjs.git xpmjs 

克隆成功后的目錄結構為:

 

 

【編寫配置信息】

編輯 app.js 將域名更換為你的域名。( 必須配置好 Https 證書 )

  1. App({ 
  2.  
  3.   onLaunch: function () { 
  4.  
  5.     var that = this; 
  6.  
  7.     // 創建 xpm 對象 
  8.     this.xpm = require('xpmjs/xpm.js').option({ 
  9.         'app':1,  // 對應后臺 APP 配置,支持5個 
  10.         'host':'yourdomian.com'
  11.         'https':'yourdomian.com'
  12.         'wss''yourdomian.com/ws-server'
  13.         'table.prefix''demo'
  14.         'user.table':'user' 
  15.     }); 
  16.  
  17.     // 創建全局對象 
  18.     this.wss = this.xpm.require('wss');  // 信道 
  19.     this.session = this.xpm.require('session');  // 會話 
  20.     this.stor = this.xpm.require('stor'); // 存儲 
  21.  
  22.   }, 
  23.  
  24.   xpm:null
  25.   session:null
  26.   stor:null
  27.   wss:null 
  28. })  

建議將 xpm、wss、session、stor 設定為全局變量。 

責任編輯:龐桂玉 來源: 第九程序的博客
相關推薦

2016-11-04 10:31:49

微信程序指南

2017-05-08 15:03:07

微信小程序開發實戰

2016-10-20 21:02:12

微信小程序javascript

2017-01-09 10:01:49

微信小程序

2017-06-09 10:40:00

微信小程序架構分析

2017-06-09 12:58:20

微信小程序架構分析

2016-09-28 18:10:59

微信程序MINA

2017-06-09 10:06:54

微信小程序架構分析

2016-11-22 11:23:52

微信小程序騰訊微信

2016-09-27 15:40:58

微信程序前端

2016-11-04 10:49:48

微信小程序

2021-06-10 10:51:27

程序基礎架構

2016-09-27 16:38:24

JavaScript微信Web

2016-11-19 18:06:44

微信小程序張小龍

2015-02-11 14:45:16

微信SDK

2016-09-27 20:36:23

微信HttpWeb

2018-07-26 15:16:50

小程序iPhone X甜酸

2017-02-06 13:32:12

微信小程序思想

2016-11-04 09:55:16

微信小程序

2020-07-24 21:50:08

微信小程序公測
點贊
收藏

51CTO技術棧公眾號

欧美一区二区三区公司| 久久精品视频一区二区三区| 欧美大片免费观看在线观看网站推荐 | av电影中文字幕| zzzwww在线看片免费| 欧美韩国一区二区| 成人一区二区在线| 一级特黄免费视频| 尹人成人综合网| 中文字幕在线国产精品| 久久久久久久久久影视| 成人h在线观看| 亚洲综合男人的天堂| 日本亚洲欧洲精品| 少妇高潮一区二区三区99小说| 日韩中文欧美在线| 久久久日本电影| 午夜成人亚洲理伦片在线观看| 国产精品任我爽爆在线播放| 在线电影欧美成精品| 白嫩少妇丰满一区二区| 蜜桃传媒在线观看免费进入 | 美女www一区二区| 91国语精品自产拍在线观看性色| 手机在线免费看片| 欧美日韩久久精品| 日韩精品www| 成人啪啪18免费游戏链接| 欧美爱爱视频| 在线看日本不卡| 日韩av一二三四区| 136福利第一导航国产在线| 国产精品久久精品日日| 欧洲高清一区二区| 日本高清中文字幕二区在线| 成人性视频网站| 99国精产品一二二线| 亚洲在线视频播放| 日本视频一区二区三区| 日本精品免费一区二区三区| 国产在线观看免费视频今夜| 欧美在线高清| 欧美成人小视频| 91香蕉视频在线播放| 成人精品天堂一区二区三区| 亚洲欧美一区二区精品久久久| 你懂的在线观看网站| jazzjazz国产精品久久| 精品国产91洋老外米糕| 亚洲熟女一区二区三区| 一区二区三区四区高清视频| 日韩视频一区二区在线观看| 91欧美一区二区三区| 国产精品毛片无码| 日韩写真欧美这视频| 999热精品视频| 日韩黄色av| 精品电影一区二区| 在线免费播放av| 亚洲精品亚洲人成在线观看| 亚洲人线精品午夜| 老司机福利在线观看| 久久综合电影| 久久国产精品免费视频| 久久精品国产亚洲AV无码麻豆| 激情欧美一区| 欧美在线一区二区三区四| 午夜影院免费在线观看| 欧美aⅴ一区二区三区视频| 国产综合福利在线| www日本视频| 99re成人在线| 天堂av一区二区| а√天堂资源地址在线下载| 亚洲第一福利一区| 免费在线观看日韩视频| 成人精品一区二区三区电影| 91麻豆精品国产91久久久久久久久| 超碰在线资源站| 精品综合久久88少妇激情| 国产视频亚洲视频| 懂色av粉嫩av浪潮av| 韩日视频一区| 国产国产精品人在线视| 国产精品爽爽久久久久久| 成人午夜免费视频| 色之综合天天综合色天天棕色| 瑟瑟视频在线| 精品久久久久久国产91| 色免费在线视频| 国产香蕉精品| 日韩中文字幕网址| 日韩aaaaaa| 麻豆91在线播放| 国产伦精品一区二区三区视频孕妇| 九一国产在线| 亚洲综合精品自拍| 五月天婷婷激情视频| 中文字幕日韩高清在线| 亚洲日本欧美中文幕| 欧美成人黄色网| 日韩精品每日更新| 国产精品久久久久久久免费大片| 岛国视频免费在线观看| 一个色妞综合视频在线观看| 亚洲成人av免费看| 国偷自产av一区二区三区| 久久韩国免费视频| 日本一区二区三区精品| 国产精品66部| 在线日韩av永久免费观看| 色吧亚洲日本| 欧美变态tickling挠脚心| 污污视频网站在线免费观看| 一区二区三区国产盗摄| y111111国产精品久久婷婷| 三区四区在线视频| 欧美午夜精品久久久久久浪潮| 制服丝袜中文字幕第一页| 久久99国产成人小视频| 久久久久久国产精品| 一级黄色免费看| 久久久欧美精品sm网站| 野外做受又硬又粗又大视频√| 日韩在线你懂得| 亚洲天堂免费观看| 99热国产在线观看| 成人免费毛片aaaaa**| av 日韩 人妻 黑人 综合 无码| 亚洲综合av一区二区三区| 日韩精品电影网| 香蕉免费毛片视频| 成人久久久精品乱码一区二区三区| 亚洲蜜桃av| 成人国产在线| 在线成人一区二区| 日韩精品在线一区二区三区| 久久久久久97三级| 黄色片一级视频| 国产精品密蕾丝视频下载 | 国产伊人久久| 在线看片第一页欧美| 中文字幕手机在线视频| 久久久.com| 日日碰狠狠躁久久躁婷婷| 九九热线有精品视频99| 国产91免费观看| 国产视频网站在线| 欧美日韩一级二级三级| 波多野结衣一二三四区| 麻豆精品精品国产自在97香蕉| 色一情一区二区三区四区| 高清欧美日韩| 久久精品亚洲94久久精品| 国产男女猛烈无遮挡| 亚洲精品免费看| 91精品人妻一区二区三区四区| 亚洲性色视频| 欧美少妇一区| 欧美美女被草| 欧美乱人伦中文字幕在线| 亚洲精品久久久久久久久久 | 日韩不卡高清视频| 国产精品成人网| aaaaaaaa毛片| 亚洲经典三级| 欧美区高清在线| 欧美网站免费| 欧美国产精品va在线观看| 五月婷婷开心中文字幕| 欧美综合久久久| 国产日产精品一区二区三区的介绍| 韩国欧美国产1区| 777久久精品一区二区三区无码| 99久热这里只有精品视频免费观看| 91精品国产成人| 97电影在线观看| 欧美成人在线直播| 中文字幕在线欧美| 日韩一区在线看| 波多野结衣影院| 男女男精品网站| 人妻无码一区二区三区四区| 色愁久久久久久| 成人免费自拍视频| 欧美aa免费在线| 久久五月天综合| 桃花色综合影院| 555夜色666亚洲国产免| 国产精品黄色大片| 中文字幕一区二区不卡| 国产一级二级视频| 蜜桃av一区二区三区电影| 又大又硬又爽免费视频| 在线一级成人| 亚洲最大的免费| 3d性欧美动漫精品xxxx软件| 欧美理论电影在线观看| 第一视频专区在线| 日韩福利在线播放| 国内老熟妇对白xxxxhd| 91成人在线观看喷潮| 青青草原在线免费观看视频| 国产午夜精品福利| 黄色片视频免费观看| 国产一区二区在线免费观看| 久久精品99国产| 亚洲视频狠狠| 免费看av软件| 欧洲毛片在线视频免费观看| 国产综合第一页| 国产精品久久久久久av公交车| 国产精品福利网站| 国内激情视频在线观看| 欧美精品在线免费观看| 97视频在线观看网站| 国产视频久久久久| 亚洲精品无amm毛片| 在线不卡中文字幕| 亚洲一线在线观看| 欧美性猛交xxxx黑人交| 性无码专区无码| 性欧美大战久久久久久久久| www青青草原| 中文字幕亚洲在| 日本一区二区视频在线播放| 91老司机福利 在线| 中文视频在线观看| 国产成a人亚洲| 波多野结衣免费观看| 久久国产尿小便嘘嘘| 美女一区二区三区视频| 三级在线观看一区二区| 男人天堂成人在线| 亚洲一区二区三区免费在线观看| 18禁网站免费无遮挡无码中文| 国产综合视频| 国产精品久久国产| 国一区二区在线观看| 欧美黄色免费网址| 黄色免费成人| 97视频久久久| 国产农村妇女毛片精品久久莱园子| 国产美女主播在线| 亚洲精品1区2区| www.av中文字幕| 国产精品毛片在线看| 国产免费一区二区三区视频| 久久精品盗摄| 天天操天天爽天天射| 免费在线成人网| 天天摸天天舔天天操| 国产乱码一区二区三区| 韩国黄色一级片| 99久久精品国产观看| 毛茸茸多毛bbb毛多视频| 久久久久亚洲蜜桃| 你懂得视频在线观看| 一区视频在线播放| 青青草激情视频| 午夜精品福利在线| 日日夜夜操视频| 欧美日韩成人综合在线一区二区| 91丨九色丨丰满| 欧美成人bangbros| 撸视在线观看免费视频| 色爱av美腿丝袜综合粉嫩av| 尤物在线网址| 91av视频在线| xxxxx.日韩| 亚洲最大福利网站| 日韩深夜福利| 天天人人精品| 国精品一区二区| 欧美xxxxx在线视频| 久久精品国产亚洲高清剧情介绍| 精产国品一二三区| 91天堂素人约啪| 中文字幕无码日韩专区免费| 亚洲一区二区成人在线观看| 亚洲大片免费观看| 日韩午夜av一区| 狠狠色伊人亚洲综合网站l| 久久视频精品在线| 咪咪网在线视频| 成人免费在线网址| 亚洲bt欧美bt精品777| 潘金莲一级淫片aaaaaa播放1| 亚洲欧美日韩国产| 波多野结衣免费观看| 久久精品无码一区二区三区| 黄色一级片在线| 欧美色男人天堂| 成人小说亚洲一区二区三区| 在线不卡国产精品| 九色porny自拍视频在线观看| 国产剧情久久久久久| 婷婷成人综合| www.夜夜爱| 日韩精品视频久久| 粉嫩av一区二区三区在线播放 | 秋霞网一区二区| 伊人精品在线观看| 日韩影院在线| 成人欧美一区二区三区视频xxx| 欧美一站二站| 成人免费aaa| 国产成人免费高清| 日韩av网站在线播放| 91久久精品一区二区二区| 欧美 日韩 中文字幕| 蜜臀久久99精品久久久久久宅男| av一区在线播放| 欧美日韩一区二区视频在线观看| 亚洲午夜一区| 丰满少妇中文字幕| 欧美经典一区二区三区| 亚洲免费黄色网址| 亚洲高清久久网| 免费电影网站在线视频观看福利| 成人精品久久一区二区三区| 成人在线视频免费观看| 欧美日韩激情视频在线观看| 成人小视频在线| 国产亚洲精品久久777777| 欧美一级国产精品| 在线观看免费网站黄| 国产精品久久久久久久久久久新郎| 欧美一区二区三区红桃小说| 黄色网在线视频| 国产剧情在线观看一区二区| 日韩激情小视频| 欧美日韩国产乱码电影| 日本高清中文字幕在线| 国产精品三级网站| 国产真实有声精品录音| 日韩精品一区二区三区久久| 91亚洲国产成人精品一区二区三| 日本少妇激情视频| 日韩精品极品视频| 色网在线免费观看| 欧美福利精品| 久久综合亚州| 欧美人妻一区二区三区| 在线观看91视频| h视频在线播放| 国产欧美亚洲精品| 欧美xxxx中国| 伦伦影院午夜理论片| 亚洲一区二区三区四区在线观看| www.色播.com| 久久理论片午夜琪琪电影网| 老司机凹凸av亚洲导航| 鲁一鲁一鲁一鲁一色| 久久亚洲综合色一区二区三区| 亚洲欧美日韩一区二区三区四区| 国产亚洲xxx| 日本免费成人| 日韩激情视频一区二区| 97久久超碰国产精品| 色一情一乱一伦| 日韩亚洲第一页| 中文字幕一区二区三区中文字幕| 波多野结衣综合网| 国产午夜精品一区二区三区视频| 在线观看一二三区| 欧美日韩xxx| 蜜桃一区av| www.涩涩涩| 亚洲资源在线观看| 欧美男男同志| 国产视频福利一区| 在线欧美福利| 国产午夜精品福利视频| 91精品一区二区三区在线观看| 成人在线高清免费| 日本视频一区二区不卡| 国产一区二区三区免费在线观看| 国产一级在线视频| 中文字幕日韩在线观看| 亚洲高清999| 日韩视频在线免费看| 亚洲另类一区二区| 台湾av在线二三区观看| 川上优av一区二区线观看| 亚洲经典自拍| 日韩三级在线观看视频| 亚洲精品国产精品国自产观看浪潮 | 992kp免费看片| 色婷婷综合久色| 日本动漫理论片在线观看网站| 日韩三级电影免费观看| 国产精品一区免费视频| 波多野结衣家庭主妇| 欧美高清激情视频| 99精品电影| 中文精品在线观看| 日韩精品一区二区三区三区免费| 欧美舌奴丨vk视频| 久久这里只有精品23|