摘要:淺析微信支付微信公眾號網頁授權本文是淺析微信支付系列文章的第四篇,主要講解微信支付前如何獲取獲取網頁授權及用戶信息獲取。淺析微信支付系列已經更新三篇了喲,沒有看過的朋友們可以看一下哦。
淺析微信支付:微信公眾號網頁授權
本文是【淺析微信支付】系列文章的第四篇,主要講解微信支付前如何獲取獲取網頁授權及用戶信息獲取。
淺析微信支付系列已經更新三篇了喲~,沒有看過的朋友們可以看一下哦。
淺析微信支付:開發前的準備
淺析微信支付:前篇大綱
淺析微信支付:微信支付簡單介紹(小程序、公眾號、App、H5)
1、開發前的準備首先,如果沒有看過本系列 淺析微信支付:開發前的準備 的朋友需要看一下這篇文章,鏈接在上方;本文需要用到開發前準備中的幾個知識點:設置安全、設置白名單、得到公眾號一系列信息(appidapiKey等);如果需要在本地開發測試,還需要下載 微信開發者工具和 微信公眾平臺接口測試帳號 。
下面我們開始進入開發階段。
2、設置測試號相關信息因為項目在開發階段的時候,需要本地調試,所以需要使用測試號來驗證代碼是否正確,所以下面會講如何設置測試號相關配置;
首先我們進入 微信公眾平臺接口測試帳號申請 頁面,點擊登錄即可使用微信賬號登錄(一個微信號只有一個測試號)。
登錄后可以進入測試號管理界面,如下:
按要求設置上方圖片中的配置,即可減少80%的問題,如果調用時還有其他問題,請到文末添加作為微信,可進入討論群和大家一起交流。
3、獲取微信網頁授權使用以下代碼獲取微信網頁授權:
微信官方js文件:
封裝的微信工具文件weixin_util.js:
調用微信config方法并獲取網頁授權:
如果訪問頁面路徑,得到以下顯示,就已經成功獲取網頁授權,其他均為失敗:
如果出現其他錯誤,需要檢查一下第一步時設置的路徑安全接口、域名是否正確,開啟weixinConfig中的debug模式,看是否為沒有正確設置功能模塊;如果還不能解決,請到文末看樓主上一篇文章或者添加作者進群即可。
4、獲取微信用戶信息這里說一下上面獲取用戶授權的具體參數:
第一步,獲取config需要的基礎參數:
/** * 根據appid獲取wx.config需要的基礎參數 * @param reqMap requestUrl 請求頁面地址、appid appid * @return json * * @author yclimb * @date 2018/9/25 */ @ApiOperation(value = "微信公眾號|config需要的基礎參數", httpMethod = "POST", notes = "config需要的基礎參數") @PostMapping("/getSignature") public AppMessage getSignature(@RequestBody MapreqMap) { Map map = Maps.newHashMap(); switch (reqMap.get("appid")) { case WXPayConstants.APP_ID: map = wxUtils.getSignature(reqMap.get("requestUrl"), reqMap.get("appid"), BaseConstants.WX_MINI_PROGRAM_YUEDIAN_CODE); break; case WXPayConstants.APP_ID_CHUNBO: map = wxUtils.getSignature(reqMap.get("requestUrl"), reqMap.get("appid"), BaseConstants.WX_CHUNBO_JSAPI_YUEDIAN_CODE); break; } return AppMessage.success(map); }
第二部分:獲取用戶授權的基礎信息:
// 這里的appid就是咋們測試號的appid $appid="xxx"; // 這里的地址需要http://且必須encodeURI,此地址為獲取用戶信息后,微信自動轉發的服務器端接口,用來接收微信的授權code,在后端處理而得到用戶基本信息 $redirect_uri=encodeURI("http://127.0.0.1:8888/weixin/auth/authorize.do"); // 微信官方的授權接口 $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+$appid+"&redirect_uri="+$redirect_uri+"&response_type=code&scope=snsapi_userinfo&state=" + state + "#wechat_redirect"; // state可以用來區分特殊參數和配置
具體可見微信官方文檔,文檔如下:微信網頁授權接口
以上為js頁面處理,下面我們來具體講解 redirect_uri 這個接口中需要處理的邏輯;
WXAuthController:
/** * 微信網頁授權 * https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 * 第一步:用戶同意授權,獲取code * 第二步:通過code換取網頁授權access_token * @return str * * @author yclimb * @date 2018/7/30 */ @ApiOperation(value = "微信用戶|網頁授權", httpMethod = "GET", notes = "獲取前端微信用戶的網頁授權,得到用戶基礎信息") @GetMapping("/authorize") public AppMessage authorize(HttpServletRequest request) { // 跳轉頁面標識 String state = request.getParameter("state"); // 通過code獲取access_token String code = request.getParameter("code"); log.info("authorize:code:{}", code); String appid; String secret; // 根據不同的state得到不同的微信公眾號網頁授權 switch (state) { case STATE_ASYD: appid = WXPayConstants.APP_ID_ASYD; secret = WXPayConstants.SECRET_ASYD; break; default: appid = WXPayConstants.APP_ID_CHUNBO; secret = WXPayConstants.SECRET_CHUNBO; break; } // 獲取access_token和openid JSONObject jsonToken = wxUtils.getJsapiAccessTokenByCode(code, appid, secret); if (null == jsonToken) { return AppMessage.error(-2); } return AppMessage.success(jsonToken); }
WXUtils:
/** * 網頁授權獲取用戶信息時用于獲取access_token以及openid * 請求路徑:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code(最后一個參數不變) * * @param code c * @return access_token json obj * @author yclimb * @date 2018/7/30 */ public JSONObject getJsapiAccessTokenByCode(String code, String appid, String secret) { if (StringUtils.isBlank(code)) { return null; } try { // 獲取access_token String access_token_json = restTemplate.getForObject(WeChatURL.OAUTH_ACCESS_TOKEN_URL, String.class, appid, secret, code); logger.info("getJsapiAccessTokenByCode:access_token_json:{}", access_token_json); if (StringUtils.isBlank(access_token_json)) { return null; } JSONObject jsonObject = JSON.parseObject(access_token_json); if (StringUtils.isBlank(jsonObject.getString("access_token"))) { return null; } return jsonObject; } catch (Exception e) { logger.error(e.getMessage(), e); } return null; }
使用以上方法就可以得到微信用戶的基礎咯~,上面是作者已經封裝好的sdk方法,具體的源碼請見文末源碼地址。
如果用戶已經授權,第二次進入網頁,這時候不需要再次授權,作者也提供了另一種獲取用戶信息的方法,通過access_token和openid請求獲取用戶信息,代碼如下:
/** * 通過access_token和openid請求獲取用戶信息 * @return str * * @author yclimb * @date 2018/9/17 */ @ApiOperation(value = "微信用戶|通過access_token和openid請求獲取用戶信息", httpMethod = "POST", notes = "通過access_token和openid請求獲取用戶信息") @PostMapping("/getXxxUser/{access_token}/{openid}") public AppMessage getXxxUser(@PathVariable String access_token, @PathVariable String openid) { // 通過access_token和openid請求獲取用戶信息 JSONObject jsonUserinfo = wxUtils.getJsapiUserinfo(access_token, openid); if (null == jsonUserinfo) { return AppMessage.error(-2); } // 判斷用戶是否在悅店系統中是一個用戶 String unionid = jsonUserinfo.getString("unionid"); if (StringUtils.isBlank(unionid)) { return AppMessage.error(61008); } // 存儲用戶信息到數據庫 // 用戶名稱解碼 user.setNickName(UserNickUtil.decodeNickName(user.getNickName())); return AppMessage.success(user); }結語
根據以上步驟實現,就可以完成微信授權-用戶信息獲取等操作,如果有問題,歡迎小伙伴隨時交流~
預告:下一篇文章,作者將講 統一下單接口,敬請期待!!!
?如果想要提前一覽源碼的小伙伴,可以先看看我的 github,地址如下: https://github.com/YClimb/wxpay-sdk/blob/master/README.md
加作者私人微信,作者微信號如下 yclimb,標明 微信支付 可拉入微信支付討論群與小伙伴一起探討哦,一定要標明 微信支付 哦~
到此本文就結束了,關注公眾號查看更多推送!!!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72032.html
摘要:本文是淺析微信支付系列文章的第三篇,主要會講一下在開發前的一些注意事項。淺析微信支付系列已經更新兩篇了喲,沒有看過的朋友們可以看一下。開通微信支付需要注冊登陸微信商戶平臺,微信支付相關的信息都需要在這個平臺上進行操作。 本文是【淺析微信支付】系列文章的第三篇,主要會講一下在開發前的一些注意事項。 淺析微信支付系列已經更新兩篇了喲~,沒有看過的朋友們可以看一下。 淺析微信支付:前篇大綱...
摘要:本文是淺析微信支付系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。淺析微信支付前篇大綱微信支付是集成在微信客戶端的支付功能,用戶可以通過手機完成快速的支付流程。目前微信支付支持手機系統有蘋果安卓和。 本文是【淺析微信支付】系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。 上篇文章講了本系列的大綱,沒有看過的朋友們可以看一下。 淺析微信支...
摘要:本文是淺析微信支付系列文章的第十三篇,主要講解在如何開通商戶平臺的紅包功能和為用戶發放紅包,以及查詢發送紅包記錄。操作路徑登錄微信支付商戶平臺產品中心現金紅包開通。 本文是【淺析微信支付】系列文章的第十三篇,主要講解在如何開通商戶平臺的紅包功能和為用戶發放紅包,以及查詢發送紅包記錄。 淺析微信支付系列已經更新十三篇了喲~,沒有看過的朋友們可以看一下哦。 淺析微信支付:(余額提現)企業...
摘要:本文是淺析微信支付系列文章的第十五篇,主要講解如何開通免充值產品功能流程和其中的注意事項,對于接口升級會重要講解,避免爬坑。 本文是【淺析微信支付】系列文章的第十五篇,主要講解如何開通免充值產品功能流程和其中的注意事項,對于接口升級會重要講解,避免爬坑。 淺析微信支付系列已經更新十五篇了喲~,沒有看過的朋友們可以看一下哦。 淺析微信支付:商戶平臺代金券或立減優惠開通、指定用戶代金券發...
摘要:淺析微信支付前篇大綱本文是淺析微信支付系列文章的第一篇,主要會介紹一下為何寫下這個系列以及對于微信支付的一點小經驗,與君共勉。下面講一下我是如何去學習微信支付的。 淺析微信支付:前篇大綱 本文是【淺析微信支付】系列文章的第一篇,主要會介紹一下為何寫下這個系列以及對于微信支付的一點小經驗,與君共勉。 以下會分幾個步驟講一下我學習微信支付的過程,也是一部辛酸史,也是希望朋友們不要再次跌進...
閱讀 1625·2021-11-02 14:42
閱讀 521·2021-10-18 13:24
閱讀 939·2021-10-12 10:12
閱讀 1817·2021-09-02 15:41
閱讀 3201·2019-08-30 15:56
閱讀 2874·2019-08-29 16:09
閱讀 2056·2019-08-29 11:13
閱讀 3617·2019-08-28 18:06