Netsharp下微信菜单以及OAuth
一、OAuth介紹
在微信開(kāi)發(fā)中,當(dāng)打開(kāi)一個(gè)頁(yè)面是,業(yè)務(wù)場(chǎng)景一般會(huì)基于粉絲綁定用戶信息,即頁(yè)面需要基于粉絲和用戶的身份處理業(yè)務(wù)邏輯。
在微信中打開(kāi)一個(gè)頁(yè)面有三個(gè)場(chǎng)景:
1.文本回復(fù)中直接包含url
2.圖文回復(fù)中攜帶url
3.微信菜單直接打開(kāi)一個(gè)url
對(duì)于前兩者,因?yàn)槭褂玫氖钦?qǐng)求和回復(fù)的方式,回復(fù)可以在后臺(tái)在頁(yè)面中通過(guò)url的參數(shù)傳遞粉絲的openId等身份標(biāo)識(shí)數(shù)據(jù)。而對(duì)于微信菜單的url,因?yàn)闆](méi)有后臺(tái)的處理,所以無(wú)法在url中附加openId,導(dǎo)致菜單打開(kāi)的頁(yè)面無(wú)法實(shí)現(xiàn)粉絲和用戶的身份識(shí)別。
微信提供了oauth方式,可以用來(lái)在微信菜單中打開(kāi)的url進(jìn)行粉絲和用戶身份的標(biāo)識(shí)。需要說(shuō)明的是只有微信服務(wù)號(hào)才支持oauth,對(duì)于訂閱號(hào)是不支持oauth的,即訂閱號(hào)菜單對(duì)應(yīng)的url中無(wú)法識(shí)別粉絲和用戶的身份。本文介紹的是netsharp.weixin開(kāi)發(fā)下的微信服務(wù)號(hào)oauth的處理機(jī)制。
另外:用戶點(diǎn)擊一個(gè)微信菜單的時(shí)候,可以發(fā)送一個(gè)消息,也可以打開(kāi)一個(gè)url,本文主要介紹打開(kāi)url的情況
如下場(chǎng)景:
| ?1.業(yè)務(wù)中微信打開(kāi)的業(yè)務(wù)菜單:如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作為一個(gè)參數(shù)(即上面的第一點(diǎn)提到的redirect_uri),并且在oauth_url中的redirect_uri部分需要編碼 |
?
用戶點(diǎn)擊微信菜單場(chǎng)景:
| 1.用戶點(diǎn)擊一個(gè)菜單 2.微信打開(kāi)oauth_url 3.oauth_url頁(yè)面進(jìn)行oauth驗(yàn)證 4.oauth_url頁(yè)驗(yàn)證通過(guò)后,跳轉(zhuǎn)到redirect_uri,并且給redirect_uri頁(yè)面追加了一個(gè)參數(shù)"code" 5.redirect_uri中,開(kāi)發(fā)人員基于code,調(diào)用微信的api得到粉絲的信息 6.基于粉絲信息處理業(yè)務(wù) 7.結(jié)束 |
?
二、OAuth示例
下面是redirect_url也的demo代碼,首先netsharp會(huì)自動(dòng)把"originalId"參數(shù)傳遞給redirect_url,在redirect_url如果想獲取openId則通過(guò)oauth_url給redirect_url追加的一個(gè)參數(shù)“code”獲取,netsharp把根據(jù)code獲取粉絲信息給封裝了,參見(jiàn)業(yè)務(wù)頁(yè)面的代碼:
<%@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測(cè)試頁(yè)面</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中必須根據(jù)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>測(cè)試頁(yè)的效果如下:
三、Netsharp下微信菜單的配置
因?yàn)閛auth的頁(yè)面拼接很麻煩,netsharp.weixin工具把這些工作給封裝了,在微信菜單的配置,只要配置redirect_url就可以了,參見(jiàn)如下界面:
?
轉(zhuǎn)載于:https://www.cnblogs.com/Netsharp/p/5778384.html
總結(jié)
以上是生活随笔為你收集整理的Netsharp下微信菜单以及OAuth的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C语言文件的读写
- 下一篇: Ubuntu下如何禁用IPv6