From 34ca6e52825b5759ad5360651dc6e521ad8f3bb7 Mon Sep 17 00:00:00 2001 From: wanyongkang <937888580@qq.com> Date: Tue, 13 Oct 2020 19:24:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=98=E5=AE=9D=E9=80=80=E6=AC=BE=E6=8E=A5?= =?UTF-8?q?=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Host/Controllers/UserController.cs | 35 +++- Host/Map/MapConfig.cs | 2 + Host/Models/TaoBaoRefundModel.cs | 24 +++ .../Hncore.Pass.Sells/Domain/CourseContext.cs | 8 + .../Domain/TaoBao/TaoBaoRefundEntity.cs | 22 +++ .../Service/SellerTaoBaoService.cs | 49 +++++ .../Service/TaoBaoRefundService.cs | 185 ++++++++++++++++++ 7 files changed, 322 insertions(+), 3 deletions(-) create mode 100644 Host/Models/TaoBaoRefundModel.cs create mode 100644 Services/Hncore.Pass.Sells/Domain/TaoBao/TaoBaoRefundEntity.cs create mode 100644 Services/Hncore.Pass.Sells/Service/TaoBaoRefundService.cs diff --git a/Host/Controllers/UserController.cs b/Host/Controllers/UserController.cs index 136b4a3..bf03e64 100644 --- a/Host/Controllers/UserController.cs +++ b/Host/Controllers/UserController.cs @@ -53,6 +53,7 @@ namespace Home.Controllers 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; @@ -70,6 +71,7 @@ namespace Home.Controllers ,ProductService _ProductService , CouponService _CouponService , SellerTaoBaoService _TaoBaoService + , TaoBaoRefundService _TaoBaoRefundService , Hncore.Pass.BaseInfo.Service.UserScoreService _ScoreService , WxAppUserService _WxAppUserService , UserChargeOrderService _ChargeService @@ -88,6 +90,7 @@ namespace Home.Controllers m_PackageService = _PackageService; m_CouponService = _CouponService; m_TaoBaoService = _TaoBaoService; + m_TaoBaoRefundService = _TaoBaoRefundService; m_ScoreService = _ScoreService; m_ProductService = _ProductService; m_WxAppUserService = _WxAppUserService; @@ -605,8 +608,10 @@ namespace Home.Controllers AttchInfo = notifyOrder.Tid }; var retAmount = await m_UserService.UpdateAmount(amountInfo); - - await m_CouponService.TaoBaoGive(userEntity.Id, 9, userEntity.TaoBao); + //判断是否是同一个旺旺 + if(userEntity.TaoBao != notifyOrder.BuyerNick ){ + await m_CouponService.TaoBaoGive(userEntity.Id, 9, userEntity.TaoBao); + } var taobaoEntity = notifyOrder.MapTo(); @@ -617,7 +622,31 @@ namespace Home.Controllers return retAmount.Code == ResultCode.C_SUCCESS; }; - var info = await m_TaoBaoService.ReceivedMsg(this.Request, process); + Func> refunds = async (data) => + { + var refundInfo = data.FromJsonTo(); + + LogHelper.Info("TaoBao process"); + if (refundInfo == null || refundInfo.RefundId.NotHas()) + return false; + + var his_order= m_TaoBaoService.Query(m => m.Tid == refundInfo.Tid).FirstOrDefault(); + refundInfo.Phone = his_order.Phone; + + var taobaoEntity = refundInfo.MapTo(); + + await m_TaoBaoRefundService.Add(taobaoEntity); + + return true; + }; + long aopic = long.Parse(this.Request.Query["aopic"]); + var info = ""; + if (aopic == 2){ + info = await m_TaoBaoService.ReceivedMsg(this.Request, process); + } else if(aopic == 256){ + info = await m_TaoBaoRefundService.ReceivedRefundMsg(this.Request, refunds); + + } return Content(info); } diff --git a/Host/Map/MapConfig.cs b/Host/Map/MapConfig.cs index 959746a..e1b8693 100644 --- a/Host/Map/MapConfig.cs +++ b/Host/Map/MapConfig.cs @@ -13,6 +13,8 @@ namespace Home.Map TinyMapperExtension.Binds(); TinyMapperExtension.Binds(); + + TinyMapperExtension.Binds(); } } } diff --git a/Host/Models/TaoBaoRefundModel.cs b/Host/Models/TaoBaoRefundModel.cs new file mode 100644 index 0000000..486f57c --- /dev/null +++ b/Host/Models/TaoBaoRefundModel.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Host.Models +{ + public class TaoBaoRefundModel + { + public string RefundId { get; set; } + public string BuyerNick { get; set; } + public string RefundFee { get; set; } + public string Oid { get; set; } + public string Tid { get; set; } + public string RefundPhase { get; set; } + public string BillType { get; set; } + public string SellerNick { get; set; } + public string Modified { get; set; } + public string Phone { get; set; } + } + + + +} diff --git a/Services/Hncore.Pass.Sells/Domain/CourseContext.cs b/Services/Hncore.Pass.Sells/Domain/CourseContext.cs index 42d63b9..0e6f964 100644 --- a/Services/Hncore.Pass.Sells/Domain/CourseContext.cs +++ b/Services/Hncore.Pass.Sells/Domain/CourseContext.cs @@ -23,6 +23,7 @@ namespace Hncore.Pass.Sells.Domain public virtual DbSet SellCouponUserOrgin { get; set; } public virtual DbSet SellCouponUserUse { get; set; } public virtual DbSet SellerTaoBao { get; set; } + public virtual DbSet SellerTaoBaoRefund { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { @@ -61,6 +62,13 @@ namespace Hncore.Pass.Sells.Domain entity.Property(e => e.Id).ValueGeneratedOnAdd(); }); + modelBuilder.Entity(entity => + { + entity.ToTable("sell_taobao_refund"); + entity.HasKey(p => p.Id); + entity.Property(e => e.Id).ValueGeneratedOnAdd(); + }); + base.OnModelCreating(modelBuilder); } } diff --git a/Services/Hncore.Pass.Sells/Domain/TaoBao/TaoBaoRefundEntity.cs b/Services/Hncore.Pass.Sells/Domain/TaoBao/TaoBaoRefundEntity.cs new file mode 100644 index 0000000..267acdf --- /dev/null +++ b/Services/Hncore.Pass.Sells/Domain/TaoBao/TaoBaoRefundEntity.cs @@ -0,0 +1,22 @@ +using Hncore.Infrastructure.DDD; +using Hncore.Pass.Sells.Model; +using System; +using System.Collections.Generic; + +namespace Hncore.Pass.Sells.Domain +{ + public partial class TaoBaoRefundEntity + { + public int Id { get; set; } + public string RefundId { get; set; } + public string BuyerNick { get; set; } + public string RefundFee { get; set; } + public string Oid { get; set; } + public string Tid { get; set; } + public string RefundPhase { get; set; } + public string BillType { get; set; } + public string SellerNick { get; set; } + public string Modified { get; set; } + public string Phone { get; set; } + } +} diff --git a/Services/Hncore.Pass.Sells/Service/SellerTaoBaoService.cs b/Services/Hncore.Pass.Sells/Service/SellerTaoBaoService.cs index 31a103a..d2b9058 100644 --- a/Services/Hncore.Pass.Sells/Service/SellerTaoBaoService.cs +++ b/Services/Hncore.Pass.Sells/Service/SellerTaoBaoService.cs @@ -79,6 +79,55 @@ namespace Hncore.Pass.Sells.Service return ""; } + public async Task ReceivedRefundMsg(HttpRequest request, Func> process) + { + string appSecret = "xrzmtmfv46mmt9c9rzt2g7c74h9g7u7u"; + long timestamp = long.Parse(request.Query["timestamp"]); + long aopic = long.Parse(request.Query["aopic"]); // 根据aopic判断推送类型 + string sign = request.Query["sign"]; + string json = request.Form["json"]; + + + LogHelper.Info("淘宝回调", $"timestamp={timestamp},aopic={aopic},sign={sign},json={json}"); + + var dictParams = new Dictionary(); + dictParams.Add("timestamp", timestamp.ToString()); + dictParams.Add("json", json); + var checkSign = Sign(dictParams, appSecret); + if (!string.Equals(checkSign, sign)) + { + LogHelper.Error("淘宝回调验签失败", checkSign); + return "验签失败"; + } + // 验签通过进行相关的业务 + + /* + * 返回空字符或者不返回,不进行任何操作 + * 返回规定格式,进行相应操作。允许的操作有更新发货状态、更新备注、生成旺旺消息 + * DoDummySend:更新发货状态(false不更新发货状态) + * DoMemoUpdate:更新备注(null不更新备注)。Flag是旗帜,可以传0-5的数字,如果传-1或者不传此参数,则保留原旗帜;Memo为备注内容 + * AliwwMsg:想要发给买家的旺旺消息(null或空字符串,不发消息) + */ + if (process != null) + { + if (await process(json)) + { + var returnJson = new + { + DoDummySend = true, + DoMemoUpdate = new + { + Flag = 1, + Memo = "退款处理中" + }, + AliwwMsg = "退款处理中" + }; + return returnJson.ToJson(); + } + } + return ""; + } + //参数签名 public string Sign(IDictionary args, string ClientSecret) { diff --git a/Services/Hncore.Pass.Sells/Service/TaoBaoRefundService.cs b/Services/Hncore.Pass.Sells/Service/TaoBaoRefundService.cs new file mode 100644 index 0000000..da7ec22 --- /dev/null +++ b/Services/Hncore.Pass.Sells/Service/TaoBaoRefundService.cs @@ -0,0 +1,185 @@ +using Hncore.Infrastructure.Common; +using Hncore.Infrastructure.Service; +using Hncore.Pass.Sells.Domain; +using Microsoft.AspNetCore.Http; +using System.Collections.Generic; +using System.Threading.Tasks; +using Hncore.Infrastructure.Serializer; +using System; +using System.Security.Cryptography; + +namespace Hncore.Pass.Sells.Service +{ + public class TaoBaoRefundService : ServiceBase, IFindService + { + CourseContext m_DbContext; + + public TaoBaoRefundService( + CourseContext dbContext + ,IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor) + { + m_DbContext = dbContext; + } + + public async override Task Add(TaoBaoRefundEntity entity, bool autoSave = true) + { + if (!this.Exist(m => m.Tid == entity.Tid)) + { + return await base.Add(entity, autoSave); + } + return entity; + } + + public async Task ReceivedMsg(HttpRequest request, Func> process) + { + string appSecret = "xrzmtmfv46mmt9c9rzt2g7c74h9g7u7u"; + long timestamp = long.Parse(request.Query["timestamp"]); + long aopic = long.Parse(request.Query["aopic"]); // 根据aopic判断推送类型 + string sign = request.Query["sign"]; + string json = request.Form["json"]; + + + LogHelper.Info("淘宝回调", $"timestamp={timestamp},aopic={aopic},sign={sign},json={json}"); + + var dictParams = new Dictionary(); + dictParams.Add("timestamp", timestamp.ToString()); + dictParams.Add("json", json); + var checkSign = Sign(dictParams, appSecret); + if (!string.Equals(checkSign, sign)) + { + LogHelper.Error("淘宝回调验签失败", checkSign); + return "验签失败"; + } + // 验签通过进行相关的业务 + + /* + * 返回空字符或者不返回,不进行任何操作 + * 返回规定格式,进行相应操作。允许的操作有更新发货状态、更新备注、生成旺旺消息 + * DoDummySend:更新发货状态(false不更新发货状态) + * DoMemoUpdate:更新备注(null不更新备注)。Flag是旗帜,可以传0-5的数字,如果传-1或者不传此参数,则保留原旗帜;Memo为备注内容 + * AliwwMsg:想要发给买家的旺旺消息(null或空字符串,不发消息) + */ + if (process != null) + { + if (await process(json)) + { + var returnJson = new + { + DoDummySend = true, + DoMemoUpdate = new + { + Flag = 1, + Memo = "购买成功" + }, + AliwwMsg = "购买成功" + }; + return returnJson.ToJson(); + } + } + return ""; + } + + public async Task ReceivedRefundMsg(HttpRequest request, Func> refunds) + { + string appSecret = "xrzmtmfv46mmt9c9rzt2g7c74h9g7u7u"; + long timestamp = long.Parse(request.Query["timestamp"]); + long aopic = long.Parse(request.Query["aopic"]); // 根据aopic判断推送类型 + string sign = request.Query["sign"]; + string json = request.Form["json"]; + + + LogHelper.Info("淘宝回调", $"timestamp={timestamp},aopic={aopic},sign={sign},json={json}"); + + var dictParams = new Dictionary(); + dictParams.Add("timestamp", timestamp.ToString()); + dictParams.Add("json", json); + var checkSign = Sign(dictParams, appSecret); + // if (!string.Equals(checkSign, sign)) + // { + // LogHelper.Error("淘宝回调验签失败", checkSign); + // return "验签失败"; + // } + // 验签通过进行相关的业务 + + /* + * 返回空字符或者不返回,不进行任何操作 + * 返回规定格式,进行相应操作。允许的操作有更新发货状态、更新备注、生成旺旺消息 + * DoDummySend:更新发货状态(false不更新发货状态) + * DoMemoUpdate:更新备注(null不更新备注)。Flag是旗帜,可以传0-5的数字,如果传-1或者不传此参数,则保留原旗帜;Memo为备注内容 + * AliwwMsg:想要发给买家的旺旺消息(null或空字符串,不发消息) + */ + if (refunds != null) + { + if (await refunds(json)) + { + var returnJson = new + { + DoDummySend = true, + DoMemoUpdate = new + { + Flag = 1, + Memo = "退款处理中" + }, + AliwwMsg = "退款处理中" + }; + return returnJson.ToJson(); + } + } + return ""; + } + + //参数签名 + public string Sign(IDictionary args, string ClientSecret) + { + IDictionary sortedParams = new SortedDictionary(args, StringComparer.Ordinal); + string str = ""; + foreach (var m in sortedParams) + { + str += (m.Key + m.Value); + } + //头尾加入AppSecret + str = ClientSecret + str + ClientSecret; + var encodeStr = MD5Encrypt(str).ToUpper(); + return encodeStr; + } + + //Md5摘要 + public static string MD5Encrypt(string text) + { + MD5 md5 = new MD5CryptoServiceProvider(); + byte[] fromData = System.Text.Encoding.UTF8.GetBytes(text); + byte[] targetData = md5.ComputeHash(fromData); + string byte2String = null; + + for (int i = 0; i < targetData.Length; i++) + { + byte2String += targetData[i].ToString("x2"); + } + + return byte2String; + } + + + public async Task Test() + { + string appSecret = "xrzmtmfv46mmt9c9rzt2g7c74h9g7u7u"; + long timestamp = 1585122176; + long aopic = 2; // 根据aopic判断推送类型 + string sign = "442B91FB4811A8899EBEA689205F98A1"; + string json = "{\"Platform\":\"TAOBAO\",\"PlatformUserId\":\"619727442\",\"ReceiverName\":null,\"ReceiverMobile\":\"15538302361\",\"ReceiverPhone\":null,\"ReceiverAddress\":null,\"BuyerArea\":null,\"ExtendedFields\":{},\"Tid\":908706240358624821,\"Status\":\"WAIT_SELLER_SEND_GOODS\",\"SellerNick\":\"可乐开发商\",\"BuyerNick\":\"woai853133256\",\"Type\":null,\"BuyerMessage\":null,\"Price\":\"1.00\",\"Num\":6,\"TotalFee\":\"6.00\",\"Payment\":\"6.00\",\"PayTime\":null,\"PicPath\":\"https://img.alicdn.com/bao/uploaded/i3/619727442/TB2ZSA.XNvxQeBjy0FiXXXioXXa_!!619727442.png\",\"PostFee\":\"0.00\",\"Created\":\"2020-03-25 15:42:50\",\"TradeFrom\":\"WAP,WAP\",\"Orders\":[{\"Oid\":908706240358624821,\"NumIid\":537279953649,\"OuterIid\":null,\"OuterSkuId\":null,\"Title\":\"老客户续费连接\",\"Price\":\"1.00\",\"Num\":6,\"TotalFee\":\"6.00\",\"Payment\":\"6.00\",\"PicPath\":\"https://img.alicdn.com/bao/uploaded/i3/619727442/TB2ZSA.XNvxQeBjy0FiXXXioXXa_!!619727442.png\",\"SkuId\":\"3208012025040\",\"SkuPropertiesName\":\"付费方式:月付;服务器套餐:套餐1;对应金额:1元选项\",\"DivideOrderFee\":null,\"PartMjzDiscount\":null}],\"SellerMemo\":null,\"SellerFlag\":0,\"CreditCardFee\":null}"; + + + var dictParams = new Dictionary(); + dictParams.Add("timestamp", timestamp.ToString()); + dictParams.Add("json", json); + var checkSign = Sign(dictParams, appSecret); + if (!string.Equals(checkSign, sign)) + { + LogHelper.Error("淘宝回调验签失败", checkSign); + return "验签失败"; + } + return ""; + } + + } +}