O projeto atual visa principalmente o encapsulamento de interface de sites de redes sociais. Na fase inicial do projeto, concentra-se principalmente no desenvolvimento da plataforma WeChat SDK, que é simplesmente classificado de acordo com o nível de função da interface.
Este projeto fornece serviços na forma de uma biblioteca padrão, o que significa que pode suportar .Net Framework (4.6 e superior) e .Net Core.
Caso tenha alguma dúvida, você também pode perguntar na conta oficial (osscore):
1. Módulo de encaixe de autorização (Oauth)
Comando de instalação no nuget: Install-Package OSS.Clients.Oauth.WX
Autorização do usuário (oauth2.0), informações básicas de autorização do usuário
2. Módulo de mensagem de sessão (msg)
Comando de instalação no nuget: Install-Package OSS.Clients.Msg.Wechat
Gerenciamento de sessão, recebendo informações da sessão do usuário e respostas correspondentes
3. Funções avançadas de contas públicas (Plataforma)
1.Token de acesso
nuget下安装命令:**Install-Package OSS.Clients.Platform.WX.AccessToken**
这里主要是获取AccessToken接口的封装
WXPlatTokenApi - 公众号的正常Token接口
WXAgentPlatTokenApi - 代理平台的Token的接口
2. Parte de informações básicas
nuget下安装命令:**Install-Package OSS.Clients.Platform.WX.Basic**
这里主要是基础信息相关接口
WXPlatUserApi - 微信公众号用户信息相关接口
WXPlatIpApi - 微信服务器信息接口
WXPlatKfApi - 微信客服接口
WXPlatMassApi - 微信群发消息相关接口
WXPlatMediaApi - 微信素材相关接口
WXPlatMenuApi - 微信菜单相关接口
WXPlatQrApi - 微信二维码相关接口
3.Outras interfaces
nuget下安装命令:**Install-Package OSS.Clients.Platform.WX**
这里主要是公众号其他相关接口
WXPlatAssistApi - 微信jssdk辅助接口
WXPlatCardApi - 微信卡信息相关接口
WXPlatShakeApi - 微信摇一摇相关接口
WXPlatAppApi - 微信小程序相关接口
WXPlatStatApi - 微信统计相关接口
WXPlatStoreApi - 微信门店管理相关接口
4. Interface da plataforma do agente
nuget下安装命令:**Install-Package OSS.Clients.Platform.WX.Agent**
这里主要是公众号代理服务平台的相关接口
1. Chamada de autorização básica (na pasta 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. Chamada de sessão (na pasta Msg)
a. Primeiro declare as informações de configuração
// 声明配置
private static readonly WXChatServerConfig config = new WXChatServerConfig ( )
{
Token = "你的token" ,
EncodingAesKey = "你的加密key" ,
SecurityType = WXSecurityType . Safe , // 在微信段设置的安全模式
AppId = "你的appid" //
} ;
b. Defina um identificador de processamento (você pode implementar seu próprio Handler, apenas herdar de WXChatHandler)
private static readonly WXChatHandler msgService = new WXChatHandler ( config ) ;
c. Ao ligar, basta passar o conteúdo solicitado atualmente na entrada do programa:
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" ) ;
Entre eles, WXChatHandler pode ser uma classe de processamento específica que herda a implementação de WXChatHandler e retorna os resultados correspondentes reescrevendo eventos de usuário relevantes.
3. Chamada de função avançada (na pasta Plataforma)
Outras interfaces funcionais avançadas da conta oficial do WeChat requerem uma interface de token de acesso global, como informações do módulo push, etc. A aquisição automática do token de acesso foi encapsulada no processamento de solicitação subjacente do SDK. Por padrão, ele será salvo no sistema. cache e será atualizado automaticamente quando expirar. Se precisar ser salvo, no redis, ele pode ser injetado através do módulo de cache no oscommon. appid correspondem um a um, portanto não há necessidade de se preocupar com conflitos entre várias contas oficiais.
a. Declarar informações de configuração:
//声明配置信息
private static AppConfig m_Config = new AppConfig ( )
{
AppSource = "11" ,
AppId = "你的appId" ,
AppSecret = "你的secretkey"
} ;
b. Declarar uma instância:
private static readonly WXPlatMassApi m_OffcialApi = new WXPlatMassApi ( m_Config ) ;
c. Uso específico
m_OffcialApi . SendTemplateAsync ( "openid" , "templateId" , "url" , new { } )
Atualmente, a parte lógica desta parte da estrutura de interface foi processada. As principais funções da conta oficial foram concluídas. As interfaces da loja e do gerenciamento de equipamentos ainda serão atualizadas. , você mesmo pode implementá-lo ou contribuir com ele. Adicionar Uma nova interface requer apenas algumas linhas de código; consulte Código de contribuição para obter detalhes.
Tendo em vista os cenários reais de uso do negócio, a interface da conta oficial do WeChat foi simplesmente desmontada e AccessToken e outros são SDKs independentes. Todos os SDKs independentes fazem referência à biblioteca de classes OSS.Clients.Platform.WX.Base e fornecem configuração unificada de WXPlatConfigProvider neste tipo de biblioteca, principalmente para facilitar aos usuários a obtenção unificada de AccessToken ao usar outros SDKs, como: O projeto de gerenciamento de cache unificado AccessToken implementado usando OSS.Clients.Platform.WX.AccessToken implementa o método de aquisição de configuração AccessToken em WXPlatConfigProvider no projeto usando OSS.Clients.Platform.WX.Basic
Este projeto está atualmente focado principalmente no processamento do WeChat SDK. A estrutura principal do WeChat foi concluída e a interface precisa ser complementada. Será muito simples completar uma interface baseada na estrutura encapsulada. por exemplo, ele é simplesmente dividido nas duas etapas da parte a seguir:
1. Declare a entidade objeto
// 获取用户基本信息请求实体
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 ; }
}
Eu escrevi uma página js para gerar rapidamente endereços Gist de entidades por meio de descrições de campos de documentos WeChat, endereços chineses de código aberto
2.Implementação de função
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. Adicione testes unitários (opcional)
[ TestMethod ]
public void GetUserInfoTest ( )
{
var res = m_Api . GetUserInfo ( new WXPlatUserInfoReq ( )
{ openid = "o7gE1s6mygEKgopVWp7BBtEAqT-w" } ) ;
Assert . IsTrue ( res . IsSuccess ( ) ) ;
}
O restante pode ser enviado via git.
尽快完善
O projeto atual depende dos projetos de código aberto que escrevi antes, OSS.Common (entidade de erro global e injeção de módulo) e OSS.Http (solicitação http. Eles são relativamente simples e compactos, com apenas algumas classes, portanto há). não há necessidade de se preocupar com inchaço.