.Net6+Furion+Sqlsugar+SenparcSdk开发微信公众号系列之三:接入公众号

一、接入概述

接入微信公众平台开发,开发者需要按照如下步骤完成:

1、填写服务器配置

2、验证服务器地址的有效性

3、依据接口文档实现业务逻辑

二、填写服务器配置

微信公众号填写自己的服务器配置

三、编写API

删除脚手架中的测试服务

新建Global.cs用于全局引用

Global.cs中全局引用胜派sdk这样就不用每个类都引用了,这是.NET6新增功能

查看代码

 

新建文件夹和文件如图所述

引入Nuget包Senparc.Weixin.MP和Senparc.Weixin.AspNet

新建一个Api,路由地址就是我们服务器配置上填的域名后面跟着的地址,我的是wx。我这里用的是动态api所以不是继承的controller

using Furion.DynamicApiController;

using Microsoft.AspNetCore.Mvc;

using Senparc.Weixin.MP.Entities.Request;

namespace WeiXinApi.Application.Services

{

publicclass WeiXinService : IDynamicApiController

{

[HttpGet("/wx")]

publicstring Index([FromQuery] PostModel postModel, string echostr)

{

System.Console.WriteLine(echostr);

return echostr;

}

}

}

测试一下接口,没毛病

四、发布到云服务器并通过附加到进程调试

因为在服务器配置中,只能填域名,所以我们要把项目发布到云服务器中,我是通过ftp的方式上传。通过附加进程的方式调试,也可用通过内外穿透的方式调试程序,我这里直接附加进程调试。

WeiXinApi.Web.Entry中加入可以发布文件夹的数量

<SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>

直接服务器启动项目

附加到进程

选择托管

公众号页面测试请求

成功命中断点

五、使用胜派SDK验证请求

上面的代码是直接返回了echostr,实际情况我们需要验证一下,判断是否合法,这里可以直接把胜派Demo里的拿过来,首先先在配置文件里按胜派demo里的要求配置,我放在了applicationsettings.json

//CO2NET 设置"SenparcSetting": {

//以下为 CO2NET 的 SenparcSetting 全局配置,请勿修改 key,勿删除任何项"IsDebug": true,

"DefaultCacheNamespace": "DefaultCache",

//分布式缓存"Cache_Redis_Configuration": "#{Cache_Redis_Configuration}#", //Redis配置

//"Cache_Redis_Configuration": "localhost:6379",//不包含密码

//"Cache_Redis_Configuration": "localhost:6379,password=senparc,connectTimeout=1000,connectRetry=2,syncTimeout=10000,defaultDatabase=3",//密码及其他配置"Cache_Memcached_Configuration": "#{Cache_Memcached_Configuration}#", //Memcached配置"SenparcUnionAgentKey": "#{SenparcUnionAgentKey}#"//SenparcUnionAgentKey },

//Senparc.Weixin SDK 设置"SenparcWeixinSetting": {

//以下为 Senparc.Weixin 的 SenparcWeixinSetting 微信配置

//注意:所有的字符串值都可能被用于字典索引,因此请勿留空字符串(但可以根据需要,删除对应的整条设置)!

//微信全局"IsDebug": true,

//以下不使用的参数可以删除,key 修改后将会失效

//公众号"Token": "jinwandalaohu", //说明:字符串内两侧#和{}符号为 Azure DevOps 默认的占位符格式,如果您有明文信息,请删除同占位符,修改整体字符串,不保留#和{},如:{"Token": "MyFullToken"}"EncodingAESKey": "xxx",

"WeixinAppId": "xxx",

"WeixinAppSecret": "xxx",

//扩展及代理参数"AgentUrl": "AgentUrl",

"AgentToken": "AgentToken",

"SenparcWechatAgentKey": "SenparcWechatAgentKey"

}

startup.cs里注册SDK

var config = App.Configuration;

services.AddSenparcGlobalServices(config)//Senparc.CO2NET 全局注册

.AddSenparcWeixinServices(config);//Senparc.Weixin 注册

configure里配置SDK

var senparcSetting = App.GetOptions<SenparcSetting>();

var senparcWeixinSetting = App.GetOptions<SenparcWeixinSetting>();

// 启动 CO2NET 全局注册,必须!var registerService = app.UseSenparcGlobal(env, senparcSetting, globalRegister =>

{

globalRegister.RegisterTraceLog(ConfigTraceLog);//配置TraceLog

}, true)

.UseSenparcWeixin(senparcWeixinSetting, (weixinRegister, weixinSetting) =>

{});

ConfigTraceLog是一个方法用来配置日志

///<summary>/// 配置微信跟踪日志(演示,按需)

///</summary>privatevoid ConfigTraceLog()

{

//这里设为Debug状态时,/App_Data/WeixinTraceLog/目录下会生成日志文件记录所有的API请求日志,正式发布版本建议关闭

//如果全局的IsDebug(Senparc.CO2NET.Config.IsDebug)为false,此处可以单独设置true,否则自动为true

Senparc.CO2NET.Trace.SenparcTrace.SendCustomLog("系统日志", "系统启动");//只在Senparc.Weixin.Config.IsDebug = true的情况下生效

//全局自定义日志记录回调

Senparc.CO2NET.Trace.SenparcTrace.OnLogFunc = () =>

{

//加入每次触发Log后需要执行的代码

System.Console.WriteLine("加入每次触发Log后需要执行的代码");

};

//当发生基于WeixinException的异常时触发

WeixinTrace.OnWeixinExceptionFunc = async ex =>

{

//加入每次触发WeixinExceptionLog后需要执行的代码

System.Console.WriteLine("加入每次触发WeixinExceptionLog后需要执行的代码");

};

}

在接口中通过sdk的方法获取token等信息,直接在WeiXinService中添加如下代码

publicstaticreadonlystring Token = Config.SenparcWeixinSetting.MpSetting.Token;//与微信公众账号后台的Token设置保持一致,区分大小写。publicstaticreadonlystring EncodingAESKey = Config.SenparcWeixinSetting.MpSetting.EncodingAESKey;//与微信公众账号后台的EncodingAESKey设置保持一致,区分大小写。publicstaticreadonlystring AppId = Config.SenparcWeixinSetting.MpSetting.WeixinAppId;//与微信公众账号后台的AppId设置保持一致,区分大小写。

修改Index方法的代码,可以用胜派demo中的代码

[HttpGet("/wx")]

publicstring Index([FromQuery] PostModel postModel, string echostr)

{

//System.Console.WriteLine(echostr);

//return echostr;if (CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token))

{

Console.WriteLine("通过:" + echostr);

return echostr; //返回随机字符串则表示验证通过 }

else

{

return ("failed:" + postModel.Signature + "," + Senparc.Weixin.MP.CheckSignature.GetSignature(postModel.Timestamp, postModel.Nonce, Token) + "。" +

"如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。");

}

}

发布到服务器测试一下,通过

再测一下不通过的,修改了一下token,提示验证失败

六、本章Gitee地址

https://gitee.com/huguodong520/weixinapi/tree/%E6%8E%A5%E5%85%A5%E5%85%AC%E4%BC%97%E5%8F%B7/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
概述 本平台主要功能是针对微信商家公众号提供与众不同的、有针对性的营销推广服务。通过沐雪微信平台,用户可以轻松管理自己的微信各类信息,对微信公众账号进行维护、开展智能机器人、在线发优惠劵、抽奖、刮奖、派发会员卡、打造微官网、开启微团购等多种活动,对微信营销实现有效监控,极大扩展潜在客户群和实现企业的运营目标。沐雪微信平台很好的弥补了微信公众平台本身功能不足、针对性不强、交互不便利的问题,为商家公众账号提供更为贴心的、且是核心需求的功能和服务。在线优惠劵、转盘抽奖、微信会员卡等推广服务更是让微信成为商家推广的利器。智能客服的可调教功能让用户真正从微信繁琐的日常客服工作中解脱出来,真正成为商家便利的新营销渠道。 二、源码特点 1、微信公众平台开发,对于公众平台所有功能进行完整开发。 2、多用户:可同时进行多公众号的管理和配置。 3、直接性:购买者可直接购买细微修改即是成品的平台商品。 4、开发语言:asp.net,C# ,webform,数据库sqlserver 2005 三、功能介绍 1、菜单回复:关注时回复、默认回复、文本回复、图文回复、语音回复、请求回复、LBS回复。 2、自定义菜单:公众号自定义菜单设置 3、用户列表管理:获取关注公众号的账户信息进行管理 4、微官网:各种微官网模板可自行配置,头部幻灯片,底部,分类模块配置,内容配置 5、微商城:商城模板配置、产品分类管理、商品信息管理、商品录入、客户资源管理、订单管 理、物流配送方式设置 6、支付方式:微信支付,货到付款。 7、微汽车[大模块]、微酒店、点餐系统 8、微会员卡:会员卡商家、会员卡商城、会员卡头部广告设计 9、用户管理:微信用户管理、系统角色管理、系统操作日志 10、后台菜单:后台导航菜单管理 11、系统设置:网站基本信息设置、功能权限设置、短信平台设置、邮件发送设置、文件上传设 置 12、代理商管理:代理商发展下线。 四、环境要求 开发环境: 操作系统:windows7,8 软件:vs2012+sqlserver2005 发布环境: 操作系统:windows server 2003,2008 软件:.netframework4.0,iis6+,sqlserver 2005 后续会更新vs2017+sql2012 ,新功能的开发
好的,以下是使用Furion+sqlsugar实现单用户登录的步骤: 1. 创建一个Furion项目,并添加sqlsugarsqlsugar.extensions库的引用。 2. 在appsettings.json文件中添加数据库连接字符串配置,例如: ``` { "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=TestDb;Uid=root;Pwd=123456;" } } ``` 3. 创建一个User表,用于存储用户信息,例如: ``` CREATE TABLE `User` ( `Id` bigint(20) NOT NULL AUTO_INCREMENT, `UserName` varchar(50) NOT NULL, `Password` varchar(50) NOT NULL, PRIMARY KEY (`Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` 4. 在Startup.cs文件的ConfigureServices方法中添加sqlsugar的配置,例如: ``` services.AddSqlSugar(new ConnectionConfig() { ConnectionString = Configuration.GetConnectionString("DefaultConnection"), DbType = DbType.MySql, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute }); ``` 5. 在UserService.cs文件中定义一个用于验证用户登录的方法,例如: ``` public class UserService : IUserService { private readonly ISqlSugarClient _sqlSugarClient; public UserService(ISqlSugarClient sqlSugarClient) { _sqlSugarClient = sqlSugarClient; } public async Task<bool> ValidateUserAsync(string userName, string password) { var user = await _sqlSugarClient.Queryable<User>().Where(u => u.UserName == userName && u.Password == password).FirstAsync(); return user != null; } } ``` 6. 在AccountController.cs文件中定义一个用于处理用户登录的方法,例如: ``` public class AccountController : ApiControllerBase { private readonly IUserService _userService; public AccountController(IUserService userService) { _userService = userService; } [HttpPost] public async Task<ActionResult> LoginAsync(LoginInputDto input) { if (await _userService.ValidateUserAsync(input.UserName, input.Password)) { var identity = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, input.UserName), }, CookieAuthenticationDefaults.AuthenticationScheme); var principal = new ClaimsPrincipal(identity); await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal); return Ok(new { message = "登录成功!" }); } else { return BadRequest("用户名或密码错误!"); } } [HttpGet] public async Task<ActionResult> LogoutAsync() { await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); return Ok(new { message = "退出登录成功!" }); } } ``` 7. 在Configure方法中添加Cookie身份验证中间件的配置,例如: ``` app.UseAuthentication(); app.UseAuthorization(); ``` 8. 在appsettings.json文件中添加身份验证配置,例如: ``` { "Authentication": { "Cookie": { "LoginPath": "/Account/Login", "LogoutPath": "/Account/Logout", "AccessDeniedPath": "/Home/AccessDenied", "Expiration": "1.00:00:00", "SlidingExpiration": true } } } ``` 9. 编写前端页面,使用ajax请求登录接口,登录成功后跳转到主页面。 以上就是使用Furion+sqlsugar实现单用户登录的全部步骤,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值