目前專案主要是針對社群網站的介面封裝,在專案前期主要以微信平台sdk開發為主,根據介面功能層級簡單分類,
此項目以標準函式庫的形式提供服務,也就是可以同時支援.Net Framework(4.6以上版本) 和.Net Core
如果有問題,也可以在公眾號(osscore)提問:
一.授權對接模組(Oauth)
nuget下安裝指令: Install-Package OSS.Clients.Oauth.WX
使用者授權(oauth2.0),使用者授權基礎訊息
二.會話訊息模組(msg)
nuget下安裝指令: Install-Package OSS.Clients.Msg.Wechat
會話管理,接收使用者的會話訊息,以及對應的回應
三.公眾號高級功能(Platform)
1. AccessToken
nuget下安装命令:**Install-Package OSS.Clients.Platform.WX.AccessToken**
这里主要是获取AccessToken接口的封装
WXPlatTokenApi - 公众号的正常Token接口
WXAgentPlatTokenApi - 代理平台的Token的接口
2.基礎資訊部分
nuget下安装命令:**Install-Package OSS.Clients.Platform.WX.Basic**
这里主要是基础信息相关接口
WXPlatUserApi - 微信公众号用户信息相关接口
WXPlatIpApi - 微信服务器信息接口
WXPlatKfApi - 微信客服接口
WXPlatMassApi - 微信群发消息相关接口
WXPlatMediaApi - 微信素材相关接口
WXPlatMenuApi - 微信菜单相关接口
WXPlatQrApi - 微信二维码相关接口
3.其他接口
nuget下安装命令:**Install-Package OSS.Clients.Platform.WX**
这里主要是公众号其他相关接口
WXPlatAssistApi - 微信jssdk辅助接口
WXPlatCardApi - 微信卡信息相关接口
WXPlatShakeApi - 微信摇一摇相关接口
WXPlatAppApi - 微信小程序相关接口
WXPlatStatApi - 微信统计相关接口
WXPlatStoreApi - 微信门店管理相关接口
4.代理平台介面
nuget下安装命令:**Install-Package OSS.Clients.Platform.WX.Agent**
这里主要是公众号代理服务平台的相关接口
1.基礎授權調用(sns資料夾下)
//声明配置信息
private static AppConfig m_Config = new AppConfig ( )
{
AppSource = "11" ,
AppId = "你的appId" ,
AppSecret = "你的secretkey"
} ;
// 接口api实例
private static WXOauthApi m_AuthApi = new WXOauthApi ( m_Config ) ;
// 获取微信授权地址
public ActionResult auth ( )
{
var res = m_AuthApi . GetAuthorizeUrl ( "http://www.social.com/wxoauth/callback" ,
AuthClientType . WXPlat ) ;
return Redirect ( res ) ;
}
// 微信回调页,此页面获取accesstoken 获取用户基础信息
public ActionResult callback ( string code , string state )
{
var tokecRes = m_AuthApi . GetAuthAccessToken ( code ) ;
if ( tokecRes . IsSuccess ( ) )
{
var userInfoRes = m_AuthApi . GetWXAuthUserInfo ( tokecRes . AccessToken , tokecRes . OpenId ) ;
return Content ( "你已成功获取用户信息!" ) ;
}
return Content ( "获取用户授权信息失败!" ) ;
}
2.會話呼叫(Msg資料夾下)
a.首先聲明配置訊息
// 声明配置
private static readonly WXChatServerConfig config = new WXChatServerConfig ( )
{
Token = "你的token" ,
EncodingAesKey = "你的加密key" ,
SecurityType = WXSecurityType . Safe , // 在微信段设置的安全模式
AppId = "你的appid" //
} ;
b. 定義一個處理句柄(可以實作一個自己的Handler,繼承自WXChatHandler 即可)
private static readonly WXChatHandler msgService = new WXChatHandler ( config ) ;
c. 呼叫時將目前請求的內容傳入程式入口即可:
using ( StreamReader reader = new StreamReader ( Request . InputStream ) )
{
requestXml = reader . ReadToEnd ( ) ;
}
try
{
var res = msgService . Process ( requestXml , signature , timestamp , nonce , echostr ) ;
if ( res . IsSuccess ( ) )
return Content ( res . data ) ;
}
catch ( Exception ex )
{
}
return Content ( "success" ) ;
其中WXChatHandler 可以是自己繼承WXChatHandler 實作的具體處理類,透過重寫相關使用者事件返回對應結果即可。
3.進階功能呼叫(Platform資料夾下)
微信公眾號的其他高級功能接口都需要一個全局的accesstoken接口,像推送模組信息等,accesstoken自動獲取已經被封裝在sdk底層的請求處理中,默認會使用系統緩存保存,過期自動更新,如果需要保存到像redis中可以透過oscommon中的快取模組注入,增加一個針對sns的快取模組實作就可以了(後續給一個範例),access和appid一一對應,不用擔心多個公眾號的衝突問題。
a. 聲明設定資訊:
//声明配置信息
private static AppConfig m_Config = new AppConfig ( )
{
AppSource = "11" ,
AppId = "你的appId" ,
AppSecret = "你的secretkey"
} ;
b. 宣告一個實例:
private static readonly WXPlatMassApi m_OffcialApi = new WXPlatMassApi ( m_Config ) ;
c. 具體使用
m_OffcialApi . SendTemplateAsync ( "openid" , "templateId" , "url" , new { } )
目前這部分介面框架邏輯部分已經處理完畢,公號主要功能已經完成,還差小店和設備管理等部分的接口完善,後續將很快更新,如果有需要的也可以自己實現或貢獻過來,添加一個新介面只需要幾行程式碼即可,詳見貢獻程式碼。
針對業務的實際使用場景,微信公眾號介面做了簡單拆解,AccessToken等為獨立SDK。 所有獨立的SDK引用OSS.Clients.Platform.WX.Base類別庫,在此類庫下提供WXPlatConfigProvider統一配置,主要是方便用戶使用其他部分SDK時實現AccessToken的統一獲取,如:使用OSS.Clients.Platform.WX.AccessToken實作的AccessToken統一快取管理項目,在使用OSS.Clients.Platform.WX.Basic的專案中實作WXPlatConfigProvider下的設定AccessToken的取得方法
這個專案目前主要集中在微信sdk處理,微信部分主體框架部分已經完成,需要對接口進行補充,根據已經封裝完畢的框架完成一個接口將非常簡單,以獲取用戶基本信息為例,簡單分為以下兩部步:
1.聲明對象實體
// 获取用户基本信息请求实体
public class WXPlatUserInfoReq
{
public string openid { get ; set ; }
public string lang { get ; set ; }
}
// 响应实体,继承WXBaseResp
public class WXPlatUserInfoResp : WXBaseResp
{
public string openid { get ; set ; }
public string nickname { get ; set ; }
//... 字段省略
public List < int > tagid_list { get ; set ; }
}
我寫了個js頁面,快速透過微信文檔欄位描述產生實體Gist位址,開源中國位址
2.功能實現
public WXPlatUserInfoResp GetUserInfo ( WXPlatUserInfoReq userReq )
{
var req = new OssHttpRequest ( ) ;
req . HttpMethod = HttpMethod . Get ;
req . AddressUrl = string . Concat ( m_ApiUrl ,
$ "/cgi-bin/user/info?openid= { userReq . openid } &lang= { userReq . lang } " ) ;
// 请求地址中的AccessToken 底层会自动补充
return RestCommonOffcial < WXPlatUserInfoResp > ( req ) ;
}
3.新增單元測試(非必須)
[ TestMethod ]
public void GetUserInfoTest ( )
{
var res = m_Api . GetUserInfo ( new WXPlatUserInfoReq ( )
{ openid = "o7gE1s6mygEKgopVWp7BBtEAqT-w" } ) ;
Assert . IsTrue ( res . IsSuccess ( ) ) ;
}
剩下的透過git提交即可。
尽快完善
目前專案依賴我以前寫的開源專案OSS.Common(全域錯誤實體,和模組注入) 和OSS.Http(http請求) 都比較簡單小巧,只有幾個class,不用擔心臃腫