Files
juipnet/Host/Controllers/UserController.cs

1523 lines
63 KiB
C#
Raw Normal View History

2023-07-29 10:19:42 +08:00
using Alipay.AopSdk.Core;
using Alipay.AopSdk.Core.Domain;
using Alipay.AopSdk.Core.Request;
using Alipay.AopSdk.Core.Util;
using HHncore.Pass.Vpn.Request.Product;
using Hncore.Infrastructure.AliYun;
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.Serializer;
using Hncore.Infrastructure.SMS;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.User;
using Hncore.Pass.PaymentCenter.Model;
using Hncore.Pass.PaymentCenter.Pay.WxPay;
using Hncore.Pass.PaymentCenter.WxPay.WechatJsPay;
using Hncore.Pass.Sells.Domain;
using Hncore.Pass.Sells.Service;
using Hncore.Pass.Vpn.Domain;
using Hncore.Pass.Vpn.Service;
using Hncore.Wx.Open;
using Home.Models;
using Host.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using UserService = Hncore.Pass.BaseInfo.Service.UserService;
using WxAppUserService = Hncore.Pass.BaseInfo.Service.WxAppUserService;
namespace Home.Controllers
{
[Controller]
[Route("[Controller]/[Action]")]
public class UserController : Controller
2023-07-29 10:19:42 +08:00
{
UserService m_UserService;
ProductAccountService m_ProductAccountService;
AliDayu m_AliDayu;
ArticleService m_ArticleService;
ProductOrderService m_OrderService;
Hncore.Pass.BaseInfo.Service.UserScoreService m_UserScoreService;
private AgentService m_AgentService;
ProductPackageService m_PackageService;
ProductService m_ProductService;
CouponService m_CouponService;
Hncore.Pass.BaseInfo.Service.UserScoreService m_ScoreService;
SellerTaoBaoService m_TaoBaoService;
TaoBaoRefundService m_TaoBaoRefundService;
WxAppUserService m_WxAppUserService;
IConfiguration m_Configuration;
UserChargeOrderService m_ChargeService;
WxPayClient m_WxPayClient;
private AgentService m_agentService;
CouponUserOrginService m_CouponUserOrginService;
public UserController(UserService _UserService
, AliDayu _AliDayu
, ProductAccountService _ProductAccountService
, ArticleService _ArticleService
, ProductOrderService _OrderService
, Hncore.Pass.BaseInfo.Service.UserScoreService _UserScoreService
, AgentService _AgentService
, ProductPackageService _PackageService
, ProductService _ProductService
2023-07-29 10:19:42 +08:00
, CouponService _CouponService
, SellerTaoBaoService _TaoBaoService
, TaoBaoRefundService _TaoBaoRefundService
, Hncore.Pass.BaseInfo.Service.UserScoreService _ScoreService
, WxAppUserService _WxAppUserService
, UserChargeOrderService _ChargeService
, IConfiguration _Configuration
, WxPayClient _WxPayClient
2023-07-29 10:19:42 +08:00
, AgentService _agentService
, CouponUserOrginService _CouponUserOrginService)
{
m_UserService = _UserService;
m_AliDayu = _AliDayu;
m_ProductAccountService = _ProductAccountService;
m_ArticleService = _ArticleService;
m_OrderService = _OrderService;
m_UserScoreService = _UserScoreService;
m_AgentService = _AgentService;
m_PackageService = _PackageService;
m_CouponService = _CouponService;
m_TaoBaoService = _TaoBaoService;
m_TaoBaoRefundService = _TaoBaoRefundService;
m_ScoreService = _ScoreService;
m_ProductService = _ProductService;
m_WxAppUserService = _WxAppUserService;
m_Configuration = _Configuration;
m_ChargeService = _ChargeService;
m_WxPayClient = _WxPayClient;
m_agentService = _agentService;
m_CouponUserOrginService = _CouponUserOrginService;
}
[UserAuth]
public async Task<IActionResult> Index()
{
var userId = this.Request.GetUserInfo().UserId;
var model = new UserHomeModel();
model.UserModel = await m_UserService.GetById(userId);
var accountQuery = m_ProductAccountService.Query(m => m.UserId == userId && m.DeleteTag == 0);
2023-07-29 10:19:42 +08:00
model.AccountModel.TotalCount = await accountQuery.CountAsync();
model.AccountModel.ExpriedCount = await accountQuery.Where(m => m.EndTime < DateTime.Now).CountAsync();
var orderQuery = m_OrderService.Query(m => m.UserId == userId);
2023-07-29 10:19:42 +08:00
var todayOrderQuery = orderQuery.Where(m => (m.CreateTime - DateTime.Now).Days == 0);
model.Statistic.TodayExpend = todayOrderQuery.Where(m => (m.OrderState == OrderStatus.PayOk || m.OrderState == OrderStatus.Complete)).Sum(m => m.PaymentAmount);
model.Statistic.TodayRefund = todayOrderQuery.Where(m => (m.OrderState == OrderStatus.AutoRefundOver || m.OrderState == OrderStatus.UserRefundOver)).Sum(m => m.RefundAmount);
2023-07-29 10:19:42 +08:00
var monthOrderQuery = orderQuery.Where(m => m.CreateTime.Month == DateTime.Now.Month);
2023-07-29 10:19:42 +08:00
model.Statistic.MonthExpend = monthOrderQuery.Where(m => (m.OrderState == OrderStatus.PayOk || m.OrderState == OrderStatus.Complete)).Sum(m => m.PaymentAmount);
model.Statistic.MonthRefund = monthOrderQuery.Where(m => (m.OrderState == OrderStatus.AutoRefundOver || m.OrderState == OrderStatus.UserRefundOver)).Sum(m => m.RefundAmount);
2023-07-29 10:19:42 +08:00
var yearOrderQuery = orderQuery.Where(m => (m.CreateTime - DateTime.Now).Days == 0);
model.Statistic.YearExpend = yearOrderQuery.Where(m => (m.OrderState == OrderStatus.PayOk || m.OrderState == OrderStatus.Complete)).Sum(m => m.PaymentAmount);
2023-07-29 10:19:42 +08:00
var chargeQuery = m_UserScoreService.Query(m => m.UserId == userId);
model.Statistic.TodayCharege = chargeQuery.Where(m => (m.ScoreType == ScoreType.ManagerAdd || m.ScoreType == ScoreType.TaoBaoAdd) && (m.CreateTime - DateTime.Now).Days == 0).Sum(m => m.ScoreValue);
model.Statistic.MonthCharege = chargeQuery.Where(m => (m.ScoreType == ScoreType.ManagerAdd || m.ScoreType == ScoreType.TaoBaoAdd) && m.CreateTime.Month == DateTime.Now.Year).Sum(m => m.ScoreValue);
2023-07-29 10:19:42 +08:00
model.TopNewsModel = await m_ArticleService.GetTop(6, Hncore.Pass.Vpn.Domain.ArticleCatalog.Top);
return View(model);
}
[UserAuth]
public async Task<IActionResult> IndexInfo()
{
var userId = this.Request.GetUserInfo().UserId;
var model = new UserHomeModel();
model.UserModel = await m_UserService.GetById(userId);
var accountQuery = m_ProductAccountService.Query(m => m.UserId == userId);
model.AccountModel.TotalCount = await accountQuery.CountAsync();
model.AccountModel.ExpriedCount = await accountQuery.Where(m => m.EndTime < DateTime.Now).CountAsync();
var orderQuery = m_OrderService.Query(m => m.UserId == userId);
var todayOrderQuery = orderQuery.Where(m => (m.CreateTime - DateTime.Now).Days == 0);
model.Statistic.TodayExpend = todayOrderQuery.Where(m => (m.OrderState == OrderStatus.PayOk || m.OrderState == OrderStatus.Complete)).Sum(m => m.PaymentAmount);
model.Statistic.TodayRefund = todayOrderQuery.Where(m => (m.OrderState == OrderStatus.AutoRefundOver || m.OrderState == OrderStatus.UserRefundOver)).Sum(m => m.RefundAmount);
var monthOrderQuery = orderQuery.Where(m => m.CreateTime.Month == DateTime.Now.Month);
model.Statistic.MonthExpend = monthOrderQuery.Where(m => (m.OrderState == OrderStatus.PayOk || m.OrderState == OrderStatus.Complete)).Sum(m => m.PaymentAmount);
model.Statistic.MonthRefund = monthOrderQuery.Where(m => (m.OrderState == OrderStatus.AutoRefundOver || m.OrderState == OrderStatus.UserRefundOver)).Sum(m => m.RefundAmount);
var yearOrderQuery = orderQuery.Where(m => (m.CreateTime - DateTime.Now).Days == 0);
model.Statistic.YearExpend = yearOrderQuery.Where(m => (m.OrderState == OrderStatus.PayOk || m.OrderState == OrderStatus.Complete)).Sum(m => m.PaymentAmount);
var chargeQuery = m_UserScoreService.Query(m => m.UserId == userId);
model.Statistic.TodayCharege = chargeQuery.Where(m => (m.ScoreType == ScoreType.ManagerAdd || m.ScoreType == ScoreType.TaoBaoAdd) && (m.CreateTime - DateTime.Now).Days == 0).Sum(m => m.ScoreValue);
model.Statistic.MonthCharege = chargeQuery.Where(m => (m.ScoreType == ScoreType.ManagerAdd || m.ScoreType == ScoreType.TaoBaoAdd) && m.CreateTime.Month == DateTime.Now.Year).Sum(m => m.ScoreValue);
model.TopNewsModel = await m_ArticleService.GetTop(6, Hncore.Pass.Vpn.Domain.ArticleCatalog.Top);
return View(model);
}
/// <summary>
/// 登录
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<ApiResult> Login([FromBody] LoginRequest request)
{
var user = await m_UserService.Login(request);
var appId = m_Configuration["WxApps:AppId"];
var wxUser = await m_WxAppUserService.GetWxUser(appId, user.User.Id);
if (wxUser != null)
user.User.OpenId = wxUser.Openid;
this.HttpContext.Response.Cookies.Append("token", user.Token);
this.HttpContext.Response.Cookies.Append("userInfo", user.User.ToJson());
return new ApiResult(user);
}
/// <summary>
/// 登录
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet, AllowAnonymous]
public async Task<IActionResult> LoginOut()
{
this.HttpContext.Response.Cookies.Delete("token");
this.HttpContext.Response.Cookies.Delete("userInfo");
return Redirect("/");
}
/// <summary>
/// 手机验证码登录
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<ApiResult> PhoneLogin([FromBody] PhoneModel request)
{
var key = $"User_Login:{request.Phone}";
var code = await RedisHelper.GetAsync(key);
if (request.Code != code)
{
return new ApiResult(ResultCode.C_Access_Forbidden, "验证码不正确或者过期");
}
var userEntity = m_UserService.Query(m => m.Phone == request.Phone || m.LoginCode == request.Phone).FirstOrDefault();
if (userEntity == null)
{
return new ApiResult(ResultCode.C_Access_Forbidden, "用户不存在");
}
var user = await m_UserService.Login(new LoginRequest()
{
Logincode = userEntity.LoginCode,
Password = userEntity.Password
});
this.HttpContext.Response.Cookies.Append("token", user.Token);
this.HttpContext.Response.Cookies.Append("userInfo", user.User.ToJson());
return new ApiResult(user);
}
/// <summary>
/// 注册
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet, AllowAnonymous]
public IActionResult Regist()
{
return View();
}
/// <summary>
/// 注册
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<ApiResult> Regist([FromBody] PhoneModel request)
{
var key = $"User_Code:{request.Phone}";
if (request.Phone.NotHas())
{
return new ApiResult(ResultCode.C_Access_Forbidden, "手机号不能为空");
}
var code = await RedisHelper.GetAsync(key);
if (request.Code != code)
{
return new ApiResult(ResultCode.C_Access_Forbidden, "验证码不正确或者过期");
}
var userEntity = new User()
{
CreateType = UserCreateType.UserRegist,
LoginCode = request.Phone,
Password = request.Pwd,
Phone = request.Phone,
Wx = request.Wx,
QQ = request.QQ,
id_code = ""
2023-07-29 10:19:42 +08:00
};
var ret = await m_UserService.Regist(userEntity);
if (ret.Code != ResultCode.C_SUCCESS) return ret;
var userLogin = await m_UserService.Login(new LoginRequest()
{
Logincode = request.Phone,
Password = request.Pwd
});
this.HttpContext.Response.Cookies.Append("token", userLogin.Token);
this.HttpContext.Response.Cookies.Append("userInfo", userLogin.User.ToJson());
return new ApiResult(userLogin);
}
/// <summary>
/// 找回密码
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet, AllowAnonymous]
public IActionResult FindPwd()
{
return View();
}
/// <summary>
/// 找回密码
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<ApiResult> FindPwd([FromBody] PhoneModel request)
{
var key = $"FindUser_Code:{request.Phone}";
if (request.Phone.NotHas())
{
return new ApiResult(ResultCode.C_Access_Forbidden, "手机号不能为空");
}
var code = await RedisHelper.GetAsync(key);
if (request.Code != code)
{
return new ApiResult(ResultCode.C_Access_Forbidden, "验证码不正确或者过期");
}
var user = await m_UserService.GetByPhone(request.Phone);
if (user == null) return new ApiResult(ResultCode.C_Access_Forbidden, "手机号不存在");
2023-07-29 10:19:42 +08:00
return await m_UserService.UpdatePwd(user, request.Pwd);
}
/// <summary>
/// 发送手机验证码
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
// [HttpGet, AllowAnonymous]
// public async Task<ApiResult> SendPhoneCode(string phone,string key)
// {
// return new ApiResult(ResultCode.C_SUCCESS, "验证码已发送到您的手机");
// }
2023-07-29 10:19:42 +08:00
/// <summary>
/// 发送手机验证码
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<ApiResult> SendPhoneCodevefy(string phone, string key)
2023-07-29 10:19:42 +08:00
{
key = $"{key}:{phone}";
if (key.StartsWith("User_Code:") && m_UserService.Exist(m => m.LoginCode == phone || m.Phone == phone))
2023-07-29 10:19:42 +08:00
{
return new ApiResult(ResultCode.C_ALREADY_EXISTS_ERROR, "该手机号已经被注册了");
}
var code = await RedisHelper.GetAsync(key);
if (code.Has())
{
return new ApiResult(ResultCode.C_Access_Forbidden, "请稍后再试");
}
code = ValidateCodeHelper.MakeNumCode(4);
await RedisHelper.SetAsync(key, code, 60);
var ret = AliSmsService.Send("SMS_186355045", new { code }, "河南华连网络科技", phone);
2023-07-29 10:19:42 +08:00
if (ret)
{
return new ApiResult(ResultCode.C_SUCCESS, "验证码已发送到您的手机");
}
return new ApiResult(ResultCode.C_UNKNOWN_ERROR, "验证码已发失败");
}
[HttpPost, UserAuth]
public async Task<ApiResult> OrginAccountAuth([FromBody] OriginAccountAuthRequest request)
2023-07-29 10:19:42 +08:00
{
var user = this.Request.GetUserInfo();
List<string> accounts = new List<string>();
if (request.StartNum > 0 && request.Count > 0)
{
var end = request.StartNum + request.Count;
for (var i = request.StartNum; i < end; i++)
{
var account = $"{request.Account}{i}";
// if (!m_ProductAccountService.Exist(m => m.Account == account))//m.ProductId == request.ProductId &&
accounts.Add(account);
2023-07-29 10:19:42 +08:00
}
}
else
{
//if (m_ProductAccountService.Exist(m => m.Account == request.Account))//m.ProductId == request.ProductId &&
// return new ApiResult(ResultCode.C_ALREADY_EXISTS_ERROR, "该账号已经存在了");
accounts.Add(request.Account);
}
List<string> error = new List<string>();
foreach (var accountItem in accounts)
{
if (m_ProductAccountService.Exist(m => m.ProductId == request.ProductId && m.Account == accountItem))
2023-07-29 10:19:42 +08:00
{
error.Add($"[{accountItem}]已存在");
continue;
}
var originModel = await m_AgentService.GetOriginAccountInfo(request.ProductId, accountItem, request.Pwd);
2023-07-29 10:19:42 +08:00
if (originModel.Code != ResultCode.C_SUCCESS)
{
error.Add($"[{accountItem}]{originModel.Message}");
continue;
}
var package = await m_PackageService.Query(m => m.ProductId == request.ProductId && m.OriginName == originModel.Data.Package).FirstOrDefaultAsync();
var product = await m_ProductService.GetById(request.ProductId);
await m_ProductAccountService.Add(new ProductAccountEntity()
{
Account = accountItem,
AccountType = (int)Hncore.Pass.Vpn.Domain.AccountType.Origin,
PackageId = package == null ? 0 : package.Id,
ChargeStatus = AccountChargeStatus.Normal,
ConnectCount = Convert.ToInt32(originModel.Data.ConnectCount),
EndTime = originModel.Data.RealEndTime,
PackageName = package == null ? originModel.Data.Package : package.Name,
ProductId = product.Id,
ProductName = product.Name,
Pwd = originModel.Data.Pwd,
StartTime = DateTime.Parse(originModel.Data.RegistTime),
Remark = "原系统认证",
UserId = user.UserId,
UserCode = user.LoginName,
});
}
if (error.Count > 0)
{
return new ApiResult(ResultCode.C_IGNORE_ERROR, string.Join("\n", error));
}
return new ApiResult(1);
}
[HttpGet]
[UserAuth]
public async Task<IActionResult> MyOrders([FromQuery] OrderSearchModel request)
2023-07-29 10:19:42 +08:00
{
var userId = this.Request.GetUserInfo().UserId;
2023-07-29 10:19:42 +08:00
var orderQuery = m_OrderService.Query(m => m.UserId == userId && m.DeleteTag == 0);
orderQuery = orderQuery.Where(m => m.OrderState == OrderStatus.PayOk || m.OrderState == OrderStatus.Complete);
if (request.OrderType > 0)
{
orderQuery = orderQuery.Where(m => (int)m.OrderType == request.OrderType);
}
if (request.ProductId > 0)
{
orderQuery = orderQuery.Where(m => m.ProductId == request.ProductId);
}
if (request.PackageId != "0")
2023-07-29 10:19:42 +08:00
{
orderQuery = orderQuery.Where(m => m.PackageName == request.PackageId);
}
if (request.ETime.HasValue && request.BTime.HasValue)
{
orderQuery = orderQuery.Where(m => m.CreateTime >= request.BTime && m.CreateTime <= request.ETime);
}
if (request.KeyWord.Has())
{
orderQuery = orderQuery.Where(m => m.OrderNo.Contains(request.KeyWord) || m.Accounts.Contains(request.KeyWord));
2023-07-29 10:19:42 +08:00
}
var data = await orderQuery.OrderByDescending(m => m.Id).ListPagerAsync(request.PageSize, request.PageIndex, true);
2023-07-29 10:19:42 +08:00
return View(data);
}
[HttpGet]
[UserAuth]
public async Task<IActionResult> MyRefundOrders([FromQuery] OrderSearchModel request)
2023-07-29 10:19:42 +08:00
{
var userId = this.Request.GetUserInfo().UserId;
var orderQuery = m_OrderService.Query(m => m.UserId == userId);
orderQuery = orderQuery.Where(m => m.OrderState == OrderStatus.AutoRefundOver || m.OrderState == OrderStatus.UserRefundOver || m.OrderState == OrderStatus.RequestRefund);
2023-07-29 10:19:42 +08:00
if (request.OrderType > 0)
{
orderQuery = orderQuery.Where(m => (int)m.OrderType == request.OrderType);
}
if (request.ProductId > 0)
{
orderQuery = orderQuery.Where(m => m.ProductId == request.ProductId);
}
if (request.PackageId != "0")
{
orderQuery = orderQuery.Where(m => m.PackageName == request.PackageId);
}
if (request.ETime.HasValue && request.BTime.HasValue)
{
orderQuery = orderQuery.Where(m => m.CreateTime >= request.BTime && m.CreateTime <= request.ETime);
}
if (request.KeyWord.Has())
{
orderQuery = orderQuery.Where(m => m.OrderNo.Contains(request.KeyWord) || m.Accounts.Contains(request.KeyWord));
}
var data = await orderQuery.OrderByDescending(m => m.Id).ListPagerAsync(request.PageSize, request.PageIndex, true);
return View(data);
}
[HttpGet]
[UserAuth]
public async Task<IActionResult> MyAccounts([FromQuery] AccountSearchModel request = null)
2023-07-29 10:19:42 +08:00
{
request = request ?? new AccountSearchModel();
var userId = this.Request.GetUserInfo().UserId;
Expression<Func<ProductAccountEntity, bool>> exp = m => m.UserId == userId;
exp = exp.And(m => m.DeleteTag == 0);
if (request.ProductId > 0)
{
exp = exp.And(m => m.ProductId == request.ProductId);
}
if (request.PackageId != "0")
{
exp = exp.And(m => m.PackageName == request.PackageId);
}
if (request.ExpiredDay > -100)
{
if (request.ExpiredDay > 0)
{
2023-07-29 10:19:42 +08:00
exp = exp.And(m => Math.Ceiling((m.EndTime - DateTime.Now).Value.TotalDays) <= request.ExpiredDay && m.EndTime > DateTime.Now);
}
else if (request.ExpiredDay < 0 && request.ExpiredDay > -4)
{
2023-07-29 10:19:42 +08:00
exp = exp.And(m => Math.Ceiling((DateTime.Now - m.EndTime).Value.TotalDays) <= Math.Abs(request.ExpiredDay) && m.EndTime < DateTime.Now);
}
else if (request.ExpiredDay == -4)
{
2023-07-29 10:19:42 +08:00
exp = exp.And(m => Math.Ceiling((m.EndTime - DateTime.Now).Value.TotalDays) <= -4);
}
else if (request.ExpiredDay == -5)
{
2023-07-29 10:19:42 +08:00
exp = exp.And(m => m.EndTime > DateTime.Now);
}
else if (request.ExpiredDay == -6)
{
2023-07-29 10:19:42 +08:00
exp = exp.And(m => m.EndTime < DateTime.Now);
}
exp = exp.And(m => m.PackageName != "测试卡");
}
if (request.ETime.HasValue && request.BTime.HasValue)
{
exp = exp.And(m => m.EndTime >= request.BTime && m.EndTime <= request.ETime);
}
if (request.KeyWord.Has())
{
exp = exp.And(m => m.Account.Contains(request.KeyWord));
}
//var ret = await m_ProductAccountService.PageDesc(request.PageIndex,request.PageSize, exp,true,m=>m.Id);
var ret = await m_ProductAccountService.Query(exp, true).OrderByDescending(m => m.Id).QueryPager(1000, 1).ToListAsync();
2023-07-29 10:19:42 +08:00
return View(ret);
}
[HttpGet]
[UserAuth]
public async Task<IActionResult> AssignAddress([FromQuery] AccountSearchModel request = null)
2023-07-29 10:19:42 +08:00
{
2023-07-29 10:19:42 +08:00
return View();
}
[HttpGet]
[UserAuth]
public async Task<IActionResult> MyCoupons()
{
var userId = this.Request.GetUserInfo().UserId;
var model = await m_CouponService.GetUserCoupon(userId);
2023-07-29 10:19:42 +08:00
return View(model);
}
[HttpGet]
[UserAuth]
public IActionResult CashOut()
{
var userId = this.Request.GetUserInfo().UserId;
2023-07-29 10:19:42 +08:00
return View();
}
2023-07-29 10:19:42 +08:00
[HttpGet]
[UserAuth]
public IActionResult RosOrder()
{
var userId = this.Request.GetUserInfo().UserId;
2023-07-29 10:19:42 +08:00
return View();
}
2024-02-22 17:26:33 +08:00
[HttpGet]
[UserAuth]
public IActionResult jinqiao()
{
var userId = this.Request.GetUserInfo().UserId;
2024-02-22 17:26:33 +08:00
return View();
}
2024-04-24 18:31:02 +08:00
[HttpGet]
[UserAuth]
public IActionResult api()
{
var userId = this.Request.GetUserInfo().UserId;
2024-04-24 18:31:02 +08:00
return View();
}
2024-02-24 13:58:39 +08:00
[HttpGet]
[UserAuth]
public IActionResult upload()
{
2024-02-24 13:58:39 +08:00
return View();
}
2024-02-22 17:26:33 +08:00
2023-07-29 10:19:42 +08:00
[HttpGet]
[UserAuth]
public IActionResult MyMoney()
{
var userId = this.Request.GetUserInfo().UserId;
2023-07-29 10:19:42 +08:00
return View();
}
2023-12-27 17:28:05 +08:00
[HttpGet]
[UserAuth]
public IActionResult HttpRecharge()
{
var userId = this.Request.GetUserInfo().UserId;
2023-12-27 17:28:05 +08:00
return View();
}
[HttpGet]
[UserAuth]
public IActionResult HttpPackageList()
{
var userId = this.Request.GetUserInfo().UserId;
2025-10-21 09:38:32 +08:00
ViewData["BaseUrl"] = m_Configuration["BackendUrl"];
2023-12-27 17:28:05 +08:00
return View();
}
[HttpGet]
[UserAuth]
public IActionResult HttpLongterm()
{
var userId = this.Request.GetUserInfo().UserId;
2023-12-27 17:28:05 +08:00
return View();
}
[HttpGet]
[UserAuth]
public IActionResult HttpUseHistory()
{
var userId = this.Request.GetUserInfo().UserId;
2023-12-27 17:28:05 +08:00
return View();
}
[HttpGet]
[UserAuth]
public IActionResult HttpWhiteIp()
{
var userId = this.Request.GetUserInfo().UserId;
2023-12-27 17:28:05 +08:00
return View();
}
2025-10-18 20:15:43 +08:00
[HttpGet]
[UserAuth]
public IActionResult HttpWhiteIpSU()
{
2025-10-21 09:38:32 +08:00
ViewData["BaseUrl"] = m_Configuration["BackendUrl"];
2025-10-18 20:15:43 +08:00
return View();
}
2023-07-29 10:19:42 +08:00
/// <summary>
/// 发送手机验证码
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet, AllowAnonymous]
public IActionResult WebLogin(string redirect = "")
2023-07-29 10:19:42 +08:00
{
ViewBag.redirect = redirect;
return View("Login");
}
/// <summary>
/// 淘宝订单
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<IActionResult> TaoBao()
{
Func<string, Task<string>> process = async (data) =>
{
var notifyOrder = data.FromJsonTo<TaoBaoNotifyModel>();
2024-05-24 17:14:53 +08:00
var taobaoEntity = notifyOrder.MapTo<TaoBaoOrderEntity>();
if ((notifyOrder.SellerNick == "聚ip商城动态ip代理" || notifyOrder.SellerNick == "老鹰动态pptp") || notifyOrder.SellerNick == "强子pptp动态" || notifyOrder.SellerNick == "可乐开发商")
{
2024-05-24 17:14:53 +08:00
taobaoEntity.Phone = "none";
taobaoEntity.SkuPropertiesName = notifyOrder.Orders.FirstOrDefault()?.SkuPropertiesName;
await m_TaoBaoService.Add(taobaoEntity);
return "亲您这边是需要我们代开还是您自己开默认是自己到官网开哈官网juip.com。";
}
2023-07-29 10:19:42 +08:00
if (notifyOrder == null || notifyOrder.Tid.NotHas())
return "";
if (m_ScoreService.ExistTaoBaoScore(notifyOrder.Tid))
return "";
2024-02-01 17:43:16 +08:00
var phone = notifyOrder.ReceiverMobile.NotHas() ? notifyOrder.Tid : notifyOrder.ReceiverMobile;
2023-07-29 10:19:42 +08:00
// if (phone.NotHas()) return false;
var userEntity = await m_UserService.Query(m => m.TaoBao == notifyOrder.BuyerNick).FirstOrDefaultAsync();
2024-02-01 17:43:16 +08:00
// var phone = notifyOrder.BuyerNick;
2023-07-29 10:19:42 +08:00
string pas_result = "";
Random rd = new Random(Guid.NewGuid().GetHashCode());
for (int i = 0; i < 6; i++)
{
int rnd = rd.Next(0, 9);
pas_result += rnd.ToString();
}
// Console.WriteLine("==================================================================");
2023-07-29 10:19:42 +08:00
string msg = "";
if (userEntity == null)
{
userEntity = new User()
{
CreateType = UserCreateType.TaoBaoRegist,
LoginCode = phone,
Password = pas_result,
Phone = phone,
TaoBao = notifyOrder.BuyerNick,
id_code = ""
2023-07-29 10:19:42 +08:00
};
var ret = await m_UserService.Regist(userEntity);
msg = "您好打开网址juip.com登录会员名" + phone + "" + notifyOrder.Payment + "元已充值到此账户),密码:" + pas_result + "。这个会员名和密码不能直接使用,是用来登录官网的。登录后点击网站上方的-产品购买即可完成开通或续费。在官网购买的账号密码可以直接使用。恭喜您本次获得优惠券满4元减1元满20元减3元满54元减5元满130元减15元满490元减30元各一张。欢迎您多来淘宝下单(人工客服在线时间:上午八点到晚上十一点半)";
2023-07-29 10:19:42 +08:00
if (ret.Code != ResultCode.C_SUCCESS) return msg;
}
else
{
2023-07-29 10:19:42 +08:00
phone = userEntity.Phone;
if (userEntity.TaoBao == null)
{
userEntity.TaoBao = notifyOrder.BuyerNick;
2023-07-29 10:19:42 +08:00
await m_UserService.Update(userEntity);
}
msg = "您好," + notifyOrder.Payment + "元已充值到充值到您的会员中,会员号为:" + userEntity.LoginCode + "打开网址www.juip.com登录后点击网站上方的-产品购买即可完成开通或续费。恭喜您本次获得优惠券满4元减1元满20元减3元满54元减5元满130元减15元满490元减30元各一张。欢迎您多来淘宝下单(人工客服在线时间:上午八点到晚上十一点半)";
2023-07-29 10:19:42 +08:00
}
var amountInfo = new UpdateAmountRequest()
{
OperateUserName = phone,
2023-07-29 10:19:42 +08:00
Amount = decimal.Parse(notifyOrder.Payment),
OpAmountType = ScoreType.TaoBaoAdd,
UserId = userEntity.Id,
AttchInfo = notifyOrder.Tid
};
var retAmount = await m_UserService.UpdateAmount(amountInfo);
await m_CouponService.TaoBaoGive(userEntity.Id, 11, notifyOrder.BuyerNick);
await m_CouponService.TaoBaoGive(userEntity.Id, 12, notifyOrder.BuyerNick);
await m_CouponService.TaoBaoGive(userEntity.Id, 13, notifyOrder.BuyerNick);
await m_CouponService.TaoBaoGive(userEntity.Id, 14, notifyOrder.BuyerNick);
await m_CouponService.TaoBaoGive(userEntity.Id, 15, notifyOrder.BuyerNick);
taobaoEntity.Phone = phone;
taobaoEntity.SkuPropertiesName = notifyOrder.Orders.FirstOrDefault()?.SkuPropertiesName;
await m_TaoBaoService.Add(taobaoEntity);
2023-07-29 10:19:42 +08:00
// await Task.Delay(3000);
// Console.WriteLine("===================================================================");
// var send_msg_info = await m_TaoBaoService.SengMsg(notifyOrder.Tid,msg);
// Console.WriteLine("===================================================================");
// Console.WriteLine(send_msg_info);
// Console.WriteLine("===================================================================");
return msg;
};
Func<string, Task<bool>> refunds = async (data) =>
{
var refundInfo = data.FromJsonTo<TaoBaoRefundModel>();
LogHelper.Info("TaoBao process");
if (refundInfo == null || refundInfo.RefundId.NotHas())
return false;
var his_order = m_TaoBaoService.Query(m => m.Tid == refundInfo.Tid).FirstOrDefault();
2023-07-29 10:19:42 +08:00
refundInfo.Phone = his_order.Phone;
var taobaoEntity = refundInfo.MapTo<TaoBaoRefundEntity>();
2023-07-29 10:19:42 +08:00
await m_TaoBaoRefundService.Add(taobaoEntity);
return true;
};
2023-07-29 10:19:42 +08:00
long aopic = long.Parse(this.Request.Query["aopic"]);
string datainfo = this.Request.Form["json"];
var refundInfos = datainfo.FromJsonTo<TaoBaoRefundModel>();
2024-02-01 17:43:16 +08:00
LogHelper.Info("淘宝参数回调", $"json={datainfo.ToJson()}");
2023-07-29 10:19:42 +08:00
var info = "";
if (aopic == 2)
{
2023-07-29 10:19:42 +08:00
info = await m_TaoBaoService.ReceivedMsg(this.Request, process);
}
else if (aopic == 256)
{//退款
var his_order = m_TaoBaoRefundService.Query(m => m.Tid == refundInfos.Tid).FirstOrDefault();
if (his_order == null)
{
2023-07-29 10:19:42 +08:00
info = await m_TaoBaoRefundService.ReceivedRefundMsg(this.Request, refunds);
}
else
{
2023-07-29 10:19:42 +08:00
his_order.status = 0;
his_order.RefundFee = refundInfos.RefundFee;
his_order.Modified = refundInfos.Modified;
await m_TaoBaoRefundService.Update(his_order);
}
}
else if (aopic == 65536)
{//卖家同意退款
var his_order = m_TaoBaoRefundService.Query(m => m.Tid == refundInfos.Tid).FirstOrDefault();
2023-07-29 10:19:42 +08:00
his_order.status = 1;
2023-07-29 10:19:42 +08:00
await m_TaoBaoRefundService.Update(his_order);
}
else if (aopic == 262144)
{//拒绝退款
var his_order = m_TaoBaoRefundService.Query(m => m.Tid == refundInfos.Tid).FirstOrDefault();
2023-07-29 10:19:42 +08:00
his_order.status = 2;
2023-07-29 10:19:42 +08:00
await m_TaoBaoRefundService.Update(his_order);
}
else if (aopic == 32768)
{//关闭
var his_order = m_TaoBaoRefundService.Query(m => m.Tid == refundInfos.Tid).FirstOrDefault();
2023-07-29 10:19:42 +08:00
his_order.status = 3;
2023-07-29 10:19:42 +08:00
await m_TaoBaoRefundService.Update(his_order);
2023-07-29 10:19:42 +08:00
}
return Content(info);
}
[HttpPost, UserAuth]
public async Task<IActionResult> UpdateInfo(User request)
{
var userEntity = await this.m_UserService.GetById(this.Request.GetUserInfo().UserId);
userEntity.Wx = request.Wx;
userEntity.QQ = request.QQ;
userEntity.TaoBao = request.TaoBao;
userEntity.Email = request.Email;
userEntity.WangWang = request.WangWang;
var ret = await m_UserService.Update(userEntity);
var flag = m_CouponUserOrginService.Exist(m => m.ToUser == userEntity.Id && m.OriginType == Enums.CouponOriginType.UserInfo);
if (!flag)
await m_CouponService.Give(6, "", userEntity.Id, 1, Hncore.Pass.Sells.Domain.Enums.CouponOriginType.UserInfo, "完善信息");
return RedirectToAction("Index");
}
[HttpPost, UserAuth]
public async Task<ApiResult> UpdatePwd([FromBody] UpdatePwdModel request)
2023-07-29 10:19:42 +08:00
{
if (request.NewPwd != request.ConfirmPwd)
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "密码不一致");
2023-07-29 10:19:42 +08:00
}
var ret = await this.m_UserService.UpdatePwd(this.Request.GetUserInfo().UserId, request.OldPwd, request.NewPwd);
return ret;
}
[HttpPost, UserAuth]
public async Task<ApiResult> UpdateAccountPwd([FromBody] UpdateAccountPwdRequest request)
2023-07-29 10:19:42 +08:00
{
return await m_ProductAccountService.UpdateAccountPwd(request);
2023-07-29 10:19:42 +08:00
}
[HttpPost, AllowAnonymous]
public async Task<ApiResult> ApiUpdateAccountPwd([FromBody] UpdateAccountPwdRequest request)
2023-07-29 10:19:42 +08:00
{
//通过apikey获取用户信息
var userEntity = m_UserService.Query(m => m.apikey == request.apikey).FirstOrDefault();
if (userEntity == null)
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "apikey不正确");
}
return await m_ProductAccountService.ApiUpdateAccountPwd(request, userEntity.Id);
2023-07-29 10:19:42 +08:00
}
[HttpGet, AllowAnonymous]
public IActionResult MP_GetUserInfo(string appid, string callbakUrl, string state = "")
{
callbakUrl = callbakUrl.UrlEncode();
var baseUrl = m_Configuration["BaseInfoUrl"];
var getUserInfo_Callback = $"{baseUrl}User/MP_GetUserInfo_Callback?returnUrl={callbakUrl}&appid={appid}";
getUserInfo_Callback = getUserInfo_Callback.UrlEncode();
var wxUrl = $"https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={getUserInfo_Callback}&response_type=code&scope=snsapi_userinfo&state={state}#wechat_redirect";
LogHelper.Debug("WxAuth_GetUserInfo", $"wxUrl={wxUrl}");
return Redirect(wxUrl);
}
/// <summary>
/// 公众平台 网页授权 回调
/// </summary>
/// <param name="appid"></param>
/// <param name="code"></param>
/// <param name="state"></param>
/// <param name="returnUrl"></param>
/// <returns></returns>
[HttpGet, AllowAnonymous]
public async Task MP_GetUserInfo_Callback(string appid, string code, string state, string returnUrl)
{
LogHelper.Debug("GetUserInfo_Callback", $"appid={appid},code={code}, state={state}, returnUrl={returnUrl}");
if (string.IsNullOrWhiteSpace(returnUrl))
{
return;
}
var access_token = "";
var openid = "";
var weToken = await WxOpenApi.GetWebAccessToken(appid, code);
if (weToken != null && weToken.errcode == 0)
{
access_token = weToken.access_token;
openid = weToken.openid;
}
else
{
LogHelper.Error("GetWebAccessToken", weToken?.errmsg);
return;
}
var userInfo = await WxOpenApi.GetUserinfoByWebAccessToken(access_token, openid);
if (userInfo == null)
2023-07-29 10:19:42 +08:00
{
LogHelper.Error("GetUserinfoByWebAccessToken", $"access_token={access_token},openid={openid}");
2023-07-29 10:19:42 +08:00
return;
}
if (userInfo.errcode > 0)
{
LogHelper.Error("GetUserinfoByWebAccessToken", userInfo.errmsg);
return;
}
if (state.Has())
{
var userId = Convert.ToInt32(state);
var wx = new Hncore.Pass.BaseInfo.Models.WxAppUserEntity()
{
Appid = appid,
UserId = userId,
HeadImgUrl = userInfo.headimgurl,
NickName = userInfo.nickname,
City = userInfo.city,
Country = userInfo.country,
Openid = userInfo.openid,
UserName = userInfo.nickname
};
await m_WxAppUserService.Bind(wx);
}
var wxUserInfo = await m_WxAppUserService.GetWxUser(appid, userInfo.openid);
if (wxUserInfo != null)
{
2023-07-29 10:19:42 +08:00
var userEntity = await m_UserService.GetById(wxUserInfo.UserId);
var loginRet = m_UserService.LoginInternal(userEntity, wxUserInfo);
this.HttpContext.Response.Cookies.Append("token", loginRet.Token);
this.HttpContext.Response.Cookies.Append("userInfo", loginRet.User.ToJson());
this.Response.Redirect(returnUrl);
}
else
{
var baseUrl = m_Configuration["BaseInfoUrl"];
var loginUrl = $"{baseUrl}User/WebLogin?redirect={returnUrl}";
// returnUrl = UrlHelper.SetUrlParam(returnUrl, "act", "login");
this.Response.Redirect(loginUrl);
}
2023-07-29 10:19:42 +08:00
}
/// <summary>
/// 充值
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, UserAuth]
public async Task<ApiResult> CreateOrder([FromBody] CreateOrderRequest request)
2023-07-29 10:19:42 +08:00
{
var userId = this.Request.GetUserInfo().UserId;
var ret = await m_ChargeService.CreateOrder(request, userId);
if (ret.Code != ResultCode.C_SUCCESS)
{
return ret;
}
var data = new ChargeOrderPayModel()
{
OrderInfo = ret.Data,
};
if (ret.Data.PayChannel == UPayChannel.WxH5 || ret.Data.PayChannel == UPayChannel.WxPc || ret.Data.PayChannel == UPayChannel.WxMp)
2023-07-29 10:19:42 +08:00
{
var url = await CreateWxPayOrder(ret.Data);
data.PayData = url;
return new ApiResult(data);
}
else
{
var body = await CreateAliPayOrder(ret.Data);
data.PayData = body;
}
return new ApiResult(data);
}
[HttpGet, AllowAnonymous]
2023-07-29 10:19:42 +08:00
public async Task<ApiResult> IsPay(string orderNo)
{
var orderInfo = await m_ChargeService.GetOrderByNo(orderNo);
if (orderInfo.OrderState == UOrderStatus.PayOk || orderInfo.OrderState == UOrderStatus.Complete)
return new ApiResult(1);
else
return new ApiResult(0);
}
#region
private async Task<string> CreateWxPayOrder(UserChargeOrderEntity request)
{
string callBackUrl = m_Configuration["UNotifyUrl"];
var wxAppId = m_Configuration["WxApps:AppID"];
var wxMchId = m_Configuration["WxApps:MchId"];
var wxMchKey = m_Configuration["WxApps:MchKey"];
var mchInfo = new MchInfo()
{
MchId = wxMchId,
Key = wxMchKey
};
string createOrderRes = "";
if (request.PayChannel == UPayChannel.WxPc)
{
var payRequest = new WxScanPayCreateOrderRequest()
{
AppId = wxAppId,
Body = request.OrderName,
MchId = wxMchId,
NotifyUrl = callBackUrl,
OutTradeNo = request.OrderNo,
StoreId = 2,
TenantId = 1157,
TotalFee = (int)(request.PaymentAmount * 100),
ProductId = request.OrderAmount.ToString(),
TimeExpire = DateTime.Now.AddMinutes(15).ToString("yyyyMMddHHmmss")
};
createOrderRes = await m_WxPayClient.ScanPayCreateOrderAsync(payRequest, mchInfo);
}
else if (request.PayChannel == UPayChannel.WxH5)
{
var payRequest = new WxH5PayCreateOrderRequest()
{
AppId = wxAppId,
Body = request.OrderName,
MchId = wxMchId,
NotifyUrl = callBackUrl,
OutTradeNo = request.OrderNo,
StoreId = 2,
TenantId = 1157,
TotalFee = (int)(request.PaymentAmount * 100),
ProductId = request.OrderAmount.ToString(),
TimeExpire = DateTime.Now.AddMinutes(15).ToString("yyyyMMddHHmmss")
};
createOrderRes = await m_WxPayClient.H5PayCreateOrderAsync(payRequest, mchInfo);
}
else
{
var wxUserInfo = await m_WxAppUserService.GetWxUser(wxMchId, request.UserId);
var payRequest = new WxJsPayCreateOrderRequest()
{
AppId = wxAppId,
Body = request.OrderName,
MchId = wxMchId,
NotifyUrl = callBackUrl,
OutTradeNo = request.OrderNo,
StoreId = 2,
TenantId = 1157,
TotalFee = (int)(request.PaymentAmount * 100),
UserOpenId = wxUserInfo.Openid,
TimeExpire = DateTime.Now.AddMinutes(15).ToString("yyyyMMddHHmmss")
};
createOrderRes = await m_WxPayClient.JsPayCreateOrderAsync(payRequest, mchInfo);
}
return createOrderRes;
}
[HttpPost, AllowAnonymous]
public async Task<string> WxOrderCallBack()
{
var wxAppId = m_Configuration["WxApps:AppID"];
var wxMchId = m_Configuration["WxApps:MchId"];
var wxMchKey = m_Configuration["WxApps:MchKey"];
try
{
string xml = "";
LogHelper.Trace("微信支付回调开始", "Notify");
if (Request.Body.CanSeek)
{
Request.Body.Position = 0;
}
using (System.IO.StreamReader reader = new System.IO.StreamReader(Request.Body))
{
xml = reader.ReadToEnd();
}
LogHelper.Trace("微信支付回调,原始数据:", $"{xml}");
WxPayChecker payData = new WxPayChecker();
payData.FromXmlNoCheckSign(xml);
if (!payData.IsSet("out_trade_no"))
{
return FailXml();
}
// 给支付平台的订单号为支付记录id
string orderId = payData["out_trade_no"];
string TransactionId = payData["transaction_id"];
var order = await m_ChargeService.GetOrderByNo(orderId);
if (order.OrderState == UOrderStatus.Complete || order.OrderState == UOrderStatus.PayOk)
return SuccessXml();
var queryRet = await m_WxPayClient.OrderQuery(new WxJsPayOrderQueryRequest()
{
AppId = wxAppId,
NonceStr = payData.GenerateNonceStr(),
TransactionId = TransactionId
}, new MchInfo() { MchId = wxMchId, Key = wxMchKey });
if (!queryRet) return FailXml();
payData.MchKey = wxMchKey;
if (!payData.CheckSign()) return FailXml();
order.OrderState = UOrderStatus.PayOk;
order.TradeNo = TransactionId;
order.UpdateTime = DateTime.Now;
await m_ChargeService.Update(order);
await m_ChargeService.ProcessOrderAccount(order);
}
catch (Exception e)
{
LogHelper.Error("微信支付通知处理失败", e);
return FailXml();
}
return SuccessXml();
}
public string FailXml()
{
return "<xml><return_code>FAIL</return_code> </xml>";
}
private string SuccessXml()
{
return "<xml><return_code>SUCCESS</return_code> </xml>";
}
#endregion
#region
private async Task<string> CreateAliPayOrder(UserChargeOrderEntity request)
{
2023-07-29 10:19:42 +08:00
if (request.PayChannel == UPayChannel.AliPc)
{
var Ali_APP_ID = m_Configuration["Aliyun:Pay:AppId"];
var Ali_APP_PRIVATE_KEY = m_Configuration["Aliyun:Pay:PrivateKey"];
var ALIPAY_PUBLIC_KEY = m_Configuration["Aliyun:Pay:PublicKey"];//支付宝的公钥,而不是应用的公钥
2023-07-29 10:19:42 +08:00
string callBackUrl = m_Configuration["Aliyun:Pay:UNotifyUrl"];
string ReturnUrl = m_Configuration["Aliyun:Pay:UReturnUrl"];
// 组装业务参数model
AlipayTradePagePayModel model = new AlipayTradePagePayModel
{
Body = request.OrderName,
Subject = request.OrderName,
TotalAmount = request.PaymentAmount.ToString(),
OutTradeNo = request.OrderNo,
ProductCode = "FAST_INSTANT_TRADE_PAY",//QUICK_WAP_PAY
TimeoutExpress = "15m"
};
AlipayTradePagePayRequest aliRequest = new AlipayTradePagePayRequest();
// 设置同步回调地址
aliRequest.SetReturnUrl(ReturnUrl);
// 设置异步通知接收地址
aliRequest.SetNotifyUrl(callBackUrl);
// 将业务model载入到request
aliRequest.SetBizModel(model);
var _aopClient = new DefaultAopClient("https://openapi.alipay.com/gateway.do", Ali_APP_ID, Ali_APP_PRIVATE_KEY);
var response = await _aopClient.PageExecuteAsync(aliRequest);
return response.Body;
}
else if (request.PayChannel == UPayChannel.AliH5)
{
var Ali_APP_ID = m_Configuration["Aliyun:PayH5:AppId"];
var Ali_APP_PRIVATE_KEY = m_Configuration["Aliyun:PayH5:PrivateKey"];
var ALIPAY_PUBLIC_KEY = m_Configuration["Aliyun:PayH5:PublicKey"];
var callBackUrl = m_Configuration["Aliyun:PayH5:UNotifyUrl"];
var ReturnUrl = m_Configuration["Aliyun:PayH5:UReturnUrl"];
2023-07-29 10:19:42 +08:00
// 组装业务参数model
AlipayTradeWapPayModel model = new AlipayTradeWapPayModel
{
Body = request.OrderName,
Subject = request.OrderName,
TotalAmount = request.PaymentAmount.ToString(),
OutTradeNo = request.OrderNo,
ProductCode = "QUICK_WAP_PAY",
QuitUrl = this.Request.GetUrl(),
TimeoutExpress = "15m"
};
AlipayTradeWapPayRequest aliRequest = new AlipayTradeWapPayRequest();
// 设置同步回调地址
aliRequest.SetReturnUrl(ReturnUrl);
// 设置异步通知接收地址
aliRequest.SetNotifyUrl(callBackUrl);
// 将业务model载入到request
aliRequest.SetBizModel(model);
var _aopClient = new DefaultAopClient("https://openapi.alipay.com/gateway.do", Ali_APP_ID, Ali_APP_PRIVATE_KEY);
var response = await _aopClient.PageExecuteAsync(aliRequest);
return response.Body;
}
return "";
}
/// <summary>
/// 支付同步回调
/// </summary>
[HttpGet, AllowAnonymous]
public IActionResult AliReturn()
{
/*
1out_trade_no是否为商户系统中创建的订单号
2total_amount是否确实为该订单的实际金额
3seller_idseller_email) out_trade_no这笔单据的对应的操作方seller_id/seller_email
4app_id是否为该商户本身
*/
var ALIPAY_PUBLIC_KEY = m_Configuration["Aliyun:Pay:PublicKey"];
Dictionary<string, string> sArray = GetRequestGet();
if (sArray.Count != 0)
{
bool flag = AlipaySignature.RSACheckV2(sArray, ALIPAY_PUBLIC_KEY, "utf-8", "RSA2", false);
if (flag)
{
var ordereNo = sArray["out_trade_no"];
// var order = await m_ProductOrderService.GetOrderByNo(ordereNo);
Console.WriteLine($"同步验证通过,订单号:{sArray["out_trade_no"]}");
ViewData["PayResult"] = "同步验证通过";
}
else
{
Console.WriteLine($"同步验证失败,订单号:{sArray["out_trade_no"]}");
ViewData["PayResult"] = "同步验证失败";
}
}
return Redirect("~/User/Index");
}
[HttpPost, AllowAnonymous]
public async Task AliNotify()
{
/*
1out_trade_no是否为商户系统中创建的订单号
2total_amount是否确实为该订单的实际金额
3seller_idseller_email) out_trade_no这笔单据的对应的操作方seller_id/seller_email
4app_id是否为该商户本身
*/
var ALIPAY_PUBLIC_KEY = m_Configuration["Aliyun:Pay:PublicKey"];
Dictionary<string, string> sArray = GetRequestPost();
LogHelper.Info("AliNotify", AlipaySignature.GetSignContent(sArray));
if (sArray.Count != 0)
{
// bool flag = AlipaySignature.RSA2Check(sArray, ALIPAY_PUBLIC_KEY);
bool flag = AlipaySignature.RSACheckV2(sArray, ALIPAY_PUBLIC_KEY, "utf-8", "RSA2", false);
if (flag)
{
//交易状态
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理根据订单号out_trade_no在商户网站的订单系统中查到该笔订单的详细并执行商户的业务程序
//请务必判断请求时的total_amount与通知时获取的total_fee为一致的
//如果有做过处理,不执行商户的业务程序
//注意:
//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
try
{
var ordereNo = sArray["out_trade_no"];
2023-08-26 17:31:44 +08:00
var trade_status = sArray["trade_status"];
if (trade_status == "TRADE_SUCCESS")
{
2023-08-26 17:31:44 +08:00
var order = await m_ChargeService.GetOrderByNo(ordereNo);
if (order.OrderState == UOrderStatus.Complete || order.OrderState == UOrderStatus.PayOk)
{
await Response.WriteAsync("success");
return;
}
order.OrderState = UOrderStatus.PayOk;
order.TradeNo = sArray["trade_no"];
order.UpdateTime = DateTime.Now;
await m_ChargeService.Update(order);
await m_ChargeService.ProcessOrderAccount(order);
Console.WriteLine(Request.Form["trade_status"]);
2023-07-29 10:19:42 +08:00
}
await Response.WriteAsync("success");
}
catch (Exception ex)
{
LogHelper.Error("AliNotify.Exception", ex.Message);
await Response.WriteAsync("fail");
}
}
else
{
LogHelper.Error("AliNotify.Error", "签名校验失败");
await Response.WriteAsync("fail");
}
}
}
/// <summary>
/// 支付同步回调
/// </summary>
[HttpGet, AllowAnonymous]
public IActionResult AliReturnH5()
{
/*
1out_trade_no是否为商户系统中创建的订单号
2total_amount是否确实为该订单的实际金额
3seller_idseller_email) out_trade_no这笔单据的对应的操作方seller_id/seller_email
4app_id是否为该商户本身
*/
var ALIPAY_PUBLIC_KEY = m_Configuration["Aliyun:PayH5:PublicKey"];
2023-07-29 10:19:42 +08:00
Dictionary<string, string> sArray = GetRequestGet();
if (sArray.Count != 0)
{
bool flag = AlipaySignature.RSACheckV2(sArray, ALIPAY_PUBLIC_KEY, "utf-8", "RSA2", false);
if (flag)
{
var ordereNo = sArray["out_trade_no"];
// var order = await m_ProductOrderService.GetOrderByNo(ordereNo);
Console.WriteLine($"同步验证通过,订单号:{sArray["out_trade_no"]}");
ViewData["PayResult"] = "同步验证通过";
}
else
{
Console.WriteLine($"同步验证失败,订单号:{sArray["out_trade_no"]}");
ViewData["PayResult"] = "同步验证失败";
}
}
return Redirect("~/User/Index");
}
[HttpPost, AllowAnonymous]
public async Task AliNotifyH5()
{
/*
1out_trade_no是否为商户系统中创建的订单号
2total_amount是否确实为该订单的实际金额
3seller_idseller_email) out_trade_no这笔单据的对应的操作方seller_id/seller_email
4app_id是否为该商户本身
*/
var ALIPAY_PUBLIC_KEY = m_Configuration["Aliyun:PayH5:PublicKey"];
2023-07-29 10:19:42 +08:00
Dictionary<string, string> sArray = GetRequestPost();
LogHelper.Info("AliNotify", AlipaySignature.GetSignContent(sArray));
if (sArray.Count != 0)
{
// bool flag = AlipaySignature.RSA2Check(sArray, ALIPAY_PUBLIC_KEY);
bool flag = AlipaySignature.RSACheckV2(sArray, ALIPAY_PUBLIC_KEY, "utf-8", "RSA2", false);
if (flag)
{
//交易状态
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理根据订单号out_trade_no在商户网站的订单系统中查到该笔订单的详细并执行商户的业务程序
//请务必判断请求时的total_amount与通知时获取的total_fee为一致的
//如果有做过处理,不执行商户的业务程序
//注意:
//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
try
{
var ordereNo = sArray["out_trade_no"];
2023-09-08 15:03:14 +08:00
var trade_status = sArray["trade_status"];
if (trade_status == "TRADE_SUCCESS")
{
2023-09-08 15:03:14 +08:00
var order = await m_ChargeService.GetOrderByNo(ordereNo);
if (order.OrderState == UOrderStatus.Complete || order.OrderState == UOrderStatus.PayOk)
{
await Response.WriteAsync("success");
return;
}
2023-07-29 10:19:42 +08:00
2023-09-08 15:03:14 +08:00
order.OrderState = UOrderStatus.PayOk;
order.TradeNo = sArray["trade_no"];
order.UpdateTime = DateTime.Now;
await m_ChargeService.Update(order);
await m_ChargeService.ProcessOrderAccount(order);
2023-07-29 10:19:42 +08:00
2023-09-08 15:03:14 +08:00
Console.WriteLine(Request.Form["trade_status"]);
}
2023-07-29 10:19:42 +08:00
await Response.WriteAsync("success");
}
catch (Exception ex)
{
LogHelper.Error("AliNotify.Exception", ex.Message);
await Response.WriteAsync("fail");
}
}
else
{
LogHelper.Error("AliNotify.Error", "签名校验失败");
await Response.WriteAsync("fail");
}
}
}
private Dictionary<string, string> GetRequestGet()
{
Dictionary<string, string> sArray = new Dictionary<string, string>();
ICollection<string> requestItem = Request.Query.Keys;
foreach (var item in requestItem)
{
sArray.Add(item, Request.Query[item]);
}
return sArray;
}
private Dictionary<string, string> GetRequestPost()
{
Dictionary<string, string> sArray = new Dictionary<string, string>();
ICollection<string> requestItem = Request.Form.Keys;
foreach (var item in requestItem)
{
sArray.Add(item, Request.Form[item]);
}
return sArray;
}
#endregion
[HttpGet, UserAuth]
public async Task<IActionResult> OnLine(int productId, string account)
2023-07-29 10:19:42 +08:00
{
var data = await m_agentService.OnLine(productId, account);
2023-07-29 10:19:42 +08:00
return View(data.Data);
}
}
}