日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

微信 第三方登录

發(fā)布時(shí)間:2023/12/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信 第三方登录 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:http://www.cnblogs.com/linjunjie/p/6378166.html#3902595

  • 從http://www.cnblogs.com/v-weiwang/p/5732423.htm
l 申請(qǐng)開(kāi)發(fā)者賬號(hào)之內(nèi)的就不累贅了,網(wǎng)上一大堆:

說(shuō)下需求,一個(gè)網(wǎng)頁(yè)要在三類容器運(yùn)行,公司app,微信自動(dòng)登錄,瀏覽器。

假設(shè)是已經(jīng)申請(qǐng)完成各平臺(tái)開(kāi)發(fā)者賬號(hào)。

先來(lái)簡(jiǎn)單的,微博和QQ

微博:

引入微博JS

<script src="http://tjs.sjs.sinajs.cn/open/api/js/wb.js?appkey=*******&debug=true" type="text/javascript" charset="utf-8"></script>

appkey中,填入你的微博開(kāi)發(fā)者id(替換****)

1<span?id="wb_connect_btn">微博登錄按鈕</span>

在你的頁(yè)面微博登錄按鈕標(biāo)簽上,加入以上id。頁(yè)面加載時(shí),微博會(huì)自動(dòng)加載樣式,你也可以自己強(qiáng)行修改。

<script>WB2.anyWhere(function (W) {W.widget.connectButton({id: "wb_connect_btn",type: '3,2',callback: {login: function (o) { //登錄后的回調(diào)函數(shù)
            console.log(o);thirdparty(null,null,o.avatar_hd, o.name ,3, o.id);//個(gè)人方法try{document.getElementsByClassName('loginout')[0].click();//頁(yè)面需求,當(dāng)前頁(yè)面登錄完成之后,不進(jìn)行跳轉(zhuǎn),所以模擬點(diǎn)擊事件,讓微博賬號(hào)在當(dāng)前域中退出。不影響下次登錄。(元素為微博動(dòng)態(tài)添加)
               //微博沒(méi)有提供退出方法。下面的logout為另一種開(kāi)發(fā)模式調(diào)用。
}
catch(e){console.log(e);}},logout: function () { //退出后的回調(diào)函數(shù) }}});}); </script>

將以上標(biāo)簽全部加入html中。

至此,只要在頁(yè)面中登錄之后,就能在控制臺(tái)看到返回?cái)?shù)據(jù)。當(dāng)然,測(cè)試要在微博注冊(cè)的域下

?QQ登錄:

和微博一樣,引入JavaScript文件

<script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid="******" charset="utf-8"></script>

微博類似,替換為你的appid

<span id="qqLoginBtn"></span>

登錄標(biāo)簽中加入id標(biāo)識(shí)

然后JavaScript中加入以下代碼:

QC.Login({//btnId:插入按鈕的節(jié)點(diǎn)id,必選btnId:"qqLoginBtn",//用戶需要確認(rèn)的scope授權(quán)項(xiàng),可選,默認(rèn)allscope:"all",//按鈕尺寸,可用值[A_XL| A_L| A_M| A_S| B_M| B_S| C_S],可選,默認(rèn)B_Ssize: "B_S"}, function(reqData, opts){//登錄成功//根據(jù)返回?cái)?shù)據(jù),更換按鈕顯示狀態(tài)方法 console.log(reqData);//查看返回?cái)?shù)據(jù)QC.Login.getMe(function(openId, accessToken){//獲取用戶的openIdconsole.log('QQOPENID:'+openId);thirdparty(null,null,reqData.figureurl_qq_2,reqData.nickname,1,openId);QC.Login.signOut();//退出QQ登錄調(diào)用事件});});

測(cè)試要在QQ中注冊(cè)的域名下。重要的事情,再說(shuō)一遍。

QQ和微博登錄,大致相同,只要引入JS文件,然后直接調(diào)用方法即可,QQ比微博更和諧,直接提供退出事件。上面代碼中有。。

現(xiàn)在來(lái)說(shuō)最蛋疼的微信登錄。

微信登錄提供兩種方法:

第一種,掃碼登錄:

需要在微信開(kāi)發(fā)者平臺(tái)中,注冊(cè)獲取appId。

微信登錄按鈕:

<span class="weixin-login"></span>

在你微信登錄按鈕上,添加點(diǎn)擊事件,執(zhí)行以下代碼:

$('.weixin-login').on('click',function(){window.location.href='https://open.weixin.qq.com/connect/qrconnect?' +'appid=*******&redirect_uri=http%3a%2f%2fwww.xxxxxx.com%2f'+window.location.pathname.substr(1)+'&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect';});

需要替換:

redirect_url:要想傳當(dāng)前url,直接encodeURIComponent(window.location.href) //當(dāng)然,需要你自己進(jìn)行拼接,不懂的留言

至此,當(dāng)用戶點(diǎn)擊之后,跳轉(zhuǎn)至掃碼界面:

例如:https://passport.yhd.com/wechat/callback.do?code=CODE&state=3d6be0a4035d839573b04816624a415e

至此,拿到第一步令牌,code。在你的回調(diào)頁(yè)面中,你要獲取url中的code去和微信換取下一步的令牌。因?yàn)閾Q取下一步的令牌需要涉及到跨域請(qǐng)求,但是微信不讓跨域請(qǐng)求,只能在后臺(tái)進(jìn)行后續(xù)事項(xiàng)。

第二步,后臺(tái)請(qǐng)求:https://api.weixin.qq.com/sns/oauth2/access_token?appid=[APPID]&secret=[SECRET]&code=[CODE]&grant_type=authorization_code

替換中括號(hào)中的數(shù)據(jù)。(我走的get請(qǐng)求)。

返回以下數(shù)據(jù):

{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE", "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" }

最后一步就不說(shuō)了:

https://api.weixin.qq.com/sns/userinfo?access_token=[ACCESS_TOKEN]&openid=[OPENID]

替換成上次請(qǐng)求獲取到的數(shù)據(jù),再請(qǐng)求一次,獲獎(jiǎng)用戶基本信息。

1、OAuth2.0

  OAuth(開(kāi)放授權(quán))是一個(gè)開(kāi)放標(biāo)準(zhǔn),允許用戶讓第三方應(yīng)用訪問(wèn)該用戶在某一網(wǎng)站上存儲(chǔ)的私密的資源(如照片,視頻,聯(lián)系人列表),而無(wú)需將用戶名和密碼提供給第三方應(yīng)用。

允許用戶提供一個(gè)令牌而不是用戶名和密碼來(lái)訪問(wèn)他們存放在特定服務(wù)提供者的數(shù)據(jù)。每一個(gè)令牌授權(quán)一個(gè)特定的網(wǎng)站(例如,視頻編輯網(wǎng)站)在特定的時(shí)段(例如,接下來(lái)的2小時(shí)內(nèi))內(nèi)訪問(wèn)特定的資源(例如僅僅是某一相冊(cè)中的視頻)。這樣,OAuth允許用戶授權(quán)第三方網(wǎng)站訪問(wèn)他們存儲(chǔ)在另外的服務(wù)提供者上的信息,而不需要分享他們的訪問(wèn)許可或他們數(shù)據(jù)的所有內(nèi)容。2、目標(biāo)我們這里主要模擬使用OAuth2.0,用戶通過(guò)掃描我們網(wǎng)頁(yè)應(yīng)用的二維碼并進(jìn)行授權(quán)登錄來(lái)獲取用戶的基本信息的過(guò)程。詳細(xì)的接口相關(guān)信息可以在微信開(kāi)放平臺(tái)上查看:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN3、前期準(zhǔn)備(獲取微信開(kāi)發(fā)者權(quán)限)我們這里主要講的是網(wǎng)站(Web)應(yīng)用,網(wǎng)站應(yīng)用微信登錄是基于OAuth2.0協(xié)議標(biāo)準(zhǔn)構(gòu)建的微信OAuth2.0授權(quán)登錄系統(tǒng)(即上面的協(xié)議)。在微信客戶端授權(quán)登錄(獲取用戶信息)的可以查看:http://www.cnblogs.com/0201zcr/p/5131602.html

  在進(jìn)行微信OAuth2.在進(jìn)行微信OAuth2.0授權(quán)登錄接入之前,在微信開(kāi)放平臺(tái)注冊(cè)開(kāi)發(fā)者帳號(hào),并擁有一個(gè)已審核通過(guò)的網(wǎng)站應(yīng)用,并獲得相應(yīng)的AppID和AppSecret,申請(qǐng)微信登錄且通過(guò)審核后,可開(kāi)始接入流程。

3.1、注冊(cè)開(kāi)發(fā)者賬號(hào)可以在https://open.weixin.qq.com/?這里申請(qǐng)開(kāi)發(fā)的賬號(hào)。由于是騰訊的網(wǎng)頁(yè),這里可以直接通過(guò)?QQ號(hào)進(jìn)行登錄。3.2、提交網(wǎng)站應(yīng)用審核在已經(jīng)登錄的界面中選擇“管理中心”——》網(wǎng)站應(yīng)用——》創(chuàng)建網(wǎng)站應(yīng)用將會(huì)彈出下面的界面填寫(xiě)過(guò)后,還有有一個(gè)頁(yè)面需要填寫(xiě),提交一份紙質(zhì)版申請(qǐng)書(shū)掃描件(會(huì)提供模板,我們下載再來(lái)填寫(xiě)后,需蓋章,簽名),配置回調(diào)域名(掃碼登錄后會(huì)跳轉(zhuǎn)的頁(yè)面)等。之后提交審核即可,等微信審核通過(guò),我們即可獲得我們需要的網(wǎng)頁(yè)應(yīng)用的appid和AppSecret,并配置后回調(diào)的域名了(這三樣是我們開(kāi)發(fā)所必須的)。3.3、開(kāi)發(fā)者資質(zhì)認(rèn)證由于我們這里要使用微信登錄的接口,所以我們還需要向微信提出認(rèn)證,只有認(rèn)證了才能使用微信那些高級(jí)的接口。未認(rèn)證的如下圖所示認(rèn)證之后是這樣子的:我現(xiàn)在暫時(shí)沒(méi)有找到可以向公眾賬號(hào)那樣子的測(cè)試賬號(hào)的申請(qǐng)。如果有知道怎么可以申請(qǐng)到測(cè)試賬號(hào)的高手,希望能賜教一下。接下來(lái),我們就可以開(kāi)始我們的網(wǎng)頁(yè)微信掃碼登錄開(kāi)發(fā)了。4、授權(quán)流程說(shuō)明微信OAuth2.0授權(quán)登錄讓微信用戶使用微信身份安全登錄第三方應(yīng)用或網(wǎng)站,在微信用戶授權(quán)登錄已接入微信OAuth2.0的第三方應(yīng)用后,第三方可以獲取到用戶的接口調(diào)用憑證(access_token),通過(guò)access_token可以進(jìn)行微信開(kāi)放平臺(tái)授權(quán)關(guān)系接口調(diào)用,從而可實(shí)現(xiàn)獲取微信用戶基本開(kāi)放信息和幫助用戶實(shí)現(xiàn)基礎(chǔ)開(kāi)放功能等。

  微信OAuth2.0授權(quán)登錄目前支持authorization_code模式,適用于擁有server端的應(yīng)用授權(quán)。該模式整體流程為:

1. 第三方發(fā)起微信授權(quán)登錄請(qǐng)求,微信用戶允許授權(quán)第三方應(yīng)用后,微信會(huì)拉起應(yīng)用或重定向到第三方網(wǎng)站,并且?guī)鲜跈?quán)臨時(shí)票據(jù)code參數(shù); 2. 通過(guò)code參數(shù)加上AppID和AppSecret等,通過(guò)API換取access_token; 3. 通過(guò)access_token進(jìn)行接口調(diào)用,獲取用戶基本數(shù)據(jù)資源或幫助用戶實(shí)現(xiàn)基本操作。

?  獲取access_token時(shí)序圖:

5、獲取網(wǎng)頁(yè)的二維碼當(dāng)我們通過(guò)微信的認(rèn)證,獲取到了appid和AppSecret,并配置了回調(diào)的域名。我們就已經(jīng)可以獲取屬于我們網(wǎng)頁(yè)的二維碼了,獲取的方式很簡(jiǎn)單,只需打開(kāi)一個(gè)微信的鏈接,加上我們的appid和回調(diào)域名即可在網(wǎng)頁(yè)上面打開(kāi)二維碼,用戶用微信客戶端掃碼并授權(quán)登錄之后即會(huì)跳轉(zhuǎn)到我們配置的回調(diào)域名下。注意:1、這里填寫(xiě)的是域名(是一個(gè)字符串),而不是URL,因此請(qǐng)勿加http://等協(xié)議頭; 2、授權(quán)回調(diào)域名配置規(guī)范為全域名,比如需要網(wǎng)頁(yè)授權(quán)的域名為:www.qq.com,配置以后此域名下面的頁(yè)面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以進(jìn)行OAuth2.0鑒權(quán)。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com無(wú)法進(jìn)行OAuth2.0鑒權(quán)

5.1、請(qǐng)求url說(shuō)明

  第三方使用網(wǎng)站應(yīng)用授權(quán)登錄前請(qǐng)注意已獲取相應(yīng)網(wǎng)頁(yè)授權(quán)作用域(scope=snsapi_login),則可以通過(guò)在PC端打開(kāi)以下鏈接:

https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

?

?參數(shù)說(shuō)明參數(shù)是否必須說(shuō)明
appid應(yīng)用唯一標(biāo)識(shí)(前面認(rèn)證網(wǎng)頁(yè)應(yīng)用中獲得)
redirect_uri重定向地址,需要進(jìn)行UrlEncode(前面認(rèn)證網(wǎng)頁(yè)應(yīng)用中獲得)
response_type填code
scope應(yīng)用授權(quán)作用域,擁有多個(gè)作用域用逗號(hào)(,)分隔,網(wǎng)頁(yè)應(yīng)用目前僅填寫(xiě)snsapi_login即可
state用于保持請(qǐng)求和回調(diào)的狀態(tài),授權(quán)請(qǐng)求后原樣帶回給第三方。該參數(shù)可用于防止csrf攻擊(跨站請(qǐng)求偽造攻擊),建議第三方帶上該參數(shù),可設(shè)置為簡(jiǎn)單的隨機(jī)數(shù)加session進(jìn)行校驗(yàn)
?返回說(shuō)明用戶允許授權(quán)后,將會(huì)重定向到redirect_uri的網(wǎng)址上,并且?guī)蟘ode和state參數(shù)redirect_uri?code=CODE&state=STATE

?  若用戶禁止授權(quán),則重定向后不會(huì)帶上code參數(shù),僅會(huì)帶上state參數(shù)

redirect_uri?state=STATE

5.2、事例:

  一號(hào)店的微信二維碼鏈接如下:

https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https%3A%2F%2Fpassport.yhd.com%2Fwechat%2Fcallback.do&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect

?  將其復(fù)制到瀏覽器中打開(kāi)即可獲得一號(hào)店的二維碼,二維碼頁(yè)面如下:

  通過(guò)使用微信客戶端的掃一掃功能,掃描該二維碼,即會(huì)跳轉(zhuǎn)到上面填寫(xiě)redirect_uri所在的地址上。假如用戶同意授權(quán),這里就獲得了微信返回的code參數(shù)了。

6、獲取用戶信息

假如前面已經(jīng)獲得code。我們可以通過(guò)code參數(shù)去獲取用戶openid和access_token,進(jìn)而獲得用戶的信息。6.1、通過(guò)code參數(shù)獲取access_tokenhttps://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

?參數(shù)說(shuō)明

參數(shù)是否必須說(shuō)明
appid應(yīng)用唯一標(biāo)識(shí),在微信開(kāi)放平臺(tái)提交應(yīng)用審核通過(guò)后獲得
secret應(yīng)用密鑰AppSecret,在微信開(kāi)放平臺(tái)提交應(yīng)用審核通過(guò)后獲得
code填寫(xiě)第一步獲取的code參數(shù)
grant_type填authorization_code
返回說(shuō)明

正確的返回:

{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE", "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" }參數(shù)說(shuō)明
access_token接口調(diào)用憑證
expires_inaccess_token接口調(diào)用憑證超時(shí)時(shí)間,單位(秒)
refresh_token用戶刷新access_token
openid授權(quán)用戶唯一標(biāo)識(shí)
scope用戶授權(quán)的作用域,使用逗號(hào)(,)分隔
?unionid當(dāng)且僅當(dāng)該網(wǎng)站應(yīng)用已獲得該用戶的userinfo授權(quán)時(shí),才會(huì)出現(xiàn)該字段。

錯(cuò)誤返回樣例:

{"errcode":40029,"errmsg":"invalid code"}注意
  • code參數(shù)的超時(shí)時(shí)間是5分鐘,且每次請(qǐng)求的code參數(shù)的值都不一樣。
  • access_token的超時(shí)時(shí)間是32分鐘。
6.2、通過(guò)access_token獲取用戶的基本信息獲取的前提條件
  • access_token有效且為超時(shí);
  • 微信用戶已授權(quán)給第三方應(yīng)用賬號(hào)相應(yīng)接口作用域(scope)【在二維碼生成連接那里填寫(xiě)
對(duì)于接口作用域(scope),能調(diào)用的接口有以下:授權(quán)作用域(scope)接口接口說(shuō)明
snsapi_base/sns/oauth2/access_token通過(guò)code換取access_token、refresh_token和已授權(quán)scope
/sns/oauth2/refresh_token刷新或續(xù)期access_token使用
/sns/auth檢查access_token有效性
snsapi_userinfo/sns/userinfo獲取用戶個(gè)人信息
使用snsapi_base作用域的授權(quán)是掃碼之后無(wú)需用戶點(diǎn)擊授權(quán),掃碼后直接跳轉(zhuǎn),用戶感覺(jué)不到授權(quán)了,但這種授權(quán)方式能獲取的數(shù)據(jù)量有限,這里我們要獲取用戶的基本信息,我們需要使用snsapi_userinfo授權(quán)。使用snsapi_userinfo授權(quán),掃碼后出現(xiàn)類似于下面的授權(quán)界面此接口用于獲取用戶個(gè)人信息。開(kāi)發(fā)者可通過(guò)OpenID來(lái)獲取用戶基本信息。特別需要注意的是,如果開(kāi)發(fā)者擁有多個(gè)移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(hào),可通過(guò)獲取用戶基本信息中的unionid來(lái)區(qū)分用戶的唯一性,因?yàn)橹灰峭粋€(gè)微信開(kāi)放平臺(tái)帳號(hào)下的移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(hào),用戶的unionid是唯一的。換句話說(shuō),同一用戶,對(duì)同一個(gè)微信開(kāi)放平臺(tái)下的不同應(yīng)用,unionid是相同的。請(qǐng)注意,在用戶修改微信頭像后,舊的微信頭像URL將會(huì)失效,因此開(kāi)發(fā)者應(yīng)該自己在獲取用戶信息后,將頭像圖片保存下來(lái),避免微信頭像URL失效后的異常情況。https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

?參數(shù)說(shuō)明

參數(shù)是否必須說(shuō)明
access_token調(diào)用憑證(上一個(gè)請(qǐng)求中獲得)
openid普通用戶的標(biāo)識(shí),對(duì)當(dāng)前開(kāi)發(fā)者帳號(hào)唯一(上一個(gè)請(qǐng)求中獲得)
? ? ? ?lang? 否國(guó)家地區(qū)語(yǔ)言版本,zh_CN 簡(jiǎn)體,zh_TW 繁體,en 英語(yǔ),默認(rèn)為zh-CN
返回說(shuō)明

正確的Json返回結(jié)果:

{ "openid":"OPENID", "nickname":"NICKNAME", "sex":1, "province":"PROVINCE", "city":"CITY", "country":"COUNTRY", "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0", "privilege":[ "PRIVILEGE1", "PRIVILEGE2" ], "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"}參數(shù)說(shuō)明
openid普通用戶的標(biāo)識(shí),對(duì)當(dāng)前開(kāi)發(fā)者帳號(hào)唯一
nickname普通用戶昵稱
sex普通用戶性別,1為男性,2為女性
province普通用戶個(gè)人資料填寫(xiě)的省份
city普通用戶個(gè)人資料填寫(xiě)的城市
country國(guó)家,如中國(guó)為CN
headimgurl用戶頭像,最后一個(gè)數(shù)值代表正方形頭像大小(有0、46、64、96、132數(shù)值可選,0代表640*640正方形頭像),用戶沒(méi)有頭像時(shí)該項(xiàng)為空
privilege用戶特權(quán)信息,json數(shù)組,如微信沃卡用戶為(chinaunicom)
unionid用戶統(tǒng)一標(biāo)識(shí)。針對(duì)一個(gè)微信開(kāi)放平臺(tái)帳號(hào)下的應(yīng)用,同一用戶的unionid是唯一的。

錯(cuò)誤的Json返回示例:

{ "errcode":40003,"errmsg":"invalid openid" }

7、總結(jié)?

  最近著手開(kāi)發(fā)了微信網(wǎng)頁(yè)掃碼登錄和公眾號(hào)授權(quán)登錄收獲頗豐,兩者的開(kāi)發(fā)很類似。以下是我個(gè)人摸索過(guò)程中發(fā)現(xiàn)的兩者的異同:

  • 兩者都可以通過(guò)微信客戶端掃碼授權(quán)的方式,讓第三方頁(yè)面獲得微信用戶的一些基本信息(昵稱、性別、所在地、在微信唯一標(biāo)示等……)。他們都是通過(guò)提供一個(gè)鏈接讓用戶授權(quán)的方式。但網(wǎng)頁(yè)版需要在頁(yè)面打開(kāi)二維碼之后授權(quán),而公眾號(hào)則需要用戶先關(guān)注了我們的公眾號(hào),然后點(diǎn)開(kāi)公眾號(hào)里面的鏈接,確認(rèn)授權(quán)即可。
  • 網(wǎng)頁(yè)掃碼登錄需要將授權(quán)的鏈接(二維碼鏈接)在網(wǎng)頁(yè)中打開(kāi)、而公眾號(hào)授權(quán)登錄的鏈接必須要微信客戶端中打開(kāi)。
  • 無(wú)論網(wǎng)頁(yè)掃碼登錄還是在公眾號(hào)中授權(quán)登錄,都是通過(guò)授權(quán)的方式獲得一個(gè)code參數(shù),之后通過(guò)code參數(shù)獲取access_token和openid和通過(guò)access_token和openid去獲取用戶的基本信息的請(qǐng)求鏈接是一樣的。
  • 在開(kāi)發(fā)公眾號(hào)授權(quán)登錄的過(guò)程中,我發(fā)現(xiàn)了有測(cè)試賬號(hào)的提供,足以滿足我們的測(cè)試和開(kāi)發(fā),但在開(kāi)發(fā)網(wǎng)頁(yè)掃碼時(shí),暫時(shí)未發(fā)現(xiàn)哪里能獲取測(cè)試賬號(hào),我是通過(guò)申請(qǐng)獲取的。(希望知道哪里有測(cè)試賬號(hào)的請(qǐng)求高手賜教)。








第一步:獲取AppID?AppSecret(不做解釋,自己去微信公眾平臺(tái)申請(qǐng))

?

第二步:生成掃描二維碼,獲取code
https://open.weixin.qq.com/connect/qrconnect?appid=AppID&redirect_uri=http://www.baidu.com&response_type=code&scope=snsapi_login&state=2014#wechat_redirect

第三步:通過(guò)code獲取access_token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=AppID&secret=AppSecret&code=00294221aeb06261d5966&grant_type=authorization_code第四步:因接口頻率有次數(shù)限制,如果需要,刷新access_tokenhttps://api.weixin.qq.com/sns/oauth2/refresh_token?appid=AppID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

????第五步:通過(guò)access_token和openid獲取用戶的基礎(chǔ)信息,包括頭像、昵稱、性別、地區(qū)https://api.weixin.qq.com/sns/userinfo?access_token=bezXEiiBSKSxW0eoblIewFNHqAG-PyW9OqI_L81E4ZCi2cFpfoJTyQc0xKlPPCtqK1kLJfiRbVrpoOVLw7fjpqh52bn7C68SHa2HSgYsVPXZPvJvtayDa57-_7TeHYw&openid=o39YsbmuV_bIPGpj1MTe

這是接口在線調(diào)試工具:http://mp.weixin.qq.com/debug/
這是錯(cuò)誤碼說(shuō)明文檔:http://mp.weixin.qq.com/wiki/17/fa4e1434e57290788bde25603fa2fcbd.html? 另外需要特別注意,如果開(kāi)發(fā)者有在多個(gè)公眾號(hào),或在公眾號(hào)、移動(dòng)應(yīng)用之間統(tǒng)一用戶帳號(hào)的需求,需要前往微信開(kāi)放平臺(tái)(open.weixin.qq.com)綁定公眾號(hào)后,才可利用UnionID機(jī)制來(lái)滿足上述需求,文檔:
http://mp.weixin.qq.com/wiki/14/bb5031008f1494a59c6f71fa0f319c66.html

微信網(wǎng)頁(yè)第三方登錄原理


微信開(kāi)放平臺(tái)和公眾平臺(tái)的區(qū)別

1.公眾平臺(tái)面向的時(shí)普通的用戶,比如自媒體和媒體,企業(yè)官方微信公眾賬號(hào)運(yùn)營(yíng)人員使用,當(dāng)然你所在的團(tuán)隊(duì)或者公司有實(shí)力去開(kāi)發(fā)一些內(nèi)容,也可以調(diào)用公眾平臺(tái)里面的接口,比如自定義菜單,自動(dòng)回復(fù),查詢功能。目前大多數(shù)微信通過(guò)認(rèn)證之后,都在做這個(gè)事情。

mp.weixin.qq.com


2.開(kāi)放平臺(tái)面向的開(kāi)發(fā)者和第三方獨(dú)立軟件開(kāi)發(fā)商。我覺(jué)得開(kāi)發(fā)平臺(tái)最大的開(kāi)放就是微信登錄。當(dāng)年騰訊沒(méi)有花大力氣去做統(tǒng)一登錄這個(gè)事情,導(dǎo)致目前各個(gè)網(wǎng)站都要弄一套登錄機(jī)制。好在他們現(xiàn)在認(rèn)清了局勢(shì)。開(kāi)發(fā)者或軟件開(kāi)發(fā)商,通過(guò)微信開(kāi)放提供的平臺(tái)和接口,可以開(kāi)發(fā)適合企業(yè)的電子商務(wù)網(wǎng)站,掃描二維碼進(jìn)去一個(gè)游戲界面,然后去購(gòu)買(mǎi)商品等。當(dāng)然后續(xù)開(kāi)放平臺(tái)要開(kāi)放支付接口,那么類似口袋通這種軟件開(kāi)發(fā)廠商,就可以為大型,中小企業(yè)提供微信小店這種服務(wù)和軟件了。

open.weixin.qq.com

?

公眾平臺(tái)就是服務(wù)號(hào)訂閱號(hào)的管理開(kāi)發(fā)后臺(tái)。

開(kāi)發(fā)平臺(tái)說(shuō)得通俗一點(diǎn)就是實(shí)現(xiàn)手機(jī)里邊安裝軟件的內(nèi)容一鍵分享朋友圈;

下面的第三方登陸就是依托于開(kāi)放平臺(tái)(open.weixin.qq.com)的功能

?

準(zhǔn)備工作

網(wǎng)站應(yīng)用微信登錄是基于OAuth2.0協(xié)議標(biāo)準(zhǔn)構(gòu)建的微信OAuth2.0授權(quán)登錄系統(tǒng)。

在進(jìn)行微信OAuth2.在進(jìn)行微信OAuth2.0授權(quán)登錄接入之前,在微信開(kāi)放平臺(tái)注冊(cè)開(kāi)發(fā)者帳號(hào),并擁有一個(gè)已審核通過(guò)的網(wǎng)站應(yīng)用,并獲得相應(yīng)的AppID和AppSecret,申請(qǐng)微信登錄且通過(guò)審核后,可開(kāi)始接入流程。

授權(quán)流程說(shuō)明

微信OAuth2.0授權(quán)登錄讓微信用戶使用微信身份安全登錄第三方應(yīng)用或網(wǎng)站,在微信用戶授權(quán)登錄已接入微信OAuth2.0的第三方應(yīng)用后,第三方可以獲取到用戶的接口調(diào)用憑證(access_token),通過(guò)access_token可以進(jìn)行微信開(kāi)放平臺(tái)授權(quán)關(guān)系接口調(diào)用,從而可實(shí)現(xiàn)獲取微信用戶基本開(kāi)放信息和幫助用戶實(shí)現(xiàn)基礎(chǔ)開(kāi)放功能等。

微信OAuth2.0授權(quán)登錄目前支持authorization_code模式,適用于擁有server端的應(yīng)用授權(quán)。該模式整體流程為:

  1. 第三方發(fā)起微信授權(quán)登錄請(qǐng)求,微信用戶允許授權(quán)第三方應(yīng)用后,微信會(huì)拉起應(yīng)用或重定向到第三方網(wǎng)站,并且?guī)鲜跈?quán)臨時(shí)票據(jù)code參數(shù);

  2. 通過(guò)code參數(shù)加上AppID和AppSecret等,通過(guò)API換取access_token;

  3. 通過(guò)access_token進(jìn)行接口調(diào)用,獲取用戶基本數(shù)據(jù)資源或幫助用戶實(shí)現(xiàn)基本操作。

獲取access_token時(shí)序圖:

第一步:請(qǐng)求CODE

第三方使用網(wǎng)站應(yīng)用授權(quán)登錄前請(qǐng)注意已獲取相應(yīng)網(wǎng)頁(yè)授權(quán)作用域(scope=snsapi_login),則可以通過(guò)在PC端打開(kāi)以下鏈接:
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

若提示“該鏈接無(wú)法訪問(wèn)”,請(qǐng)檢查參數(shù)是否填寫(xiě)錯(cuò)誤,如redirect_uri的域名與審核時(shí)填寫(xiě)的授權(quán)域名不一致或scope不為snsapi_login。

參數(shù)說(shuō)明
參數(shù)是否必須說(shuō)明
appid應(yīng)用唯一標(biāo)識(shí)
redirect_uri重定向地址,需要進(jìn)行UrlEncode
response_type填code
scope應(yīng)用授權(quán)作用域,擁有多個(gè)作用域用逗號(hào)(,)分隔,網(wǎng)頁(yè)應(yīng)用目前僅填寫(xiě)snsapi_login即可
state用于保持請(qǐng)求和回調(diào)的狀態(tài),授權(quán)請(qǐng)求后原樣帶回給第三方。該參數(shù)可用于防止csrf攻擊(跨站請(qǐng)求偽造攻擊),建議第三方帶上該參數(shù),可設(shè)置為簡(jiǎn)單的隨機(jī)數(shù)加session進(jìn)行校驗(yàn)
返回說(shuō)明

用戶允許授權(quán)后,將會(huì)重定向到redirect_uri的網(wǎng)址上,并且?guī)蟘ode和state參數(shù)

redirect_uri?code=CODE&state=STATE

若用戶禁止授權(quán),則重定向后不會(huì)帶上code參數(shù),僅會(huì)帶上state參數(shù)

redirect_uri?state=STATE

請(qǐng)求示例

登錄一號(hào)店網(wǎng)站應(yīng)用

https://passport.yhd.com/wechat/login.do

打開(kāi)后,一號(hào)店會(huì)生成state參數(shù),跳轉(zhuǎn)到
https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https%3A%2F%2Fpassport.yhd.com%2Fwechat%2Fcallback.do&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect

微信用戶使用微信掃描二維碼并且確認(rèn)登錄后,PC端會(huì)跳轉(zhuǎn)到

https://passport.yhd.com/wechat/callback.do?code=CODE&state=3d6be0a4035d839573b04816624a415e

為了滿足網(wǎng)站更定制化的需求,我們還提供了第二種獲取code的方式,支持網(wǎng)站將微信登錄二維碼內(nèi)嵌到自己頁(yè)面中,用戶使用微信掃碼授權(quán)后通過(guò)JS將code返回給網(wǎng)站。

JS微信登錄主要用途:網(wǎng)站希望用戶在網(wǎng)站內(nèi)就能完成登錄,無(wú)需跳轉(zhuǎn)到微信域下登錄后再返回,提升微信登錄的流暢性與成功率。 網(wǎng)站內(nèi)嵌二維碼微信登錄JS實(shí)現(xiàn)辦法:

步驟1:在頁(yè)面中先引入如下JS文件(支持https):

<script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>

步驟2:在需要使用微信登錄的地方實(shí)例以下JS對(duì)象:

??????????????????????????var obj = new WxLogin({

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? id:"login_container",?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? appid: "",?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? scope: "",?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? redirect_uri: "",

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? state: "",

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? style: "",

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? href: ""

? ? ? ? ? ? ? ? ? ? ? ? ? ? });

參數(shù)說(shuō)明
參數(shù)是否必須說(shuō)明
id第三方頁(yè)面顯示二維碼的容器id
appid應(yīng)用唯一標(biāo)識(shí),在微信開(kāi)放平臺(tái)提交應(yīng)用審核通過(guò)后獲得
scope應(yīng)用授權(quán)作用域,擁有多個(gè)作用域用逗號(hào)(,)分隔,網(wǎng)頁(yè)應(yīng)用目前僅填寫(xiě)snsapi_login即可
redirect_uri重定向地址,需要進(jìn)行UrlEncode
state用于保持請(qǐng)求和回調(diào)的狀態(tài),授權(quán)請(qǐng)求后原樣帶回給第三方。該參數(shù)可用于防止csrf攻擊(跨站請(qǐng)求偽造攻擊),建議第三方帶上該參數(shù),可設(shè)置為簡(jiǎn)單的隨機(jī)數(shù)加session進(jìn)行校驗(yàn)
style提供"black"、"white"可選,默認(rèn)為黑色文字描述。詳見(jiàn)文檔底部FAQ
href自定義樣式鏈接,第三方可根據(jù)實(shí)際需求覆蓋默認(rèn)樣式。詳見(jiàn)文檔底部FAQ

?

第二步:通過(guò)code獲取access_token

通過(guò)code獲取access_token

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

參數(shù)說(shuō)明
參數(shù)是否必須說(shuō)明
appid應(yīng)用唯一標(biāo)識(shí),在微信開(kāi)放平臺(tái)提交應(yīng)用審核通過(guò)后獲得
secret應(yīng)用密鑰AppSecret,在微信開(kāi)放平臺(tái)提交應(yīng)用審核通過(guò)后獲得
code填寫(xiě)第一步獲取的code參數(shù)
grant_type填authorization_code
返回說(shuō)明

正確的返回:

{?
"access_token":"ACCESS_TOKEN",?
"expires_in":7200,?
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",?
"scope":"SCOPE","unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"}

?

參數(shù)說(shuō)明
access_token接口調(diào)用憑證
expires_inaccess_token接口調(diào)用憑證超時(shí)時(shí)間,單位(秒)
refresh_token用戶刷新access_token
openid授權(quán)用戶唯一標(biāo)識(shí)
scope用戶授權(quán)的作用域,使用逗號(hào)(,)分隔
?unionid

只有在用戶將公眾號(hào)綁定到微信開(kāi)放平臺(tái)帳號(hào)后,才會(huì)出現(xiàn)該字段。

錯(cuò)誤返回樣例:

{"errcode":40029,"errmsg":"invalid code"}

刷新access_token有效期

access_token是調(diào)用授權(quán)關(guān)系接口的調(diào)用憑證,由于access_token有效期(目前為2個(gè)小時(shí))較短,當(dāng)access_token超時(shí)后,可以使用refresh_token進(jìn)行刷新,access_token刷新結(jié)果有兩種:

  • 1. 若access_token已超時(shí),那么進(jìn)行refresh_token會(huì)獲取一個(gè)新的access_token,新的超時(shí)時(shí)間;

  • 2. 若access_token未超時(shí),那么進(jìn)行refresh_token不會(huì)改變access_token,但超時(shí)時(shí)間會(huì)刷新,相當(dāng)于續(xù)期access_token。

  • refresh_token擁有較長(zhǎng)的有效期(30天),當(dāng)refresh_token失效的后,需要用戶重新授權(quán)。

    請(qǐng)求方法

    獲取第一步的code后,請(qǐng)求以下鏈接進(jìn)行refresh_token:

    https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

    參數(shù)說(shuō)明
    參數(shù)是否必須說(shuō)明
    appid應(yīng)用唯一標(biāo)識(shí)
    grant_type填refresh_token
    refresh_token填寫(xiě)通過(guò)access_token獲取到的refresh_token參數(shù)
    返回說(shuō)明

    正確的返回:

    {?
    "access_token":"ACCESS_TOKEN",?
    "expires_in":7200,?
    "refresh_token":"REFRESH_TOKEN",?
    "openid":"OPENID",?
    "scope":"SCOPE"?
    }

    參數(shù)說(shuō)明
    access_token接口調(diào)用憑證
    expires_inaccess_token接口調(diào)用憑證超時(shí)時(shí)間,單位(秒)
    refresh_token用戶刷新access_token
    openid授權(quán)用戶唯一標(biāo)識(shí)
    scope用戶授權(quán)的作用域,使用逗號(hào)(,)分隔

    ?

    錯(cuò)誤返回樣例:

    {"errcode":40030,"errmsg":"invalid refresh_token"}

    注意:

    1、Appsecret 是應(yīng)用接口使用密鑰,泄漏后將可能導(dǎo)致應(yīng)用數(shù)據(jù)泄漏、應(yīng)用的用戶數(shù)據(jù)泄漏等高風(fēng)險(xiǎn)后果;存儲(chǔ)在客戶端,極有可能被惡意竊取(如反編譯獲取Appsecret);

    2、access_token 為用戶授權(quán)第三方應(yīng)用發(fā)起接口調(diào)用的憑證(相當(dāng)于用戶登錄態(tài)),存儲(chǔ)在客戶端,可能出現(xiàn)惡意獲取access_token 后導(dǎo)致的用戶數(shù)據(jù)泄漏、用戶微信相關(guān)接口功能被惡意發(fā)起等行為;

    3、refresh_token 為用戶授權(quán)第三方應(yīng)用的長(zhǎng)效憑證,僅用于刷新access_token,但泄漏后相當(dāng)于access_token 泄漏,風(fēng)險(xiǎn)同上。

    ?

    建議將secret、用戶數(shù)據(jù)(如access_token)放在App云端服務(wù)器,由云端中轉(zhuǎn)接口調(diào)用請(qǐng)求。

    ?
    第三步:通過(guò)access_token調(diào)用接口

    獲取access_token后,進(jìn)行接口調(diào)用,有以下前提:

  • 1. access_token有效且未超時(shí);

  • 2. 微信用戶已授權(quán)給第三方應(yīng)用帳號(hào)相應(yīng)接口作用域(scope)。

  • ?

    對(duì)于接口作用域(scope),能調(diào)用的接口有以下:

    授權(quán)作用域(scope)接口接口說(shuō)明
    snsapi_base/sns/oauth2/access_token通過(guò)code換取access_token、refresh_token和已授權(quán)scope
    /sns/oauth2/refresh_token刷新或續(xù)期access_token使用
    /sns/auth檢查access_token有效性
    snsapi_userinfo/sns/userinfo獲取用戶個(gè)人信息

    其中snsapi_base屬于基礎(chǔ)接口,若應(yīng)用已擁有其它scope權(quán)限,則默認(rèn)擁有snsapi_base的權(quán)限。使用snsapi_base可以讓移動(dòng)端網(wǎng)頁(yè)授權(quán)繞過(guò)跳轉(zhuǎn)授權(quán)登錄頁(yè)請(qǐng)求用戶授權(quán)的動(dòng)作,直接跳轉(zhuǎn)第三方網(wǎng)頁(yè)帶上授權(quán)臨時(shí)票據(jù)(code),但會(huì)使得用戶已授權(quán)作用域(scope)僅為snsapi_base,從而導(dǎo)致無(wú)法獲取到需要用戶授權(quán)才允許獲得的數(shù)據(jù)和基礎(chǔ)功能。

    接口調(diào)用方法可查閱《微信授權(quán)關(guān)系接口調(diào)用指南》

    F.A.Q
    1. 什么是授權(quán)臨時(shí)票據(jù)(code)?

    答:第三方通過(guò)code進(jìn)行獲取access_token的時(shí)候需要用到,code的超時(shí)時(shí)間為10分鐘,一個(gè)code只能成功換取一次access_token即失效。code的臨時(shí)性和一次保障了微信授權(quán)登錄的安全性。第三方可通過(guò)使用https和state參數(shù),進(jìn)一步加強(qiáng)自身授權(quán)登錄的安全性。

    ?

    2. 什么是授權(quán)作用域(scope)?

    答:授權(quán)作用域(scope)代表用戶授權(quán)給第三方的接口權(quán)限,第三方應(yīng)用需要向微信開(kāi)放平臺(tái)申請(qǐng)使用相應(yīng)scope的權(quán)限后,使用文檔所述方式讓用戶進(jìn)行授權(quán),經(jīng)過(guò)用戶授權(quán),獲取到相應(yīng)access_token后方可對(duì)接口進(jìn)行調(diào)用。

    3. 網(wǎng)站內(nèi)嵌二維碼微信登錄JS代碼中style字段作用?

    答:第三方頁(yè)面顏色風(fēng)格可能為淺色調(diào)或者深色調(diào),若第三方頁(yè)面為淺色背景,style字段應(yīng)提供"black"值(或者不提供,black為默認(rèn)值),則對(duì)應(yīng)的微信登錄文字樣式為黑色。相關(guān)效果如下:

    若提供"white"值,則對(duì)應(yīng)的文字描述將顯示為白色,適合深色背景。相關(guān)效果如下:

    4.網(wǎng)站內(nèi)嵌二維碼微信登錄JS代碼中href字段作用?

    答:如果第三方覺(jué)得微信團(tuán)隊(duì)提供的默認(rèn)樣式與自己的頁(yè)面樣式不匹配,可以自己提供樣式文件來(lái)覆蓋默認(rèn)樣式。舉個(gè)例子,如第三方覺(jué)得默認(rèn)二維碼過(guò)大,可以提供相關(guān)css樣式文件,并把鏈接地址填入href字段

    .impowerBox .qrcode {width: 200px;}
    .impowerBox .title {display: none;}
    .impowerBox .info {width: 200px;}
    .status_icon {display:none}
    .impowerBox .status {text-align: center;}?

    ?

    相關(guān)效果如下:

    通過(guò)code獲取access_token
    接口說(shuō)明

    通過(guò)code獲取access_token的接口。

    請(qǐng)求說(shuō)明

    http請(qǐng)求方式: GET

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

    參數(shù)說(shuō)明
    參數(shù)是否必須說(shuō)明
    appid應(yīng)用唯一標(biāo)識(shí),在微信開(kāi)放平臺(tái)提交應(yīng)用審核通過(guò)后獲得
    secret應(yīng)用密鑰AppSecret,在微信開(kāi)放平臺(tái)提交應(yīng)用審核通過(guò)后獲得
    code填寫(xiě)第一步獲取的code參數(shù)
    grant_type填authorization_code
    返回說(shuō)明

    正確的返回:

    {?
    "access_token":"ACCESS_TOKEN",?
    "expires_in":7200,?
    "refresh_token":"REFRESH_TOKEN",
    "openid":"OPENID",?
    "scope":"SCOPE"?
    }

    參數(shù)說(shuō)明
    access_token接口調(diào)用憑證
    expires_inaccess_token接口調(diào)用憑證超時(shí)時(shí)間,單位(秒)
    refresh_token用戶刷新access_token
    openid授權(quán)用戶唯一標(biāo)識(shí)
    scope用戶授權(quán)的作用域,使用逗號(hào)(,)分隔

    錯(cuò)誤返回樣例:

    {
    "errcode":40029,"errmsg":"invalid code"
    }

    刷新或續(xù)期access_token使用
    接口說(shuō)明

    access_token是調(diào)用授權(quán)關(guān)系接口的調(diào)用憑證,由于access_token有效期(目前為2個(gè)小時(shí))較短,當(dāng)access_token超時(shí)后,可以使用refresh_token進(jìn)行刷新,access_token刷新結(jié)果有兩種:

  • 1. 若access_token已超時(shí),那么進(jìn)行refresh_token會(huì)獲取一個(gè)新的access_token,新的超時(shí)時(shí)間;

  • 2.若access_token未超時(shí),那么進(jìn)行refresh_token不會(huì)改變access_token,但超時(shí)時(shí)間會(huì)刷新,相當(dāng)于續(xù)期access_token。

  • refresh_token擁有較長(zhǎng)的有效期(30天),當(dāng)refresh_token失效的后,需要用戶重新授權(quán)。

    請(qǐng)求方法

    使用/sns/oauth2/access_token接口獲取到的refresh_token進(jìn)行以下接口調(diào)用:

    http請(qǐng)求方式: GET

    https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

    參數(shù)說(shuō)明
    參數(shù)是否必須說(shuō)明
    appid應(yīng)用唯一標(biāo)識(shí)
    grant_type填refresh_token
    refresh_token填寫(xiě)通過(guò)access_token獲取到的refresh_token參數(shù)
    返回說(shuō)明

    正確的返回:

    {?
    "access_token":"ACCESS_TOKEN",?
    "expires_in":7200,?
    "refresh_token":"REFRESH_TOKEN",?
    "openid":"OPENID",?
    "scope":"SCOPE"?
    }

    參數(shù)說(shuō)明
    access_token接口調(diào)用憑證
    expires_inaccess_token接口調(diào)用憑證超時(shí)時(shí)間,單位(秒)
    refresh_token用戶刷新access_token
    openid授權(quán)用戶唯一標(biāo)識(shí)
    scope用戶授權(quán)的作用域,使用逗號(hào)(,)分隔

    錯(cuò)誤返回樣例:

    {
    "errcode":40030,"errmsg":"invalid refresh_token"
    }

    接口說(shuō)明

    檢驗(yàn)授權(quán)憑證(access_token)是否有效

    請(qǐng)求說(shuō)明

    http請(qǐng)求方式: GET

    https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID

    參數(shù)說(shuō)明
    參數(shù)是否必須說(shuō)明
    access_token調(diào)用接口憑證
    openid普通用戶標(biāo)識(shí),對(duì)該公眾帳號(hào)唯一
    返回說(shuō)明

    正確的Json返回結(jié)果:

    {?
    "errcode":0,"errmsg":"ok"
    }

    錯(cuò)誤的Json返回示例:

    {?
    "errcode":40003,"errmsg":"invalid openid"
    }

    獲取用戶個(gè)人信息(UnionID機(jī)制)
    接口說(shuō)明

    此接口用于獲取用戶個(gè)人信息。開(kāi)發(fā)者可通過(guò)OpenID來(lái)獲取用戶基本信息。特別需要注意的是,如果開(kāi)發(fā)者擁有多個(gè)移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(hào),

    可通過(guò)獲取用戶基本信息中的unionid來(lái)區(qū)分用戶的唯一性,因?yàn)橹灰峭粋€(gè)微信開(kāi)放平臺(tái)帳號(hào)下的移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(hào),用戶的unionid是唯一的。換句話說(shuō),同一用戶,對(duì)同一個(gè)微信開(kāi)放平臺(tái)下的不同應(yīng)用,unionid是相同的。

    請(qǐng)求說(shuō)明

    http請(qǐng)求方式: GET

    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

    參數(shù)說(shuō)明
    參數(shù)是否必須說(shuō)明
    access_token調(diào)用憑證
    openid普通用戶的標(biāo)識(shí),對(duì)當(dāng)前開(kāi)發(fā)者帳號(hào)唯一
    返回說(shuō)明

    正確的Json返回結(jié)果:

    {?
    "openid":"OPENID",
    "nickname":"NICKNAME",
    "sex":1,
    "province":"PROVINCE",
    "city":"CITY",
    "country":"COUNTRY",
    "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
    "privilege":[
    "PRIVILEGE1",?
    "PRIVILEGE2"
    ],
    "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"

    }

    參數(shù)說(shuō)明
    openid普通用戶的標(biāo)識(shí),對(duì)當(dāng)前開(kāi)發(fā)者帳號(hào)唯一
    nickname普通用戶昵稱
    sex普通用戶性別,1為男性,2為女性
    province普通用戶個(gè)人資料填寫(xiě)的省份
    city普通用戶個(gè)人資料填寫(xiě)的城市
    country國(guó)家,如中國(guó)為CN
    headimgurl用戶頭像,最后一個(gè)數(shù)值代表正方形頭像大小(有0、46、64、96、132數(shù)值可選,0代表640*640正方形頭像),用戶沒(méi)有頭像時(shí)該項(xiàng)為空
    privilege用戶特權(quán)信息,json數(shù)組,如微信沃卡用戶為(chinaunicom)
    unionid用戶統(tǒng)一標(biāo)識(shí)。針對(duì)一個(gè)微信開(kāi)放平臺(tái)帳號(hào)下的應(yīng)用,同一用戶的unionid是唯一的。

    錯(cuò)誤的Json返回示例:

    {?
    "errcode":40003,"errmsg":"invalid openid"
    }

    調(diào)用頻率限制
    接口名頻率限制
    通過(guò)code換取access_token1萬(wàn)/分鐘
    刷新access_token5萬(wàn)/分鐘
    獲取用戶基本信息5萬(wàn)/分鐘




    第一步:填寫(xiě)服務(wù)器配置

    第二步:驗(yàn)證服務(wù)器地址的有效性

    第三步:依據(jù)接口文檔實(shí)現(xiàn)業(yè)務(wù)邏輯

    用戶向公眾號(hào)發(fā)送消息時(shí),公眾號(hào)方收到的消息發(fā)送者是一個(gè)OpenID,是使用用戶微信號(hào)加密后的結(jié)果,每個(gè)用戶對(duì)每個(gè)公眾號(hào)有一個(gè)唯一的OpenID。此外,由于開(kāi)發(fā)者經(jīng)常有需在多個(gè)平臺(tái)(移動(dòng)應(yīng)用、網(wǎng)站、公眾帳號(hào))之間共通用戶帳號(hào),統(tǒng)一帳號(hào)體系的需求,微信開(kāi)放平臺(tái)(open.weixin.qq.com)提供了UnionID機(jī)制。開(kāi)發(fā)者可通過(guò)OpenID來(lái)獲取用戶基本信息,而如果開(kāi)發(fā)者擁有多個(gè)應(yīng)用(移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(hào),公眾帳號(hào)只有在被綁定到微信開(kāi)放平臺(tái)帳號(hào)下后,才會(huì)獲取UnionID),可通過(guò)獲取用戶基本信息中的UnionID來(lái)區(qū)分用戶的唯一性,

    1.獲取access_token

    公眾號(hào)可以使用AppID和AppSecret調(diào)用本接口來(lái)獲取access_token;

    接口調(diào)用:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

    2.獲知微信服務(wù)器的IP地址列表:https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=ACCESS_TOKEN

    自定義菜單

    自定義菜單接口可實(shí)現(xiàn)多種類型按鈕,如下:

    ?1、click:點(diǎn)擊推事件

    用戶點(diǎn)擊click類型按鈕后,微信服務(wù)器會(huì)通過(guò)消息接口推送消息類型為event 的結(jié)構(gòu)給開(kāi)發(fā)者(參考消息接口指南),并且?guī)习粹o中開(kāi)發(fā)者填寫(xiě)的key值,開(kāi)發(fā)者可以通過(guò)自定義的key值與用戶進(jìn)行交互;

    2、view:跳轉(zhuǎn)URL

    用戶點(diǎn)擊view類型按鈕后,微信客戶端將會(huì)打開(kāi)開(kāi)發(fā)者在按鈕中填寫(xiě)的網(wǎng)頁(yè)URL,可與網(wǎng)頁(yè)授權(quán)獲取用戶基本信息接口結(jié)合,獲得用戶基本信息。

    3、scancode_push:掃碼推事件

    4、scancode_waitmsg:掃碼推事件且彈出“消息接收中”提示框

    5、pic_sysphoto:彈出系統(tǒng)拍照發(fā)圖

    6、pic_photo_or_album:彈出拍照或者相冊(cè)發(fā)圖
    7、pic_weixin:彈出微信相冊(cè)發(fā)圖器

    8、location_select:彈出地理位置選擇器

    9、media_id:下發(fā)消息(除文本消息)

    10、view_limited:跳轉(zhuǎn)圖文消息URL

    請(qǐng)注意,3到8的所有事件,僅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用戶,舊版本微信用戶點(diǎn)擊后將沒(méi)有回應(yīng),開(kāi)發(fā)者也不能正常接收到事件推送。9和10,是專門(mén)給第三方平臺(tái)旗下未微信認(rèn)證(具體而言,是資質(zhì)認(rèn)證未通過(guò))的訂閱號(hào)準(zhǔn)備的事件類型,它們是沒(méi)有事件推送的,能力相對(duì)受限,其他類型的公眾號(hào)不必使用。

    ?

    微信網(wǎng)頁(yè)授權(quán)
    如果用戶在微信客戶端中訪問(wèn)第三方網(wǎng)頁(yè),公眾號(hào)可以通過(guò)微信網(wǎng)頁(yè)授權(quán)機(jī)制,來(lái)獲取用戶基本信息,進(jìn)而實(shí)現(xiàn)業(yè)務(wù)邏輯。
    1.到公眾平臺(tái)官網(wǎng)中的開(kāi)發(fā)者中心頁(yè)配置授權(quán)回調(diào)域名
    snsapi_base 只獲取到用戶的openid snsapi_userinfo 用來(lái)獲取用戶的基本信息

    關(guān)于網(wǎng)頁(yè)授權(quán)access_token和普通access_token的區(qū)別 1、微信網(wǎng)頁(yè)授權(quán)是通過(guò)OAuth2.0機(jī)制實(shí)現(xiàn)的,在用戶授權(quán)給公眾號(hào)后,公眾號(hào)可以獲取到一個(gè)網(wǎng)頁(yè)授權(quán)特有的接口調(diào)用憑證(網(wǎng)頁(yè)授權(quán)access_token),通過(guò)網(wǎng)頁(yè)授權(quán)access_token可以進(jìn)行授權(quán)后接口調(diào)用,如獲取用戶基本信息; 2、其他微信接口,需要通過(guò)基礎(chǔ)支持中的“獲取access_token”接口來(lái)獲取到的普通access_token調(diào)用。 網(wǎng)頁(yè)授權(quán)獲取用戶基本信息也遵循UnionID機(jī)制,可通過(guò)獲取用戶基本信息中的unionid來(lái)區(qū)分用戶的唯一性 具體而言,網(wǎng)頁(yè)授權(quán)流程分為四步:
      • 1?第一步:用戶同意授權(quán),獲取code
      • 2?第二步:通過(guò)code換取網(wǎng)頁(yè)授權(quán)access_token
      • 3?第三步:刷新access_token(如果需要)
      • 4?第四步:拉取用戶信息(需scope為 snsapi_userinfo)
      • 5?附:檢驗(yàn)授權(quán)憑證(access_token)是否有效
    ?
    微信網(wǎng)頁(yè)授權(quán)自我總結(jié):

    首先打開(kāi)OAuth 配置;確定Scopes是snsapi_base還是snsapi_userinfo?

    1、以snsapi_base為scope發(fā)起的網(wǎng)頁(yè)授權(quán),是用來(lái)獲取進(jìn)入頁(yè)面的用戶的openid的,并且是靜默授權(quán)并自動(dòng)跳轉(zhuǎn)到回調(diào)頁(yè)的。用戶感知的就是直接進(jìn)入了回調(diào)頁(yè)(往往是業(yè)務(wù)頁(yè)面) 2、以snsapi_userinfo為scope發(fā)起的網(wǎng)頁(yè)授權(quán),是用來(lái)獲取用戶的基本信息的。但這種授權(quán)需要用戶手動(dòng)同意,并且由于用戶同意過(guò),所以無(wú)須關(guān)注,就可在授權(quán)后獲取該用戶的基本信息。

    然后可通過(guò)

    $wechat = app('wechat');
    $oauth = $wechat->oauth;
    $wechat_user = $oauth->user();
    實(shí)例來(lái)獲取用戶信息;從中拿去到對(duì)應(yīng)微信的openid;
    亦或者也可通過(guò)微信公眾平臺(tái)文檔中的接口逐步獲取code,access_token等

    如果需要微信授權(quán)登錄的情況下,獲取到用戶的信息之后可繼續(xù)邏輯操作。比如:判斷用戶如果有登錄過(guò)就直接跳轉(zhuǎn)到網(wǎng)站首頁(yè)或者個(gè)人中心;若未登錄需授權(quán)登錄方可繼續(xù)下一步操作。
    微信JS-SDK說(shuō)明文檔
    微信JS-SDK是微信公眾平臺(tái)面向網(wǎng)頁(yè)開(kāi)發(fā)者提供的基于微信內(nèi)的網(wǎng)頁(yè)開(kāi)發(fā)工具包。網(wǎng)頁(yè)開(kāi)發(fā)者可借助微信高效地使用拍照、選圖、語(yǔ)音、位置等手機(jī)系統(tǒng)的能力,同時(shí)可以直接使用微信分享、掃一掃、卡券、支付等微信特有的能力,為微信用戶提供更優(yōu)質(zhì)的網(wǎng)頁(yè)體驗(yàn)。

    JSSDK使用步驟

    步驟一:綁定域名

    步驟二:引入JS文件

    步驟三:通過(guò)config接口注入權(quán)限驗(yàn)證配置

    步驟四:通過(guò)ready接口處理成功驗(yàn)證

    所有接口調(diào)用都必須在config接口獲得結(jié)果之后,config是一個(gè)客戶端的異步操作,所以如果需要在頁(yè)面加載時(shí)就調(diào)用相關(guān)接口,則須把相關(guān)接口放在ready函數(shù)中調(diào)用來(lái)確保正確執(zhí)行。對(duì)于用戶觸發(fā)時(shí)才調(diào)用的接口,則可以直接調(diào)用,不需要放在ready函數(shù)中

    判斷當(dāng)前客戶端版本是否支持指定JS接口

    wx.checkJsApi({jsApiList: ['chooseImage'], // 需要檢測(cè)的JS接口列表,所有JS接口列表見(jiàn)附錄2,success: function(res) {// 以鍵值對(duì)的形式返回,可用的api值true,不可用為false// 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}} });

    獲取“分享給朋友”按鈕點(diǎn)擊狀態(tài)及自定義分享內(nèi)容接口

    wx.onMenuShareAppMessage({title: '', // 分享標(biāo)題desc: '', // 分享描述link: '', // 分享鏈接imgUrl: '', // 分享圖標(biāo)type: '', // 分享類型,music、video或link,不填默認(rèn)為linkdataUrl: '', // 如果type是music或video,則要提供數(shù)據(jù)鏈接,默認(rèn)為空success: function () { // 用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù)},cancel: function () { // 用戶取消分享后執(zhí)行的回調(diào)函數(shù)} });

    相關(guān)例子:

    ?

    開(kāi)發(fā)公眾號(hào)需要用到微信公眾平臺(tái)的服務(wù)號(hào),不能是訂閱號(hào);因?yàn)橛嗛喬?hào)可能會(huì)對(duì)一些權(quán)限有限制;從而不能使用到安正超給我們提供的laravel-wechat當(dāng)中的一些方法和package.

    在開(kāi)發(fā)公眾號(hào)之前我們需要在公眾平臺(tái)的基本配置里面拿到AppId、AppSecret、URL、Token、AESkey.

    1.安裝包文件:composer require?"overtrue/laravel-wechat:~3.0"

    2.配置:

    (1)注冊(cè)?ServiceProvider:

      Overtrue\LaravelWechat\ServiceProvider::class,

    (2)添加外觀到?config/app.php?中的?aliases?部分:

    'EasyWeChat' => Overtrue\LaravelWechat\Facade::class,

    (3)創(chuàng)建配置文件:

      php artisan vendor:publish

    創(chuàng)建成功之后進(jìn)入到config/wehcat.php文件當(dāng)中找到appid,secret,token;然后在.env文件中進(jìn)行配置

    然后創(chuàng)建路由:

      Route::any('/wechat',?'WechatController@serve');

    這里用到any請(qǐng)求的原因是因?yàn)槭峭ㄟ^(guò)get請(qǐng)求驗(yàn)證的,但后面發(fā)送消息是通過(guò)post請(qǐng)求發(fā)送的。

    創(chuàng)建控制器WechatController:

    <?php namespace App\Http\Controllers; use Log; class WechatController extends Controller { /** * 處理微信的請(qǐng)求消息 * * @return string */ public function serve() { Log::info('request arrived.'); # 注意:Log 為 Laravel 組件,所以它記的日志去 Laravel 日志看,而不是 EasyWeChat 日志 $wechat = app('wechat'); $wechat->server->setMessageHandler(function($message){ return "歡迎關(guān)注 overtrue!"; }); Log::info('return response.'); return $wechat->server->serve();//這一句是對(duì)微信進(jìn)行了驗(yàn)證 } }
    最后把這一段代碼publish到與服務(wù)器同步,再對(duì)之前公眾平臺(tái)的基本配置進(jìn)行提交,提交成功之后在接口權(quán)限中的網(wǎng)頁(yè)授權(quán)獲取用戶信息處點(diǎn)擊修改;把相對(duì)應(yīng)的域名放上去,如果沒(méi)有放上去,它的權(quán)限也就獲取不到。



    紅包接口調(diào)用:

    在使用紅包請(qǐng)求功能的時(shí)候,注意mch_billno(商戶訂單號(hào))這個(gè)參數(shù);

    商戶訂單號(hào)(每個(gè)訂單號(hào)必須唯一)

    組成:?mch_id+yyyymmdd+10位一天內(nèi)不能重復(fù)的數(shù)字。

    微信支付:

    用easywechat來(lái)開(kāi)發(fā)微信支付功能,步驟如下:

    ?

    一,需要有一個(gè)商品下單頁(yè)面,頁(yè)面上有你的商品的信息,還要有購(gòu)買(mǎi)數(shù)量,和一個(gè)購(gòu)買(mǎi)按鈕。

    ? ? ? ? 用戶在這個(gè)頁(yè)面瀏覽商品信息的時(shí)候,可以選擇購(gòu)買(mǎi)的數(shù)量,然后點(diǎn)擊提交進(jìn)入下一個(gè)頁(yè)面。

    ? ? ? ?(這個(gè)頁(yè)面,跟淘寶的商品購(gòu)買(mǎi)頁(yè)面一樣。)

    ?

    二,創(chuàng)建一個(gè)頁(yè)面,接收上面一步提交來(lái)的數(shù)據(jù),然后做如下計(jì)算 。

    ?

    ? ? ? ?1,根據(jù)商品ID或是提交來(lái)的商品信息,生成商品的參數(shù)數(shù)組。

    ?

    ?

    [php]?view plain?copy?
  • $product?=?[??
  • ????'trade_type'???????=>?'JSAPI',?//?微信公眾號(hào)支付填JSAPI??
  • ????'body'?????????????=>?'一盒火柴',??
  • ????'detail'???????????=>?'一盒火柴',??
  • ????'out_trade_no'?????=>?'MYERPORDERID12345678',?//?這是自己ERP系統(tǒng)里的訂單ID,不重復(fù)就行。??
  • ????'total_fee'????????=>?8888,?//?金額,這里的8888分人民幣。單位只能是分。??
  • ????'notify_url'???????=>?'http://www.xxx.com/order_notify',?//?支付結(jié)果通知網(wǎng)址,如果不設(shè)置則會(huì)使用配置里的默認(rèn)地址 ?(填寫(xiě)發(fā)起支付請(qǐng)求的網(wǎng)址)
  • ????'openid'???????????=>?'you-open-id',?//?這個(gè)不能少,少了要報(bào)錯(cuò)。??
  • ????//?...??基本上這些參數(shù)就夠了,或者參考微信文檔自行添加刪除。??
  • ];??

  • ? ? ? ? 2,接下來(lái),生成商品對(duì)象。

    ?

    ?

    ?

    [php]?view plain?copy?
  • $order?=?new?Order($product);??

  • ? ? ? ? 3,再接下來(lái),要進(jìn)行調(diào)用前計(jì)算了。

    ?

    ?

    ?

    [php]?view plain?copy?
  • $app?=?new?Application(config('wechat'));??
  • $payment?=?$app->payment;??
  • //統(tǒng)一下單(像公眾號(hào)支付、掃碼支付、APP支付都使用這個(gè)接口)
  • $result?=?$payment->prepare($order);?//?這里的order是上面一步得來(lái)的。?這個(gè)prepare()幫你計(jì)算了校驗(yàn)碼,幫你獲取了prepareId.省心。
  • //刷卡支付使用下面這個(gè)接口:
  • //$result = $payment->pay($order);
  • $prepayId?=?null;??
  • if?($result->return_code?==?'SUCCESS'?&&?$result->result_code?==?'SUCCESS'){??
  • ????$prepayId?=?$result->prepay_id;?//?這個(gè)很重要。有了這個(gè)才能調(diào)用支付。??
  • }?else?{??
  • ????var_dump($result);??
  • ????die("出錯(cuò)了。");??//?出錯(cuò)就說(shuō)出來(lái),不然還能怎樣???
  • }??
  • $config?=?$payment->configForJSSDKPayment($prepayId);?//?這個(gè)方法是取得js里支付所必須的參數(shù)用的。?沒(méi)這個(gè)啥也做不了,除非你自己把js的參數(shù)生成一遍??
  • ?

    ?

    ? ? ? ? 4,就快進(jìn)入正題,但是,還沒(méi)完。還要取得一個(gè)數(shù)據(jù)。

    ?

    ?

    [php]?view plain?copy?
  • $app?=?new?Application(config('wechat'));??
  • $js?=?$app->js;??//?這個(gè)是jssdk里頁(yè)面上需要用到的js參數(shù)信息。??


  • ?

    ? ? ? ? 5,上面獲得的$js 和 $config數(shù)據(jù),要在頁(yè)面里顯示出來(lái)。

    ? ? ? ? ? ? ? ? 注意,上面幾步都不涉及顯示,只是在生成頁(yè)面顯示所需要的數(shù)據(jù)。

    ? ? ? ? ? ? ? ? 現(xiàn)在才需要把這些顯示在頁(yè)面上。

    ?

    ?

    [php]?view plain?copy?
  • <script?src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"?type="text/javascript"?charset="utf-8"></script>??
  • <script?type="text/javascript"?charset="utf-8">??
  • ????wx.config({{?$js->config(array('chooseWXPay'))?}});??
  • </script>
  • <script>??
  • ????$(function(){??
  • ??
  • ????????$(".btn-do-it").click(function(){??
  • ????????????wx.chooseWXPay({??
  • ????????????????timestamp:?"{{$config['timestamp']}}",?//?支付簽名時(shí)間戳,注意微信jssdk中的所有使用timestamp字段均為小寫(xiě)。但最新版的支付后臺(tái)生成簽名使用的timeStamp字段名需大寫(xiě)其中的S字符??
  • ????????????????nonceStr:?'{{$config['nonceStr']}}',?//?支付簽名隨機(jī)串,不長(zhǎng)于?32?位??
  • ????????????????package:?'{{$config['package']}}',?//?統(tǒng)一支付接口返回的prepay_id參數(shù)值,提交格式如:prepay_id=***)??
  • ????????????????signType:?'{{$config['signType']}}',?//?簽名方式,默認(rèn)為'SHA1',使用新版支付需傳入'MD5'??
  • ????????????????paySign:?'{{$config['paySign']}}',?//?支付簽名??
  • ????????????????success:?function?(res)?{??
  • ????????????????????//?支付成功后的回調(diào)函數(shù)??
  • ????????????????????if(res.err_msg?==?"get_brand_wcpay_request:ok"?)?{??
  • ????????????????????????alert('支付成功。');??
  • ????????????????????????window.location.href="{{url("wechat/pay_ok")}}";??
  • ????????????????????}else{??
  • ????????????????????????//alert(res.errMsg);??
  • ????????????????????????alert("支付失敗,請(qǐng)返回重試。");??
  • ????????????????????}??
  • ????????????????},??
  • ????????????????fail:?function?(res)?{??
  • ????????????????????alert("支付失敗,請(qǐng)返回重試。");??
  • ????????????????}??
  • ????????????});??
  • ????????});??
  • ????});??
  • </script>??

  • ? ? ? ? 沒(méi)錯(cuò),只需要修改這些。

    ?

    ?

    ? ? ? ? 再來(lái)理一個(gè),第二步里,這個(gè)頁(yè)面需要顯示一個(gè)確認(rèn)信息,比如商品的名稱,和支付的總金額。

    ? ? ? ? 頁(yè)面上應(yīng)該有一個(gè)按鈕,用來(lái)觸發(fā)支付(.btn-do-it)。

    ? ? ? ? 頁(yè)面里的js就是第5步里要顯示的內(nèi)容。

    ?

    ?

    ? ? ? ? 總結(jié):

    ? ? ? ? 第一步,商品信息頁(yè)面,用戶選擇購(gòu)買(mǎi)數(shù)據(jù),點(diǎn)購(gòu)買(mǎi),提交到第二步的確認(rèn)頁(yè)面。

    ? ? ? ? 第二步的確認(rèn)頁(yè)面,根據(jù)商品信息,和微信配置信息,生成必要的支付數(shù)據(jù),并顯示購(gòu)買(mǎi)確認(rèn)信息,和一個(gè)支付按鈕,

    ? ? ? ? 用戶點(diǎn)擊支付按鈕,發(fā)起支付。

    ? ? ? ? 支付完成,提示用戶,或轉(zhuǎn)到相應(yīng)頁(yè)面。

    ? ? ? ? 微信的開(kāi)發(fā)團(tuán)隊(duì)提醒我們,請(qǐng)以微信的推送信息為準(zhǔn)來(lái)處理訂單,不然有可能人財(cái)兩空。

    product.html

    ?

    ?

    [html]?view plain?copy?
  • <!DOCTYPE?html>??
  • <html?lang="en">??
  • <head>??
  • ????<meta?charset="UTF-8">??
  • ????<title>一盒火柴</title>??
  • </head>??
  • <body>??
  • ??
  • <h1>一盒火柴</h1>??
  • ??
  • <div>??
  • ????賣(mài)火柴的小女孩,手里有一堆火柴。??
  • </div>??
  • ??
  • <hr>??
  • ??
  • <div>??
  • ????<form?name="form1"?action="payment.php"?method="post">??
  • ????????<lable>數(shù)量:</lable>??
  • ????????<input?name="qty"?value="1"?/>??
  • ????????<input?name="submit"?type="submit"?value="購(gòu)買(mǎi)"?/>??
  • ????</form>??
  • </div>??
  • ??
  • </body>??
  • </html>??


  • ?

    payment.php

    ?

    ?

    [php]?view plain?copy?
  • <?php??
  • use?EasyWeChat\Foundation\Application;??
  • use?EasyWeChat\Payment\Order;??
  • ??
  • $product?=?[??
  • ????'body'?????????????=>?'一盒火柴',??
  • ????'trade_type'???????=>?'JSAPI',??
  • ????'out_trade_no'?????=>?'ERP'.time(),??
  • ????'total_fee'????????=>?1,??
  • ????'notify_url'???????=>?'http://test.xxoo.com/wechat/notify/',??
  • ????'openid'???????????=>?$_SESSION['openid'],??
  • ????'attach'???????????=>?'賣(mài)火柴的小女孩',??
  • ];??
  • ??
  • $order?=?new?Order($product);??
  • ??
  • $app?=?new?Application(config('wechat'));??
  • $js?=?$app->js;??
  • $payment?=?$app->payment;??
  • $result?=?$payment->prepare($order);??
  • $prepayId?=?null;??
  • if?($result->return_code?==?'SUCCESS'?&&?$result->result_code?==?'SUCCESS'){??
  • ????$prepayId?=?$result->prepay_id;??
  • }?else?{??
  • ????var_dump($result);??
  • ????die("出錯(cuò)了。");??
  • }??
  • $config?=?$payment->configForJSSDKPayment($prepayId);??
  • ?>??
  • <!DOCTYPE?html>??
  • <html?lang="en">??
  • <head>??
  • ????<meta?charset="UTF-8">??
  • ????<title>購(gòu)買(mǎi)支付</title>??
  • </head>??
  • <body>??
  • ??
  • <h1>一盒火柴</h1>??
  • ??
  • <div>??
  • ????<p>您購(gòu)買(mǎi)了“一盒火柴”,總價(jià)格:?0.01元。</p>??
  • ????<p>數(shù)量:1盒。</p>??
  • </div>??
  • ??
  • <hr>??
  • ??
  • <div>??
  • ????<input?name="button"?id="btnPay"?type="button"?value="支付"?/>??
  • </div>??
  • ??
  • ??
  • ??
  • ??
  • <script?src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"?type="text/javascript"?charset="utf-8"></script>??
  • <script?type="text/javascript"?charset="utf-8">??
  • ????wx.config({{?$js->config(array('chooseWXPay'))?}});??
  • </script>??
  • <script>??
  • ????$(function(){??
  • ??
  • ????????$(".btn-do-it").click(function(){??
  • ????????????wx.chooseWXPay({??
  • ????????????????timestamp:?"{{$config['timestamp']}}",?//?支付簽名時(shí)間戳,注意微信jssdk中的所有使用timestamp字段均為小寫(xiě)。但最新版的支付后臺(tái)生成簽名使用的timeStamp字段名需大寫(xiě)其中的S字符??
  • ????????????????nonceStr:?'{{$config['nonceStr']}}',?//?支付簽名隨機(jī)串,不長(zhǎng)于?32?位??
  • ????????????????package:?'{{$config['package']}}',?//?統(tǒng)一支付接口返回的prepay_id參數(shù)值,提交格式如:prepay_id=***)??
  • ????????????????signType:?'{{$config['signType']}}',?//?簽名方式,默認(rèn)為'SHA1',使用新版支付需傳入'MD5'??
  • ????????????????paySign:?'{{$config['paySign']}}',?//?支付簽名??
  • ????????????????success:?function?(res)?{??
  • ????????????????????//?支付成功后的回調(diào)函數(shù)??
  • ????????????????????if(res.err_msg?==?"get_brand_wcpay_request:ok"?)?{??
  • ????????????????????????alert('支付成功。');??
  • ????????????????????????window.location.href="{{url("wechat/pay_ok")}}";??
  • ????????????????????}else{??
  • ????????????????????????//alert(res.errMsg);??
  • ????????????????????????alert("支付失敗,請(qǐng)返回重試。");??
  • ????????????????????}??
  • ????????????????},??
  • ????????????????fail:?function?(res)?{??
  • ????????????????????alert("支付失敗,請(qǐng)返回重試。");??
  • ????????????????}??
  • ????????????});??
  • ????????});??
  • ????});??
  • </script>??
  • </body>??
  • </html>??


  • ?

    這些是偽代碼,payment.php并沒(méi)有對(duì)product.html傳來(lái)的商品信息做處理。

    其實(shí)只要看payment.php文件應(yīng)該知道怎么做了。

    ?

    其它就兩點(diǎn)。a,獲取$config,b, 自己寫(xiě)wx.chooseWXPay。

    其它的看easywechat文檔就行了。





    總結(jié)

    以上是生活随笔為你收集整理的微信 第三方登录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    91视频电影 | 久久图 | 国产视频69 | 中文字幕一区二区三区久久 | 91禁在线看 | 久久久久久看片 | 91九色视频网站 | 欧美日韩一区二区视频在线观看 | 国产h在线播放 | 天天射射天天 | 欧美精品在线观看一区 | 国产日韩在线播放 | 亚洲国产精品电影在线观看 | 中文字幕在线成人 | 国产精品久久久av | 麻豆视频在线 | 午夜精品电影一区二区在线 | 91视频久久久 | 日韩电影在线一区二区 | 激情五月开心 | se婷婷 | 国产精品完整版 | 国产不卡在线看 | 安徽妇搡bbbb搡bbbb | 成人免费在线视频 | 成人在线视频论坛 | 亚洲精品视频免费看 | 久久视影 | 国产精品久久久久久久久久免费看 | 国产在线精品福利 | 99久久超碰中文字幕伊人 | 亚洲视频aaa | 久久久久亚洲精品成人网小说 | 公与妇乱理三级xxx 在线观看视频在线观看 | 色资源在线观看 | 97免费| 午夜黄色| 国产精品一区二区在线看 | 成年人在线免费视频观看 | 久久亚洲成人网 | 91日本在线播放 | 色综合www | 超碰97在线看| 丁香婷婷网 | 久久久精品国产一区二区 | 久久人人添人人爽添人人88v | www五月天婷婷 | 国产中文字幕免费 | 亚洲精品国产精品国产 | 精品日韩av| 99视频在线精品国自产拍免费观看 | 亚州av网站| 91视频久久久 | 国产精品午夜久久 | 在线观看黄网站 | 99久久精品久久久久久动态片 | 99久久精品久久久久久清纯 | av中文字幕免费在线观看 | 九色最新网址 | 色综合天天色综合 | 色wwww| 三级黄色免费 | 一级片视频免费观看 | 国产人成免费视频 | 成人免费视频在线观看 | 国产大片黄色 | 大胆欧美gogo免费视频一二区 | 日韩欧美精品一区二区 | 亚洲电影图片小说 | 永久免费精品视频 | 日本中文字幕在线电影 | 91成人在线免费观看 | 伊人五月天婷婷 | 色网站在线观看 | 日韩欧美视频在线观看免费 | 国产亚洲无 | 色综合久久久 | 免费久久99精品国产 | 18久久久久久 | 狠狠操狠狠操 | 国产精品高清av | 亚洲精品播放 | 久久国产品 | 综合网伊人 | 日本久草电影 | 国产久草在线 | 中文一区二区三区在线观看 | 亚洲激情视频在线 | 在线观看网站av | 99精品视频99 | 综合久久影院 | 人人爽人人爽人人片av | av在线网站免费观看 | www视频在线播放 | 久久一区精品 | 99久久婷婷国产精品综合 | 女人高潮一级片 | 日韩在线观看中文字幕 | 麻豆免费在线视频 | 国内综合精品午夜久久资源 | 国产精品免费小视频 | 久久久一本精品99久久精品66 | 国产精品美女久久久久久久 | 欧美在线观看视频 | 国产亚洲精品久久久久久 | 国产精品自产拍在线观看网站 | 亚洲狠狠丁香婷婷综合久久久 | 亚洲 中文 欧美 日韩vr 在线 | 欧美激情精品 | 91香蕉久久 | 精品久久视频 | 九精品 | 最近中文字幕第一页 | 日韩特黄一级欧美毛片特黄 | 成人午夜剧场在线观看 | 国产成人精品一区二区三区在线 | 国产成人精品亚洲日本在线观看 | 欧美性生爱 | 国产精品99在线播放 | 中文字幕在线国产精品 | 欧美精品一区二区在线观看 | 9色在线视频 | 国产午夜三级一区二区三桃花影视 | 国产 成人 久久 | 久久久久久久久久久福利 | 国产高清视频免费 | 久久久免费观看 | 在线国产中文字幕 | 黄色app网站在线观看 | 久久激情视频 久久 | 成人网在线免费视频 | 色在线视频网 | 伊人在线视频 | av在线短片 | 久久99热久久99精品 | bbw av| 中文在线亚洲 | 黄色日本免费 | 中文久久精品 | 国产成人av网址 | 日韩av视屏 | 日本黄色免费电影网站 | 日韩av不卡播放 | av中文在线影视 | 日韩精品一区电影 | av在线播放网址 | 97超碰国产精品女人人人爽 | 久久精品久久精品久久 | 欧美福利视频一区 | 亚洲最新av在线 | 亚洲精品资源 | 色噜噜在线观看视频 | 右手影院亚洲欧美 | 99九九热只有国产精品 | 国产系列在线观看 | 欧美a级一区二区 | 国产精品久久久久永久免费观看 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 中文日韩在线 | 国产精品入口麻豆www | 久久久国产日韩 | 久久久久久福利 | 瑞典xxxx性hd极品 | 麻豆极品 | 日韩在线观看视频在线 | 亚洲最新视频在线 | 免费网站观看www在线观看 | 日韩在线一区二区免费 | 国产韩国日本高清视频 | 97夜夜澡人人爽人人免费 | 欧美精品中文在线免费观看 | 亚洲三级性片 | 激情综合网婷婷 | 91最新网址 | 色婷婷丁香 | 三上悠亚一区二区在线观看 | 中文字幕在线视频一区二区三区 | 国产亚洲激情视频在线 | 99精品区| 99精品视频观看 | 成年人视频在线免费播放 | 我爱av激情网 | 国产成人精品一区二区三区 | 国产精品久久av | 五月天天av | 久久久性 | 欧美大片第1页 | 国产成人精品国内自产拍免费看 | 日韩电影黄色 | 97超碰人人爱 | 午夜久久福利视频 | 国产美女网 | 天天曰 | 在线电影日韩 | 黄色av成人在线观看 | 成人国产精品久久久春色 | 日韩在线观看视频中文字幕 | 久久99精品国产一区二区三区 | 欧美精品在线视频 | 日本久久成人中文字幕电影 | 日本精品一区二区三区在线观看 | 手机av片 | 一区二区三区www | 欧美激情精品久久久久久免费 | 在线 视频 一区二区 | 91九色网站 | 久久国产精彩视频 | 久草精品电影 | 久久女同性恋中文字幕 | 天堂在线一区二区三区 | 亚洲在线视频播放 | 91干干干 | 成人xxxx| 久久久影院官网 | 国产在线毛片 | 国产在线播放一区 | 97福利 | 久久人人爽人人爽人人片av免费 | 91精品第一页 | 亚洲国产视频网站 | 亚洲综合五月天 | 能在线看的av | 午夜三级福利 | 狠狠色狠狠色合久久伊人 | 久久精品99久久久久久2456 | a在线免费 | 亚洲欧美视频在线观看 | 蜜臀一区二区三区精品免费视频 | 久草在线免费资源 | 亚洲一区二区三区毛片 | 免费在线一区二区三区 | 国产盗摄精品一区二区 | 久久久久国产精品一区 | 久久免费国产视频 | 日韩av免费大片 | 色综合天天视频在线观看 | 天天干天天操天天搞 | 久久久久久久久久久网站 | 国产日韩精品一区二区 | 亚洲天堂首页 | 国产在线精品区 | 国产一区二区三区免费观看视频 | 国产一区二区视频在线播放 | 最近中文字幕高清字幕在线视频 | 久久99精品波多结衣一区 | 欧美小视频在线 | wwwwwww黄| 久久国产精品99久久久久 | 又湿又紧又大又爽a视频国产 | 在线观看视频在线观看 | 特级毛片爽www免费版 | 成人黄色片在线播放 | 人人躁| 久久久蜜桃一区二区 | 最近更新好看的中文字幕 | 成人动漫一区二区 | 8090yy亚洲精品久久 | 高清不卡一区二区三区 | 亚洲精选视频免费看 | 九九综合在线 | 99999精品 | 免费看污的网站 | 91欧美日韩国产 | 天天干天天干天天 | 亚洲欧洲精品在线 | 99国产精品免费网站 | 久草在线视频在线观看 | 三级黄色a | 国产亚洲va综合人人澡精品 | 啪啪午夜免费 | 天天操天天干天天操天天干 | 开心综合网 | 一区二区三区免费播放 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 国产中文在线播放 | 国产韩国日本高清视频 | 欧美成人xxxxxxxx| 精品美女久久 | 国产成人一区二区三区在线观看 | av官网在线 | av丁香花| 在线播放日韩av | 欧美色久 | 人人玩人人爽 | 久久艹在线观看 | 五月激情婷婷丁香 | 精品国产精品国产偷麻豆 | 亚洲精品久久激情国产片 | 四虎成人免费影院 | 精品国精品自拍自在线 | 久久99精品久久久久久久久久久久 | 黄色片免费在线 | 一区二区三区在线免费观看 | 日韩精品在线观看av | 在线视频一二三 | 成x99人av在线www | 五月婷婷视频在线 | 黄色网址a | www日韩视频 | 婷婷激情小说网 | 美女福利视频一区二区 | 欧美一二三专区 | 亚洲日本韩国一区二区 | 久久国内精品 | 免费在线观看91 | 欧美地下肉体性派对 | 国产精品成人一区二区 | 狠狠久久| 日本一区二区三区免费看 | 中文字幕一区二区在线播放 | 特级毛片在线免费观看 | 久草在线综合 | 久久久久久高清 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 亚洲激情视频在线 | 色综合久久五月天 | 99精品热| 丁香婷婷自拍 | 欧美一级电影片 | 久久精品影片 | 深爱激情五月婷婷 | 国产精品高清在线观看 | 久久精品一区二区三区四区 | 麻豆免费视频网站 | 中文乱码视频在线观看 | 999久久久精品视频 日韩高清www | 99热国内精品 | 99精品视频精品精品视频 | 欧美在线视频一区二区三区 | 91日韩免费 | 天天视频色 | 久久免费毛片视频 | 日韩av在线资源 | 伊人久久在线观看 | 99re久久精品国产 | 欧美二区视频 | 91自拍视频在线 | 国产精品大片 | 在线看一级片 | 欧洲激情综合 | 欧美有色 | 日韩精品中文字幕一区二区 | 99爱这里只有精品 | 久久久国产精品一区二区中文 | 在线观看911视频 | 欧美日韩一区二区三区视频 | 久久午夜色播影院免费高清 | 99色免费| 亚洲伊人第一页 | 亚洲精品永久免费视频 | 日韩在线视频二区 | 五月天中文字幕mv在线 | 91色视频| 天天干天天操av | 91久久久久久久一区二区 | 亚洲视频在线观看免费 | 国产剧情在线一区 | 一区二区高清在线 | 国产精品a成v人在线播放 | 久久精品国产亚洲精品 | 91精品黄色 | 婷婷www| 久久婷婷国产 | 四虎影视精品 | 久久另类小说 | 亚洲精品免费观看视频 | 91在线观看视频网站 | 91视频免费观看 | 日韩黄色免费在线观看 | 91精品在线视频观看 | 香蕉久久久久久久 | 亚洲高清视频在线观看免费 | av在线免费网站 | av经典在线 | 国产又粗又猛又爽又黄的视频先 | 色中色综合 | 国产在线小视频 | 在线99视频 | 久久久麻豆视频 | 日日夜夜天天久久 | 国产精品一区二区在线观看 | 免费看的黄网站软件 | 国产乱老熟视频网88av | 草久久av | 免费a级毛片在线看 | 国产色就色 | 国际精品久久 | 91伊人影院 | 九色视频网 | 成人国产一区二区 | 国产亚洲精品bv在线观看 | 99久久婷婷国产一区二区三区 | 91亚洲精品久久久中文字幕 | 视频一区二区三区视频 | 97色资源| 福利视频| 亚洲欧美日本国产 | 99热这里只有精品8 久久综合毛片 | 欧美一级视频免费 | 国产精品久久久久婷婷二区次 | www五月天| 久草在线久| 国产精品美女免费 | 激情伊人五月天 | 激情综合色播五月 | 久久中文欧美 | 精品国产视频一区 | www.夜夜爽| 丰满少妇一级片 | a在线观看视频 | 成人黄色小说视频 | 99热这里只有精品久久 | 国产精品久久久久久久久久三级 | 肉色欧美久久久久久久免费看 | 国产精品网站一区二区三区 | 视色网站 | 亚洲乱码精品久久久久 | 婷婷综合成人 | 一本一本久久aa综合精品 | 欧美日韩国产亚洲乱码字幕 | 在线精品视频在线观看高清 | 97香蕉超级碰碰久久免费软件 | 人人玩人人添人人澡97 | 中字幕视频在线永久在线观看免费 | 国外av在线 | 九九99| 激情丁香5月 | 热99久久精品 | 九九免费观看视频 | 99精品在线免费在线观看 | 一级片免费在线 | 99热这里只有精品国产首页 | 精品久久免费看 | 麻豆久久一区二区 | 亚洲永久字幕 | 色www永久免费 | 日本中文字幕网 | 亚洲免费av观看 | 日本在线精品视频 | 成年人免费电影在线观看 | 日韩网站视频 | 国产资源网站 | av电影不卡在线 | 国产亚洲欧美精品久久久久久 | 日韩系列| 色婷婷av一区二 | 日韩免费在线播放 | 国产小视频在线 | 日本三级久久久 | 在线天堂中文www视软件 | 亚洲黄网站 | 日韩二区三区在线观看 | 狠狠狠色丁香婷婷综合久久五月 | 日韩最新在线视频 | 国产精品一区二区三区免费视频 | 久久视频网址 | 国产精品1区| 日韩中文字幕免费视频 | 日韩中文字| www成人av | 99亚洲精品| 国产精品久久99综合免费观看尤物 | 免费av黄色 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 亚洲国产一区在线观看 | 欧美午夜精品久久久久 | 国产流白浆高潮在线观看 | 欧美日韩国产一区二区在线观看 | 久久99热久久99精品 | 一本色道久久综合亚洲二区三区 | 福利视频网站 | 99精品久久久久久久 | 国产精品免费视频观看 | 亚洲性xxxx| 午夜av一区二区三区 | 久久久久在线视频 | 欧美国产日韩一区二区 | 500部大龄熟乱视频使用方法 | 免费www视频 | 天天干天天拍 | 国产99久久九九精品免费 | 欧美精品小视频 | 97成人在线视频 | 制服丝袜亚洲 | 精品夜夜嗨av一区二区三区 | 91精品推荐 | 九色精品在线 | 国产美女精品视频 | 91看片淫黄大片91 | 在线观看岛国av | 久久国语露脸国产精品电影 | 日韩视频欧美视频 | 久久 精品一区 | 国产精品永久在线 | 色多多污污 | av在线免费不卡 | 香蕉手机在线 | 国产精品一区二区你懂的 | 91在线播 | 日韩在线中文字幕视频 | 免费日韩一区 | 天天草天天干天天射 | 麻豆一区在线观看 | 久久久免费国产 | www.久草.com| 亚洲精品动漫在线 | 91视频高清| 91精品国产自产在线观看 | 国产在线欧美在线 | 奇米影视8888 | 亚洲精选99| 国产精品免费观看网站 | 日韩av影视 | 亚洲一级久久 | 精品久久久久久久久久岛国gif | 国产精品久久久久久久久久久不卡 | 在线91精品 | 欧美日韩三级 | 久草在线在线 | 天天色综合三 | 久久午夜网 | 深爱激情久久 | 亚洲影院天堂 | 国产亚洲精品美女 | 麻豆91精品视频 | 久久欧美精品 | 激情深爱五月 | 美女网站色免费 | 精品久久久久久国产 | 亚洲情感电影大片 | 园产精品久久久久久久7电影 | av免费观看高清 | 亚洲精品国偷自产在线91正片 | 久久一区二区三区四区 | 日韩免费久久 | 4438全国亚洲精品在线观看视频 | 99视频在线观看一区三区 | 日本激情视频中文字幕 | 黄色一及电影 | 国产一区二区三区高清播放 | 国产不卡视频在线播放 | 成年人网站免费观看 | 国产男女免费完整视频 | 婷婷丁香久久五月婷婷 | 成人av免费 | 精品国产自在精品国产精野外直播 | 九九综合九九 | 天天干天天操天天操 | 国色天香永久免费 | 日韩视频a | 精品一区二区日韩 | 五月婷婷中文字幕 | 成人久久视频 | 国产精品久久久久久久久费观看 | 亚洲无线视频 | 国产日韩精品一区二区在线观看播放 | 成人xxxx | 国产精品久久久久久久久费观看 | 日韩av电影中文字幕 | 久久草视频| 日日夜夜天天射 | 黄色在线看网站 | 国产日韩精品在线观看 | 免费国产在线视频 | 91一区二区三区久久久久国产乱 | 国产麻豆果冻传媒在线观看 | 日韩欧美视频在线 | 国产成人免费观看久久久 | 免费看黄的 | 久久综合五月婷婷 | 97超碰成人 | 超碰97久久 | 久草在线费播放视频 | 久久免费视频在线观看 | 国产一级片视频 | 激情综合色综合久久综合 | 国产精品毛片久久蜜 | 在线观看岛国 | 天天操天天拍 | www四虎影院 | 国产精品精品久久久 | 亚洲美女在线一区 | av免费观看在线 | 又黄又爽又无遮挡免费的网站 | 中文字幕免费中文 | 97成人啪啪网 | 国产免费黄视频在线观看 | 久久都是精品 | 国产乱码精品一区二区三区介绍 | 久久精品99久久久久久 | 欧美一级电影 | 国产黄色精品在线 | 国产一区久久 | 亚洲天堂免费视频 | 中文字幕在线免费 | 中文字幕在线免费97 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 久久99国产精品免费网站 | 成人a大片 | 在线免费观看视频你懂的 | 天天插日日操 | 国产亚洲精品免费 | 日韩免费不卡av | 天天操夜夜操 | 国产日韩欧美中文 | 在线成人中文字幕 | 欧美一二三专区 | 日韩欧美大片免费观看 | 在线黄频| 国产精品高清免费在线观看 | 探花视频免费在线观看 | 精品国产aⅴ麻豆 | 久久久久久免费毛片精品 | 久久激情视频 久久 | 亚洲精品国偷自产在线99热 | 91精品成人久久 | 国产精品电影在线 | 亚洲片在线观看 | 亚洲黄色免费 | 国产精品久久一区二区三区, | 午夜精品视频一区 | 伊人在线视频 | 免费开视频| 狠狠狠色丁香婷婷综合激情 | 国产伦理久久精品久久久久_ | 麻豆国产精品永久免费视频 | 毛片永久新网址首页 | 亚洲免费成人av电影 | 国产高清久久 | 波多野结衣电影一区二区三区 | 国产裸体视频bbbbb | 国产美女精品 | 国产 欧美 日产久久 | 亚洲精品中文字幕视频 | 欧美精品一区二区性色 | 三级a毛片 | 99热超碰在线 | 国产高清在线免费 | 免费网站污 | 亚洲最大av网站 | 日韩免费视频一区二区 | 97国产人人| 欧美一二三区播放 | 欧美久久精品 | 国产精品欧美久久久久三级 | 亚洲综合色站 | 色欧美日韩 | 日韩精品播放 | 狠狠色狠狠色合久久伊人 | 国产精品第一 | 欧美污网站| 日韩理论片在线 | 成人午夜久久 | 中文电影网 | 天天艹天天操 | a黄色 | 亚洲视屏在线播放 | 免费男女网站 | 国产久草在线 | 欧美在线视频一区二区三区 | 亚洲一一在线 | 国产一区免费 | 国产九九精品视频 | 999久久久免费精品国产 | 午夜精品一区二区三区免费 | 亚洲国产精品va在线看黑人 | 91成人观看| 97久久久免费福利网址 | 91大神精品视频 | 日韩特黄av | 视频在线一区二区三区 | 青青河边草观看完整版高清 | 91看片在线播放 | 99精品视频免费全部在线 | 国产青草视频在线观看 | 亚洲观看黄色网 | 亚洲 欧美 综合 在线 精品 | 99国产精品久久久久久久久久 | 亚洲成a人片77777kkkk1在线观看 | 国产色婷婷在线 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 国产一级电影在线 | 亚洲毛片视频 | 欧美性久久久久久 | 在线日韩av| 又爽又黄又无遮挡网站动态图 | 99视屏| 久久亚洲人 | 综合网在线视频 | 国产区网址| 中文字幕 成人 | 国产亚洲在线观看 | 超碰97免费 | 亚洲免费av在线播放 | 奇米四色影狠狠爱7777 | 婷婷激情综合五月天 | 欧美日韩大片在线观看 | 天天干天天射天天插 | 99免费在线视频 | bbw av| 国产精品理论片在线播放 | 99热精品国产 | 久操视频在线免费看 | 久久草 | 中文字幕在线一区观看 | 色诱亚洲精品久久久久久 | 国产免费亚洲高清 | 美女一级毛片视频 | 日日夜夜精品网站 | 最新中文在线视频 | 久草综合在线观看 | 国产精品对白一区二区三区 | 69亚洲视频| 欧美va天堂va视频va在线 | 在线观看成人小视频 | 国产精品网在线观看 | 亚洲精品国产精品乱码在线观看 | 日韩电影中文,亚洲精品乱码 | 久久精品中文字幕少妇 | 国产艹b视频 | 国产精品videossex国产高清 | 人人爱人人爽 | 午夜久久久精品 | 日本不卡一区二区三区在线观看 | 国产视频一区二区三区在线 | 九九九电影免费看 | 最新中文字幕在线观看视频 | 国产精品青青 | 免费精品在线视频 | 久久黄页 | 51久久夜色精品国产麻豆 | 日韩美在线| 国产精品久久久久久久久久ktv | 国产精品视频永久免费播放 | 久久久免费观看视频 | 超碰在线观看99 | 玖玖在线精品 | 91天堂素人约啪 | 欧美色就是色 | 亚洲电影免费 | 中文字幕传媒 | 亚洲天天摸日日摸天天欢 | 在线电影播放 | 在线性视频日韩欧美 | 精品视频免费久久久看 | 亚洲.www| 玖玖在线精品 | 色综合久久综合中文综合网 | 久久亚洲成人网 | 午夜精品一区二区三区免费视频 | a天堂中文在线 | 亚洲国产精品第一区二区 | 免费观看mv大片高清 | 99热999| 精品麻豆入口免费 | 日韩精品中文字幕有码 | 精品久久久久久国产91 | 成片免费观看视频 | 日韩欧美一级二级 | 欧美在线视频免费 | 亚洲www天堂com | 成人欧美在线 | 婷婷 综合 色 | 夜夜躁天天躁很躁波 | 国产精品视频在线看 | 国外调教视频网站 | 国产91精品一区二区麻豆亚洲 | 伊人天堂久久 | 精品福利网 | 黄免费在线观看 | 精品国产福利在线 | 色噜噜在线观看 | 欧美日韩国产综合网 | 香蕉视频网址 | 国产精品免费一区二区三区在线观看 | 国产打女人屁股调教97 | 久黄色 | 久久久国产99久久国产一 | 91精品国产福利 | 91在线操| 96精品视频 | 99理论片 | 国精产品满18岁在线 | 99电影| 中文字幕一区二区三区四区久久 | 国产视频一区精品 | 黄色小说网站在线 | 一区二区三区免费在线观看视频 | 亚洲黄色片在线 | av在线电影免费观看 | 久草免费在线视频 | 久久久久久亚洲精品 | 免费高清在线一区 | 欧美日韩国产欧美 | 精品视频在线免费观看 | 伊人色综合久久天天网 | 美女免费视频网站 | 欧美一区日韩精品 | 在线播放国产精品 | 欧美大香线蕉线伊人久久 | 丰满少妇在线观看 | 中文字幕第 | 成人动漫精品一区二区 | 久久99国产精品免费 | 日韩精品一区二区三区在线播放 | 91久久国产露脸精品国产闺蜜 | 麻豆影视在线免费观看 | 黄色毛片观看 | 日韩理论在线 | 美女视频网 | 色综合天天视频在线观看 | 久久久久久毛片精品免费不卡 | 91欧美精品 | 精品999国产 | 国产综合精品一区二区三区 | 亚一亚二国产专区 | 一区二区三区福利 | 日本视频不卡 | 亚洲精品成人在线 | 国产操在线 | av黄色国产 | 久久久久久久久久久免费视频 | 久久久午夜精品福利内容 | 久久天堂网站 | 欧美激情综合五月 | 成年人在线免费看视频 | 国产精品视频线看 | 久久99九九99精品 | 91成人精品一区在线播放69 | 中文字幕在线视频一区二区 | 黄色亚洲精品 | 免费三及片 | 久久中文字幕导航 | 国产伦精品一区二区三区免费 | 亚洲精品大全 | 色com| 国产一级不卡视频 | 97色在线观看免费视频 | 久久爱资源网 | 成人va在线观看 | 成年人电影免费在线观看 | 日韩av片免费在线观看 | 亚洲精品黄色片 | 中文字幕资源站 | 国产黄在线播放 | 欧美精品一区二区三区四区在线 | 国产精品久久久久亚洲影视 | 狠狠精品 | 欧美一区在线观看视频 | 91av视频免费观看 | 婷婷av综合 | 四虎国产 | 九九免费精品视频 | 中文亚洲欧美日韩 | 天堂va欧美va亚洲va老司机 | 色婷婷激情四射 | 91激情在线视频 | 日p视频在线观看 | 精品国产电影一区 | 99久久婷婷国产综合亚洲 | 日韩三级不卡 | 在线免费视频 你懂得 | 一区二区三区日韩视频在线观看 | 超碰成人av | 91香蕉视频污在线 | 国产成人精品一区二 | 国产精品视频久久久 | 日韩com| 久久久久久国产一区二区三区 | 久久视频99 | 婷婷久月 | 天天射天天干天天爽 | 又湿又紧又大又爽a视频国产 | 欧美一级免费高清 | 婷婷色网 | 国产在线探花 | 欧美成人91 | av色一区 | 婷婷色婷婷 | 久久精品a| 一区二区三区日韩精品 | 日韩欧美在线免费 | 黄色网在线免费观看 | 香蕉在线播放 | 久黄色| 国产小视频在线免费观看 | 91视频高清免费 | 婷婷综合五月天 | 亚洲成a人片77777kkkk1在线观看 | 成人高清av在线 | 超碰国产在线观看 | 日韩在线观看免费 | 97超碰人人澡 | 狠狠干夜夜| 中文字幕在线观看完整 | 国产高清不卡一区二区三区 | 日本 在线 视频 中文 有码 | 日本黄色免费在线观看 | 欧美性极品xxxx做受 | 91在线精品观看 | 日本性xxxxx| 国产精品刺激对白麻豆99 | 国产乱对白刺激视频在线观看女王 | 国产成人一二三 | 国产精品视频在线观看 | 综合色亚洲 | 国内精品在线观看视频 | 亚洲国产精品资源 | 久久蜜桃av | 久精品视频免费观看2 | 免费看搞黄视频网站 | 欧美日韩观看 | 最新av电影网站 | 999电影免费在线观看 | 成人久久综合 | 国产精品美女在线观看 | 看片网站黄 | 在线观看欧美成人 | 欧美视频在线二区 | 欧美激情视频一区二区三区 | 免费一级黄色 | 国产视频美女 | www五月天com | 日韩动漫免费观看高清完整版在线观看 | 久久成年视频 | 久久精品日产第一区二区三区乱码 | 麻豆系列在线观看 | 国产麻豆成人传媒免费观看 | 国产成人99av超碰超爽 | 成人免费一区二区三区在线观看 | 亚洲欧洲国产日韩精品 | 国产精品视频线看 | 成人超碰在线 | 91亚洲欧美激情 | 久久久国产精品一区二区中文 | 综合久久五月天 | 日韩理论片| 在线va视频 | 国产一级性生活 | 久久久久久久久免费视频 | 色天天| 午夜精品一区二区三区四区 | 亚洲日本va午夜在线影院 | 91精品在线免费观看视频 | 日韩午夜高清 | 国色天香永久免费 | 天天色天天射天天干 | 伊人天天狠天天添日日拍 | 亚洲精品xx| av高清一区二区三区 | 欧美另类调教 | 西西人体4444www高清视频 | 在线免费观看黄色av | 超碰在线99| 精品二区视频 | 在线免费黄色 | 国产成人三级在线 | 97成人在线观看视频 | 一区二区免费不卡在线 | 精品国产a | 中日韩欧美精彩视频 | 久久久久国产一区二区 | 免费看av在线 | a天堂中文在线 | 中文字幕精品久久 | 在线视频麻豆 | www色综合| 在线观看免费视频你懂的 | 97韩国电影| 精品在线观 | 69xx视频| 日本久久久影视 | 国产精品18久久久久久首页狼 | 天堂资源在线观看视频 | 亚洲美女在线一区 | 欧美精品一区二区免费 | 国产精品日韩欧美一区二区 | 免费看国产视频 | 西西人体4444www高清视频 | 人人爱在线视频 | 日韩欧美精品免费 | 亚洲欧美一区二区三区孕妇写真 | 91在线操| 99爱这里只有精品 | 超碰97公开 | 丁香花五月| 中文字幕 国产专区 | 亚洲一区二区麻豆 | 国产69精品久久久久9999apgf | 欧美日韩国产一区二区在线观看 | 日女人免费视频 | 97日日碰人人模人人澡分享吧 | 国产精品久久久久久久久久免费 | 午夜天天操 | 久久中文欧美 | 丁香婷婷深情五月亚洲 | 中文字幕欧美激情 |