Netsharp下微信菜单以及OAuth
一、OAuth介紹
在微信開發中,當打開一個頁面是,業務場景一般會基于粉絲綁定用戶信息,即頁面需要基于粉絲和用戶的身份處理業務邏輯。
在微信中打開一個頁面有三個場景:
1.文本回復中直接包含url
2.圖文回復中攜帶url
3.微信菜單直接打開一個url
對于前兩者,因為使用的是請求和回復的方式,回復可以在后臺在頁面中通過url的參數傳遞粉絲的openId等身份標識數據。而對于微信菜單的url,因為沒有后臺的處理,所以無法在url中附加openId,導致菜單打開的頁面無法實現粉絲和用戶的身份識別。
微信提供了oauth方式,可以用來在微信菜單中打開的url進行粉絲和用戶身份的標識。需要說明的是只有微信服務號才支持oauth,對于訂閱號是不支持oauth的,即訂閱號菜單對應的url中無法識別粉絲和用戶的身份。本文介紹的是netsharp.weixin開發下的微信服務號oauth的處理機制。
另外:用戶點擊一個微信菜單的時候,可以發送一個消息,也可以打開一個url,本文主要介紹打開url的情況
如下場景:
| ?1.業務中微信打開的業務菜單:如http://www.netsharp.org/nav/weixin/index?originalId=gh_cd4d099926d5,本文稱之為"redirect_uri"(和微信oauth下的叫法一致) 2.微信要求url必須配置成這樣的:https://open.weixin.qq.com/connect/oauth2/authorize?from=weixin&appid=wx19a3e7936ff4ec13&redirect_uri=http%3A%2F%2Fwww.netsharp.org%2Fnav%2Faddins%2Fweixin%2Findex%3ForiginalId%3Dgh_cd4d099926d5&response_type=code&scope=snsapi_base&state=#wechat_redirect,本文稱之為oauth_url,在oauth_url中 redirect_uri作為一個參數(即上面的第一點提到的redirect_uri),并且在oauth_url中的redirect_uri部分需要編碼 |
?
用戶點擊微信菜單場景:
| 1.用戶點擊一個菜單 2.微信打開oauth_url 3.oauth_url頁面進行oauth驗證 4.oauth_url頁驗證通過后,跳轉到redirect_uri,并且給redirect_uri頁面追加了一個參數"code" 5.redirect_uri中,開發人員基于code,調用微信的api得到粉絲的信息 6.基于粉絲信息處理業務 7.結束 |
?
二、OAuth示例
下面是redirect_url也的demo代碼,首先netsharp會自動把"originalId"參數傳遞給redirect_url,在redirect_url如果想獲取openId則通過oauth_url給redirect_url追加的一個參數“code”獲取,netsharp把根據code獲取粉絲信息給封裝了,參見業務頁面的代碼:
<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%> <%@page import="org.netsharp.wx.pa.base.IFansService" %> <%@page import="org.netsharp.communication.ServiceFactory" %> <%@page import="org.netsharp.wx.pa.entity.Fans" %> <!DOCTYPE html> <html><head><meta charset="utf-8"><meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"><meta name="format-detection" content="telephone=no" /><title>oauth測試頁面</title></head><body > <%String originalId = (String)request.getParameter("originalId");response.getWriter().write("originalId:"+originalId+"<br/>");String code = (String)request.getParameter("code");response.getWriter().write("code:"+code+"<br/>");//oauth中必須根據code才能得到粉絲信息IFansService fansService = ServiceFactory.create(IFansService.class);Fans fans = fansService.attachByOpenId(code, originalId);response.getWriter().write("openId:"+fans.getOpenId()+"<br/>");response.getWriter().write("nickname:"+fans.getNickname()+"<br/>");response.getWriter().write("img:<img src='"+fans.getHeadImgUrl()+"' style='width:60px;height:60px' /><br/>");%></body> </html>測試頁的效果如下:
三、Netsharp下微信菜單的配置
因為oauth的頁面拼接很麻煩,netsharp.weixin工具把這些工作給封裝了,在微信菜單的配置,只要配置redirect_url就可以了,參見如下界面:
?
轉載于:https://www.cnblogs.com/Netsharp/p/5778384.html
總結
以上是生活随笔為你收集整理的Netsharp下微信菜单以及OAuth的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言文件的读写
- 下一篇: Ubuntu下如何禁用IPv6