當想獲取用戶的支付寶數據時,一定要授權支付獲取數據,但支付寶授權用戶默認只針對支付寶內鏈接,所以我的思路是:調起支付寶後,支付寶自動打開內連接授權地址,授權成功後自動返回上一頁。
這裏面有幾個問題:
1、微信內置瀏覽器不能打開支付寶提供的任何鏈接,所以已經被pass掉了,我做的是判斷一下是否是微信瀏覽器,如果是微信瀏覽器的話,就提示用戶並讓用戶把打開支付寶並自動內聯授權地址的地址複製到手機瀏覽器打開。
2、部分瀏覽器因爲權限的問題,也打不開調用支付寶的地址,我們把這種默認爲非權限瀏覽器
3、瀏覽器無法判斷用戶是否安裝支付,如果不安裝支付寶也得提示用戶安裝支付寶,所以我們除了微信瀏覽器點授權支付寶的時候默認都是彈出未安裝支付寶的提示,如果安裝了支付寶的話就會自動跳轉到支付寶並跳轉到授權頁面。
4、用戶授權成功支付寶後無法自動跳回瀏覽器,這個我們沒有解決,只是在授權成功的頁面時提示了一下用戶,讓用戶自行返回瀏覽器操作。
5、用戶自行返回瀏覽器後提示未安裝支付的提示還會存在,我用的H5的方法,檢測到用戶從其他頁面返回的時候關閉提示框
document.addEventListener("visibilitychange", function() { //關閉提示框 });
6、瀏覽器打開支付寶APP並跳轉到指定頁面的方法:
let locationHref = `alipays://platformapi/startapp?appId=20000067&url=
https%3a%2f%2fopenauth.alipay.com%2foauth2%2fpublicAppAuthorize.htm%3f
app_id%3d201611%26scope%3dauth_user%26redirect_uri%3d${redirectUrl}`
解釋一下這幾塊地方:
alipays://platformapi/startapp//打開支付寶
appId=20000067 //這個我也不確定是什麼,因爲支付寶的文檔上沒寫,但測得如果改成其他的就打不開支付寶瀏覽器,所以我認爲這個應該是執行的操作
url= //這個地方就是打開授權的頁面,支付寶有個指定的授權API,裏面有個redirect_uri是支付寶校驗成功之後的回調地址,這個地址是我們的,
在這個地址後面會帶一個code,code是用戶的唯一標識,傳給後臺,讓後臺調用支付寶API就可以了。
至於url授權頁面的開頭https://openauth.alipay.com/oauth2/publicAppAuthorize.htm是支付寶提供的
這裏還有一個注意的地方,url=後面的地址必須decode,而redirect_uri必須decode兩遍,爲什麼是兩遍,
是因爲作爲回調地址decode一遍,作爲url裏面的參數還要 decode一遍
7、注意,如果提示redirect_url沒有認證還是沒有權限的話,需要在支付寶開放平臺的裏面加上安全域名,不然支付寶不認
8、支付寶開放文檔:https://docs.open.alipay.com/289/105656
9、如果在授權頁面裏面需要調用支付寶的一些方法,可以使用http://myjsapi.alipay.com/jsapi/,這個是H5JSAPI,但只能在支付寶的內置瀏覽器用。