微信支付實戰詳解

最近的旅遊度假項目,須要用到微信支付,由於咱們是在微信公衆號裏面,經過H5頁面進行微信支付,所以用到的微信支付是:公衆號微信支付,也稱做jsAPI微信支付。html

至於,微信支付的接口,請看個人另一篇博客http://www.cnblogs.com/chaojidan/p/4503878.html。前端

微信支付要作的三步:第一步:獲取客戶的微信號對應的惟一openID。第二步:經過此openID,調用統一下單接口,獲取prepay_id。第三步,經過prepay_id,調用微信支付接口,進行微信支付。java

前端:js,後端:java。ajax

第一步:獲取客戶微信號的openID。算法

首先,觀看此網頁:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html後端

裏面有一項是經過此連接:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect得到code。api

其中,scope的值若是設置爲snsapi_base ,那麼不會彈出受權頁面,直接跳轉,不過只能獲取用戶的openid,微信支付只須要這個openid,所以能夠等於snsapi_base。跨域

state隨即可以等於多少。微信

最重要的是redirect_uri,也就是用戶受權後,頁面跳轉到的URL,也就是咱們項目的支付頁面。app

若是這個回跳地址帶有參數,那麼須要使用encodeURIComponent進行編碼。

當頁面跳轉到回跳地址後,會帶上這些參數,而且還會加上code參數。獲取code後,請求如下連接獲取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

返回值中帶有openid:

{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE", "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" }
可是,因爲ajax請求會跨域,所以,可使用js請求後臺接口,也就是java代碼,咱們把code傳給後臺,讓後臺去請求https://api.weixin.qq.com/sns/oauth2/access_token這個接口,而後得到openid。

第二步:

調用統一下單接口,這個接口,必定要看清楚一些參數,好比:

openid,文檔上寫的是否是必填,可是你看下後面的文字:

trade_type=JSAPI,此參數必傳,用戶在商戶appid下的惟一標識。下單前須要調用【網頁受權獲取用戶信息】接口獲取到用戶的Openid。

也就是說,你的支付接口是JSAPI時,這個openid必傳,所以,須要先得到openid。

還有一個是時間戳,金額的格式,最後一個是簽名了,簽名要看微信提供的簽名文檔,須要注意的不少,請你們看清楚,最後那個API祕鑰ID,是在商戶平臺上面設置的,不是appSecret。

第三步:

js調用微信支付接口,java,後臺,提供前端js這些參數:

       "appId" : "wx2421b1c4370ec43b",     //公衆號名稱,由商戶傳入     
           "timeStamp":" 1395712654",         //時間戳,自1970年以來的秒數     
           "nonceStr" : "e61463f8efa94090b1f366cccfbbb444", //隨機串     
           "package" : "prepay_id=u802345jgfjsdfgsdg888",     
           "signType" : "MD5",         //微信簽名方式:     
           "paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信簽名 

這個參數形式必定要跟後臺人員進行溝通,確認,至於簽名對不對,微信有專門的簽名系統進行確認,地址是:http://mch.weixin.qq.com/wiki/tools/signverify/

 

通常,作好這些以後,你的編碼就完成了,可是你點擊支付的時候,可能會報錯,提示:invalid appid。

這個問題是由於支付受權目錄的問題,

進入微信公衆號號->微信支付-》開發配置裏面

有一個支付配置,一個支付測試。

能夠先在支付測試裏面配置,裏面須要添加白名單,也就是你微信號的帳號,否則進行請求時,會彈出access refuse的錯誤。

這個測試受權目錄,只能添加二級目錄或者三級目錄,可是必須注意的一點是:你的支付頁面,必須在這個二級目錄或者三級目錄,也就是說,你設置的二級目錄或者三級目錄下面,必須有支付頁面。這個切記。

最後,若是報簽名錯誤,那就是後臺java代碼寫的簽名算法出錯了,簽名算法,也注意先排序,而後最後添加api祕鑰,而後md5編碼,最後,弄成大寫。

若是,你們對微信公衆號支付有問題的,能夠留言,我能夠幫助你們。

說實話,微信支付這塊的文檔很亂,這點微信團隊須要整理下。

還有一點,網上有不少人寫了不少出錯的緣由,有些是沒用的,我不知道會害多少人,哎,支付目錄的問題,不少人沒有弄明白,請切記:

這個測試受權目錄,只能添加二級目錄或者三級目錄,可是必須注意的一點是:你的支付頁面,必須在這個二級目錄或者三級目錄,也就是說,你設置的二級目錄或者三級目錄下面,必須有支付頁面。這個切記。

 

 

 

 

加油!

相關文章
相關標籤/搜索