一個二維碼同時支持微信和支付寶掃描的原理很簡單,就是中間做了一個跳轉,判斷用戶用的是什么瀏覽器請求的即可。
這里首先要說清楚的是支付寶的支付是蠻簡單的,我們使用的是“手機網站支付”的方式,這種方式如果手機上安裝了支付寶就會調用支付寶APP進行支付,否則是H5支付;微信支付就復雜一點了,我們用微信H5支付必須用“公眾號支付”支付方式,這種方式支持H5調起支付API打開微信客戶端進行支付。
對於微信公眾號支付,使用到的參數應該是申請了微信公眾號支付之后微信發給申請人郵件里面的參數,剛開始的時候也是被這些參數給搞暈了
appid:應用ID,大部分情況都要用到。
mch_id:商戶號,下單的時候使用。
AppSecret:應用密鑰,獲取用戶openId時用到。
sign_key:簽名密鑰,下單和支付的時候用於加密參數。
以下是簡單的代碼流程:
二維碼生成地址
調用此方法生成一個二維碼,用戶用微信或者支付寶掃描二維碼進入到下面這個方法:
這個方法的關鍵就是判斷用戶用的是什么掃描的,這個可以通過User-Agent來判斷,然后在這個方法里面就可以創建訂單目的是把訂單編號傳遞給第三方支付渠道。
對於微信支付,在調用統一下單接口來創建訂單的時候是,如果trade_type用的是 "JSAPI"就必須傳遞一個用戶的openId:
因此在choosePayWay這個方法里面,如果用戶是用微信掃描的,我們要返回一個用於獲取用戶openId的鏈接地址的回調地址,注意是回調地址:
choosePayWay.do
choosePayWay.jsp
這樣用戶點擊微信支付會跳轉到authorize,然后微信會回調到我們提供的回調方法userOauthAndPayOrder.do
在這個方法里面我們用拿到的code換取用戶的openId
拿到用戶openId我們就可以調用統一下單接口下單了:
如果下單成功,我們會拿到一個微信的訂單號,然后就可以跳轉到微信支付頁面,同時調起微信APP進行支付了:
微信支付界面payByWeixin.jsp
只要進到這頁面就會調起微信APP進行支付了。
效果圖:
接下來我們說支付的支付,支付寶支付相對簡單的不能再簡單了,我們在choosePayWay.jsp里面添加一個連接:
點擊此鏈接進入到payByAlipay.do,這個方法里面我們調用支付寶的“手機網站支付”接口,生成訂單並發起支付,這個過程只需要一個步驟,而微信卻需要兩個步驟(微信是先下單,再支付),以下是調用調用支付寶支付代碼:
關鍵點在於app_pay這個參數,如果填“Y”,則會檢測是否安裝支付寶APP,如果安裝則打開APP支付。
效果圖:
注意:
1.支付寶使用的是老的WAP支付接口
2.如果微信支付接口簽名校驗工具校驗你提交到微信統一下單接口的XML是正確的,但你請求之后返回“簽名錯誤”那可能是你的KEY寫錯了,應該是商戶平台里面的KEY而不是公眾號后台的KEY。
此技能大家是否有get到呢?