个人未开通网站: http://justin1107.pc.evyundata.cn/vip_justin1107.html


Api

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Iot.Loan.Exam.Dapper;
using Iot.Loan.Exam.Models;
using JWT.Exceptions;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json; namespace Iot.Loan.Exam.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
[EnableCors("any")]
public class LoanController : ControllerBase
{
JWTHelper helper = new JWTHelper();
private IDapper dapper;
public LoanController(IDapper _dapper)
{
dapper = _dapper;
}
/// <summary>
/// 登录
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
[HttpPost]
public string Login([FromForm]UserInfo info)
{
//得到登录model
UserInfo model = dapper.Login(info);
if (model != null)
{
//定义字典存放用户登录的信息
Dictionary<string, object> keys = new Dictionary<string, object>();
keys.Add("User_Name", model.User_Name);
keys.Add("User_ID", model.User_ID);
keys.Add("User_Pwd", model.User_Pwd);
//得到toekn,给他失效时间
string token = helper.GetToken(keys, 30000);
return token;
}
else
{
return null;
}
}
/// <summary>
/// 还款信息列表
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<HuK_UserInfo>> Select(string token)
{
//token解码
string json = helper.GetPayload(token);
//反序列化
UserInfo model = JsonConvert.DeserializeObject<UserInfo>(json);
if (model != null)
{
return await Task.Run(() => { return dapper.Select(model.User_ID); });
}
else
{
return null;
}
}
/// <summary>
/// 账户信息列表
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<ZhuanHu_UserInfo>> ZhuanHuSelect(string token)
{
//token解码
string json = helper.GetPayload(token);
//反序列化
UserInfo model = JsonConvert.DeserializeObject<UserInfo>(json);
if (model != null)
{
return await Task.Run(() => { return dapper.YSelect(model.User_ID); });
}
else
{
return null;
}
}
/// <summary>
/// 还款
/// </summary>
/// <param name="HkId">还款ID</param>
/// <param name="token">用户登录的token,</param>
/// <returns></returns>
[HttpPost]
public int HK(int HkId, string token)
{
string json = helper.GetPayload(token);
UserInfo model = JsonConvert.DeserializeObject<UserInfo>(json);
if (model != null)
{
return dapper.HunKuan(model.User_ID, HkId);
}
else
{
return 0;
}
}
/// <summary>
/// 充值
/// </summary>
/// <param name="money">充值金额</param>
/// <param name="token">用户登录保存的Token</param>
/// <returns></returns>
[HttpPost]
public int CZ(decimal money, string token)
{
//token解码
string json = helper.GetPayload(token);
//反序列化
UserInfo info = JsonConvert.DeserializeObject<UserInfo>(json);
if (info != null)
{
return dapper.CzMoney(info.User_ID, money);
}
else
{
return 0;
}
}
}
}

cshtml

<script src="~/lib/jquery/dist/jquery.js"></script>
<div style="width:150px;height:100px;background-color:aqua">
<table>
<tr>
<th style="width:200px;">可用余额<br /></th>
<th id="th"></th>
</tr>
<tr>
<th colspan="2">
<input hidden="hidden" id="cz_money" type="text" />
<input id="btn_CZ" type="button" value="充值" />&nbsp;&nbsp;&nbsp;&nbsp;
<input id="btn_TX" type="button" value="提现" />
</th>
</tr>
</table>
</div>
<div style="margin-left:0px;margin-top:15px;">
<table>
<tr>
<th>还款期数</th>
<th>还款日期</th>
<th>应还本金</th>
<th>还款利息</th>
<th>还款总额</th>
<th>还款状态</th> </tr>
<tbody id="tb"></tbody>
</table>
</div>
<script>
$('#btn_CZ').click(function () {
$.ajax({
url: 'http://localhost:53048/Api/Loan/CZ?money=' + $('#cz_money').val() + '&token=' + localStorage["User_Name"],
type: 'post',
contentType: 'application/x-www-form-urlencoded',
accepts: 'application/x-www-form-urlencoded',
success: function (data) {
if (data > 0) {
$('#cz_money').attr('hidden', 'hidden');
window.location.reload();
} else {
alert("网络不可用,无法充值");
return;
}
}
})
})
$.ajax({
url: 'http://localhost:53048/Api/Loan/Select?token=' + localStorage["User_Name"],
type: 'post',
contentType: 'application/x-www-form-urlencoded',
accepts: 'application/x-www-form-urlencoded',
success: function (data) {
var tr = '';
var state = '';
$.each(data, function (i, t) {
$('#tb').empty();
if (t.hk_State == 1) {
state = '已还清';
} else if (t.hk_State == 0) {
state = '<a href="#" onclick="HuK(' + t.huanK_id + ')">还款</a>';
} else if (t.hk_State == 2) {
state = '还款';
}
tr += '<tr>';
tr += '<th>' + t.hK_QiShu + '</th>';
tr += '<th>' + t.hk_DataTime + '</th>';
tr += '<th>' + t.hk_BenJin + '</th>';
tr += '<th>' + t.hk_LiXi + '</th>';
tr += '<th>' + (t.hk_BenJin + t.hk_LiXi) + '</th>';
tr += '<th>' + state + '</th>';
tr += '</tr>';
})
$('#tb').append(tr);
}
})
$.ajax({
url: 'http://localhost:53048/Api/Loan/ZhuanHuSelect?token=' + localStorage["User_Name"],
type: 'post',
contentType: 'application/x-www-form-urlencoded',
accepts: 'application/x-www-form-urlencoded',
success: function (data) {
var th = '';
$.each(data, function (i, t) {
$('#th').empty();
th += '<th>' + t.zhuHu_Money + '</th>';
})
$('#th').append(th);
}
})
function HuK(hkid) {
$.ajax({
url: 'http://localhost:53048/Api/Loan/HK?HkId=' + hkid + '&token=' + localStorage["User_Name"],
type: 'post',
contentType: 'application/x-www-form-urlencoded',
accepts: 'application/x-www-form-urlencoded',
success: function (data) {
if (data > 0) {
alert("还款成功");
window.location.reload();
} else if (data == 0) {
alert("还款失败");
} else {
alert("余额不足");
$('#cz_money').removeAttr('hidden');
}
}
})
}
</script>

DapperHelper(我使用的是接口)

    public class DapperHelper : IDapper
{
/// <summary>
/// 充值
/// </summary>
/// <param name="UserId"></param>
/// <param name="money"></param>
/// <returns></returns>
public int CzMoney(int UserId, decimal money)
{
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Iot.Loan_DB;Integrated Security=True"))
{
return conn.Execute($"update ZhuanHu_UserInfo set ZhuHu_Money=ZhuHu_Money+{money} where User_Id={UserId}");
}
}
/// <summary>
/// 还款
/// </summary>
/// <param name="UserId"></param>
/// <param name="HkId"></param>
/// <returns></returns>
public int HunKuan(int UserId, int HkId)
{
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Iot.Loan_DB;Integrated Security=True"))
{
object Zhmoney = conn.ExecuteScalar($"select ZhuHu_Money from ZhuanHu_UserInfo where User_Id={UserId}"); object HkMoney = conn.ExecuteScalar($"select Hk_BenJin+Hk_LiXi from HuK_UserInfo where HuanK_id={HkId}");
if (Convert.ToDouble(Zhmoney) >= Convert.ToDouble(HkMoney))
{
//开始把账户余额减少
int h = conn.Execute($"update ZhuanHu_UserInfo set ZhuHu_Money=ZhuHu_Money-{HkMoney} where User_Id={UserId}");
if (h > 0)
{
//修改还款状态
return conn.Execute($"update HuK_UserInfo set Hk_State=1 where HuanK_id={HkId}");
}
else
{
return 0;
}
}
else
{
//余额不足
return -1;
} }
} /// <summary>
/// 登录
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public UserInfo Login(UserInfo user)
{
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Iot.Loan_DB;Integrated Security=True"))
{
string sql = $"select * from UserInfo where User_Name='{user.User_Name}' and User_Pwd='{user.User_Pwd}'";
return conn.Query<UserInfo>(sql).FirstOrDefault();
} }
/// <summary>
/// 还款信息列表
/// </summary>
/// <param name="UserId"></param>
/// <returns></returns>
public List<HuK_UserInfo> Select(int UserId)
{
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Iot.Loan_DB;Integrated Security=True"))
{
string sql = $"select * from HuK_UserInfo where User_Id={UserId}";
return conn.Query<HuK_UserInfo>(sql).ToList();
}
}
/// <summary>
/// 账户信息列表
/// </summary>
/// <param name="UserId"></param>
/// <returns></returns>
public List<ZhuanHu_UserInfo> YSelect(int UserId)
{
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Iot.Loan_DB;Integrated Security=True"))
{
string sql = $"select * from ZhuanHu_UserInfo where User_Id={UserId}";
return conn.Query<ZhuanHu_UserInfo>(sql).ToList();
}
}
}

.Net Core 实现账户充值,还款,用户登录(WebApi的安全)的更多相关文章

  1. ASP.NET Core 2.0 MVC - 获取当前登录用户信息

    一.前言 上篇实战完成后,没想到会有那么多的圈友给了那么多的支持,甚至连只是作为代码仓储的git上也给了一些小星星,真的感觉很惶恐啊,哈哈哈,毕竟代码写的很烂啊.由于上一篇只是大概说了下项目,所以准备 ...

  2. Asp.Net Core 项目实战之权限管理系统(5) 用户登录

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  3. .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息

    在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...

  4. 【京东账户】——Mysql/PHP/Ajax爬坑之用户登录

    一.引言 实现京东的账户项目,功能模块之一,用户登录.要用到的是Apach环境,Mysql.PHP以及Ajax. 二.依据功能创建库.表.记录 创建库:jd 创建表:登录表 添加三条记录 CREATE ...

  5. ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(使用官网提供的UI)

    IdentityServer官方提供web页面,可以根据需求修改样式.具体UI下载跟配置参考官网文档. 文档地址:https://identityserver4.readthedocs.io/en/r ...

  6. ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(通过接口登录,无UI版本)

    官网接口详解文档地址:文档地址 (PS:可通过接口名称搜索相应接口信息.) 源码地址:https://github.com/YANGKANG01/IdentityServer4-IdentityAut ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(19)-权限管理系统-用户登录

    系列目录 我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先完成了,要不权限是讲不下去了 把我们之前的表更新到EF中去 登录在Account控制器,所以我们要添加Account ...

  8. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录 我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先 ...

  9. UWP 应用获取各类系统、用户信息 (1) - 设备和系统的基本信息、应用包信息、用户数据账户信息和用户账户信息

    应用开发中,开发者时常需要获取一些系统.用户信息用于数据统计遥测.问题反馈.用户识别等功能.本文旨在介绍在 Windows UWP 应用中获取一些常用系统.用户信息的方法.示例项目代码可参见 Gith ...

随机推荐

  1. 记一次payload绕过电脑管家免杀

    一.msf命令提示符下generate命令生成1.首先可以使用show payloads命令查看所有的payload,然后使用use命令选中其中一个. 2.使用generate -h查看命令帮助 ge ...

  2. MPEG2网马实验

    实验目的 了解MPEG2网马的工作原理. 能分析简单的网马. 实验原理 通常被挂马的目标网站是会插入一段代码.比如: <iframe src="/muma.htm"; width="0" hei ...

  3. [旧][Android] ButterKnife 浅析

    备注 原发表于2016.05.08,资料已过时,仅作备份,谨慎参考 前言 自上星期写 Retrofit 写吐之后 ... 我问大队长能不能换个其他什么东西写,大队长就说了个单词 ButterKnife ...

  4. 小白都能看懂的tcp三次握手

    众所周知,TCP在建立连接时需要经过三次握手.许多初学者经常对这个过程感到混乱:SYN是干什么的,怎么一会儿是1一会儿是0?怎么既有大写的ACK又有小写的ack?为什么ACK在第二次握手才开始出现?初 ...

  5. 8.StringTable(字符串常量池)

    一.String的基本特性 String:字符串,使用一对 "" 引起来表示 String s1 = "atguigu" ; // 字面量的定义方式 Strin ...

  6. C语言while循环语句

    循环语句三要素 1.在循环外给循环变量赋初值2.进入循环判断循环变量3.在循环体内修改循环变量,使循环趋近结束 2021-11-02

  7. Pycharm:一直connecting to console的解决办法

    方法一: 1.打开Anaconda cmd(也就是Anaconda Prompt,在启动栏Anaconda目录里应该有)2.输入echo %PATH% 获得PATH value3.在PyCharm中, ...

  8. Python的内置数据结构

    Python内置数据结构一共有6类: 数字 字符串 列表 元组 字典 文件 一.数字 数字类型就没什么好说的了,大家自行理解 二.字符串 1.字符串的特性(重要): 序列化特性:字符串具有一个很重要的 ...

  9. el-dialog设置为点击弹窗以外的区域不自动关闭弹窗

    两种方法:单个设置或者全局设置 第一种:(单个设置) 在el-dialog标签中添加:close-on-click-modal="false"即可 <el-dialog ti ...

  10. 【计算机网络】TCP的三次握手与四次挥手

    今天讲一下TCP的三次握手与四次挥手 1.首先说TCP 协议的特点:TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决传输的可靠.有序.无丢失和不重复问题.TCP 是TCP/IP 体系中 ...