Browse Source

修改结算卡编码完成,测试中

DuGuYang 1 year ago
parent
commit
ccab025261

+ 41 - 0
Entity/HaoDa/ChangeMerchantCard.cs

@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem
+{
+    /// <summary>
+    /// 商户修改银行卡
+    /// </summary>
+    public class ChangeMerchantCard
+    {
+        public string mchtNo { get; set; }//收款商户号
+        public string accountName { get; set; }//开户名(账户名称 账户类型 0-对公 时填写对公账户名,1-对私 时填写银行卡户名)
+        public string accountNo { get; set; }//卡号(账户类型 0-对公 时填写对公账号,1-对私 时填写银行卡号)
+        public string accoutType { get; set; }//账户类型 0-对公,1-对私
+        public string zbankNo { get; set; }//开户支行号
+        public string alterType { get; set; }//结算类型:0-对公结算银行卡;1-法人对私结算银行卡;2-非法人结算
+        public string acctZbankCode { get; set; }//开户支行地区码
+        public string idCard { get; set; }//非法人身份证号(结算类型为2时必填)
+        public string agentCardDate { get; set; }//非法人身份证有效期(结算类型为2时必填,格式:20210101-20220101,如长期:20210101-长期)
+        public string openBankAccName { get; set; }//开户许可证-开户名(修改对公凭证时填写)
+        public string openBankName { get; set; }//开户许可证-银行名称(修改对公凭证时填写)
+        public string openCollectBankCode { get; set; }//开户许可证-银行代码(修改对公凭证时填写)
+        public string openBankRegionCode { get; set; }//开户许可证-银行地区码(修改对公凭证时填写)
+        public string openBankRegionName { get; set; }//开户许可证-开户地名称(修改对公凭证时填写)
+        public string openUnionNo { get; set; }//开户许可证-开户支行(修改对公凭证时填写)
+        public string openUnionName { get; set; }//开户许可证-支行名称(修改对公凭证时填写)
+        public string openBankAccout { get; set; }//开户许可证-银行卡号(修改对公凭证时填写)
+        public List<PhotoItem> photoList { get; set; }//图片列表
+
+    }
+
+    /// <summary>
+    /// 图片类
+    /// </summary>
+    public class PhotoItem
+    {
+        public string mediaCode { get; set; }//图片名
+        public string mediaPath { get; set; }//图片token
+    }
+
+}

+ 15 - 0
Entity/HaoDa/QueryChangeCardStatus.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem
+{
+    /// <summary>
+    /// 查询修改银行卡任务审核状态
+    /// </summary>
+    public class QueryChangeCardStatus
+    {
+        public string mchtNo { get; set; }//收款商户号
+        public int taskId { get; set; }//任务id
+
+    }
+}

+ 12 - 11
Startup.cs

@@ -135,17 +135,18 @@ namespace MySystem
             });
 
             initMainServer();
-            MerchantConfirmService.Instance.Start(); //提交商户进件
-            CheckWeChatSignService.Instance.Start(); //查询商户审核状态
-            ProfitShareService.Instance.Start(); //分账
-            HaoDaExtHelper.Instance.StartWeChat();
-            HaoDaExtHelper.Instance.StartAlipay();
-            HaoDaExtQueryHelper.Instance.StartWeChat();
-            HaoDaExtQueryHelper.Instance.StartAlipay();
-            HaoDaAuthQueryHelper.Instance.Start(); //查询实名认证状态
-            WeChatPayBackService.Instance.Start(); //支付回调
-            WeChatPayBackService.Instance.StartProfitShare(); //分账队列
-            // TestOpenDivideAccountsService.Instance.Start(); //测试
+            // MerchantConfirmService.Instance.Start(); //提交商户进件
+            // CheckWeChatSignService.Instance.Start(); //查询商户审核状态
+            // ProfitShareService.Instance.Start(); //分账
+            // HaoDaExtHelper.Instance.StartWeChat();
+            // HaoDaExtHelper.Instance.StartAlipay();
+            // HaoDaExtQueryHelper.Instance.StartWeChat();
+            // HaoDaExtQueryHelper.Instance.StartAlipay();
+            // HaoDaAuthQueryHelper.Instance.Start(); //查询实名认证状态
+            // WeChatPayBackService.Instance.Start(); //支付回调
+            // WeChatPayBackService.Instance.StartProfitShare(); //分账队列
+            TestOpenDivideAccountsService.Instance.Start(); //测试
+            // HaoDaHelper.Instance.QueryOrderDivideAccountsss();
         }
 
         //初始化数据结构

+ 118 - 0
Util/HaoDa/ChangeMerchantCardSetUtil.cs

@@ -0,0 +1,118 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Aop.Api.Util;
+using GraphQL;
+using Library;
+using LitJson;
+using MySystem;
+using MySystem.Models.Main;
+
+namespace MySystem
+{
+    /// <summary>
+    /// 好哒商户修改银行卡参数赋值
+    /// </summary>
+    public class ChangeMerchantCardSetUtil
+    {
+        public static ChangeMerchantCard SetValue(MerchantAddInfo AddInfo, string accountNo, string accoutType, string accountName, string zbankNo, string alterType, string acctZbankCode, string idCard, string idCardStartDate, string idCardEndDate, string openAccountLicenses, string BankCard = "/static/upload/2023/9/11/nb.jpg")
+        {
+            ChangeMerchantCard changeMerchantCard = new ChangeMerchantCard();
+            changeMerchantCard.mchtNo = AddInfo.MchtNo; //收款商户号
+            changeMerchantCard.accountNo = accountNo; //卡号(账户类型 0-对公 时填写对公账号,1-对私 时填写银行卡号)
+            changeMerchantCard.accoutType = accoutType; //账户类型 0-对公,1-对私
+            if (changeMerchantCard.accoutType == "1")
+            {
+                changeMerchantCard.accountName = accountName; //开户名(账户名称 账户类型 0-对公 时填写对公账户名,1-对私 时填写银行卡户名)
+            }
+            else
+            {
+                changeMerchantCard.accountName = accountName; //开户名(账户名称 账户类型 0-对公 时填写对公账户名,1-对私 时填写银行卡户名)
+            }
+            changeMerchantCard.zbankNo = zbankNo; //开户支行号
+            changeMerchantCard.alterType = alterType; //结算类型:0-对公结算银行卡;1-法人对私结算银行卡;2-非法人结算
+            // if (AddInfo.AccountType == "0" && AddInfo.LicenceType == "0") changeMerchantCard.alterType = "0"; //结算类型:0-对公结算银行卡;1-法人对私结算银行卡;2-非法人结算
+            // if (AddInfo.AccountType == "1" && (AddInfo.LicenceType == "0" || AddInfo.LicenceType == "1")) changeMerchantCard.alterType = "1"; //结算类型:0-对公结算银行卡;1-法人对私结算银行卡;2-非法人结算
+            // if (AddInfo.AccountType == "1" && AddInfo.LicenceType == null) changeMerchantCard.alterType = "2"; //结算类型:0-对公结算银行卡;1-法人对私结算银行卡;2-非法人结算
+            changeMerchantCard.acctZbankCode = acctZbankCode; //开户支行地区码
+            if (changeMerchantCard.alterType == "2")
+            {
+                changeMerchantCard.idCard = idCard; //非法人身份证号(结算类型为2时必填)
+                changeMerchantCard.agentCardDate = "" + "-" + "长期"; //非法人身份证有效期(结算类型为2时必填,格式:20210101-20220101,如长期:20210101-长期)
+                changeMerchantCard.agentCardDate = "" + "-" + ""; //非法人身份证有效期(结算类型为2时必填,格式:20210101-20220101,如长期:20210101-长期)
+            }
+            List<PhotoItem> photoList = new List<PhotoItem>();
+            PhotoItem photoItem = new PhotoItem();
+            // alterType结算类型为 0 时,上传 开户许可证照片
+            // alterType结算类型为1时,上传 银行卡照片
+            // alterType结算类型为2时,上传 银行卡照片、非法人身份证正面照片、非法人身份证反
+            // 面照片、委托结算授权书照片、法人手持委托结算授权书
+            if (alterType == "0")
+            {
+                var tokenInfo = JsonMapper.ToObject(HaoDaHelper.Instance.GetToken(AddInfo.BankCard.Substring(AddInfo.BankCard.LastIndexOf("/")).Trim('/'), "0"));
+                if (tokenInfo["code"].ToString() == "1")
+                {
+                    var returnInfo = HaoDaHelper.Instance.ReturnFileName(tokenInfo["token"].ToString(), AddInfo.BankCard);
+                    if (returnInfo != "false")
+                    {
+                        photoItem = new PhotoItem();
+                        photoItem.mediaCode = "openAccountLicenses";
+                        photoItem.mediaPath = returnInfo;
+                        photoList.Add(photoItem);
+                    }
+                }
+            }
+            if (alterType == "1")
+            {
+                if (!string.IsNullOrEmpty(AddInfo.OpenAccountLicenses))
+                {
+                    var tokenInfo = JsonMapper.ToObject(HaoDaHelper.Instance.GetToken(AddInfo.BankCard.Substring(AddInfo.OpenAccountLicenses.LastIndexOf("/")).Trim('/'), "0"));
+                    if (tokenInfo["code"].ToString() == "1")
+                    {
+                        var returnInfo = HaoDaHelper.Instance.ReturnFileName(tokenInfo["token"].ToString(), AddInfo.OpenAccountLicenses);
+                        if (returnInfo != "false")
+                        {
+                            photoItem = new PhotoItem();
+                            photoItem.mediaCode = "openAccountLicenses";
+                            photoItem.mediaPath = returnInfo;
+                            photoList.Add(photoItem);
+                        }
+                    }
+                }
+                if (!string.IsNullOrEmpty(BankCard))
+                {
+                    var tokenInfo = JsonMapper.ToObject(HaoDaHelper.Instance.GetToken(AddInfo.BankCard.Substring(BankCard.LastIndexOf("/")).Trim('/'), "0"));
+                    if (tokenInfo["code"].ToString() == "1")
+                    {
+                        var returnInfo = HaoDaHelper.Instance.ReturnFileName(tokenInfo["token"].ToString(), BankCard);
+                        if (returnInfo != "false")
+                        {
+                            photoItem = new PhotoItem();
+                            photoItem.mediaCode = "bankCard";
+                            photoItem.mediaPath = returnInfo;
+                            photoList.Add(photoItem);
+                        }
+                    }
+                }
+            }
+            if (alterType == "2")
+            {
+                var tokenInfo = JsonMapper.ToObject(HaoDaHelper.Instance.GetToken(AddInfo.BankCard.Substring(AddInfo.BankCard.LastIndexOf("/")).Trim('/'), "0"));
+                if (tokenInfo["code"].ToString() == "1")
+                {
+                    var returnInfo = HaoDaHelper.Instance.ReturnFileName(tokenInfo["token"].ToString(), AddInfo.BankCard);
+                    if (returnInfo != "false")
+                    {
+                        photoItem = new PhotoItem();
+                        photoItem.mediaCode = "openAccountLicenses";
+                        photoItem.mediaPath = returnInfo;
+                        photoList.Add(photoItem);
+                    }
+                }
+            }
+            changeMerchantCard.photoList = photoList; //图片列表
+            return changeMerchantCard;
+        }
+    }
+}

+ 154 - 46
Util/HaoDa/HaoDaHelper.cs

@@ -323,24 +323,26 @@ namespace MySystem
         }
 
         /// <summary>
-        /// 订单分账申请
+        /// 分账交易详情查询
         /// </summary>
-        /// <param name="request"></param>
+        /// <param name="mchtNo">慧掌柜商户号</param>
+        /// <param name="orderNo">交易订单号	</param>
         /// <returns></returns>
-        /// 
-        public string OrderDivideAccounts(OrderDivideAccounts request)
+        public string QueryOrderDivideAccounts(string mchtNo, string orderNo)
         {
-            function.WriteLog(DateTime.Now.ToString(), "好哒订单分账申请");
-
-            string req = Newtonsoft.Json.JsonConvert.SerializeObject(request);
-            function.WriteLog(req, "好哒订单分账申请");
+            function.WriteLog(DateTime.Now.ToString(), "好哒分账交易详情查询");
+            Dictionary<string, object> reqdic = new Dictionary<string, object>();
+            reqdic.Add("mchtNo", mchtNo); // 慧掌柜商户号
+            reqdic.Add("orderNo", orderNo); // 交易订单号	
+            string req = Newtonsoft.Json.JsonConvert.SerializeObject(reqdic);
+            function.WriteLog(req, "好哒分账交易详情查询");
             Dictionary<string, string> headdic = GetHeader(req);
             string head = Newtonsoft.Json.JsonConvert.SerializeObject(headdic);
-            function.WriteLog("请求头\n" + head, "好哒订单分账申请");
-            function.WriteLog("请求参数\n" + req, "好哒订单分账申请");
-            function.WriteLog("请求地址:" + BoxRequestUrl + "/api/v3/hzg/part/order/apply", "好哒订单分账申请");
-            string result = PostWebRequest(BoxRequestUrl + "/api/v3/hzg/part/order/apply", req, headdic);
-            function.WriteLog("返回\n" + result + "\n\n", "好哒订单分账申请");
+            function.WriteLog("请求头\n" + head, "好哒分账交易详情查询");
+            function.WriteLog("请求参数\n" + req, "好哒分账交易详情查询");
+            function.WriteLog("请求地址:" + BoxRequestUrl + "/api/v3/hzg/part/acct/bind_mcht", "好哒分账交易详情查询");
+            string result = PostWebRequest(BoxRequestUrl + "/api/v3/hzg/part/acct/bind_mcht", req, headdic);
+            function.WriteLog("返回\n" + result + "\n\n", "好哒分账交易详情查询");
 
             return result;
         }
@@ -351,21 +353,11 @@ namespace MySystem
         /// <param name="request"></param>
         /// <returns></returns>
         /// 
-        public string OrderDivideAccounts22()
+        public string OrderDivideAccounts(OrderDivideAccounts request)
         {
             function.WriteLog(DateTime.Now.ToString(), "好哒订单分账申请");
-            Dictionary<string, object> reqdic = new Dictionary<string, object>();
-            List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
-            Dictionary<string, object> lists = new Dictionary<string, object>();
-            reqdic.Add("applyNo", "FZ202307050006");
-            reqdic.Add("mchtNo", "1475762");
-            reqdic.Add("orderNo", "G2230818C01935875690");
-            lists.Add("acctNo", "030510106621391");
-            lists.Add("acctType", "0");
-            lists.Add("amount", "1");
-            list.Add(lists);
-            reqdic.Add("detail", list);
-            string req = Newtonsoft.Json.JsonConvert.SerializeObject(reqdic);
+
+            string req = Newtonsoft.Json.JsonConvert.SerializeObject(request);
             function.WriteLog(req, "好哒订单分账申请");
             Dictionary<string, string> headdic = GetHeader(req);
             string head = Newtonsoft.Json.JsonConvert.SerializeObject(headdic);
@@ -404,38 +396,54 @@ namespace MySystem
         }
 
         /// <summary>
-        /// 聚合支付退款接口
+        /// 商户修改银行卡
         /// </summary>
-        /// <param name="mchtNo">盒子的商户编号</param>
-        /// <param name="storeNo">盒子的门店编号</param>
-        /// <param name="outRefundNo">商户退款订单号</param>
-        /// <param name="outOrderNo">商户支付订单号</param>
-        /// <param name="refundAmount">退款金额,单位:分</param>
+        /// <param name="request"></param>
         /// <returns></returns>
-        public string AggregatedPayRefundsss()
+        public string ChangeMerchantCard(ChangeMerchantCard request)
         {
-            function.WriteLog(DateTime.Now.ToString(), "好哒聚合支付退款");
-            Dictionary<string, object> reqdic = new Dictionary<string, object>();
+            function.WriteLog(DateTime.Now.ToString(), "好哒商户修改银行卡");
 
-            reqdic.Add("mchtNo", "1475762"); // 盒子的商户编号	
-            reqdic.Add("storeNo", "21604555"); // 盒子的门店编号	
-            reqdic.Add("outRefundNo", "1335533180636825300395002090"); //32 商户退款订单号	
-            reqdic.Add("outOrderNo", "2023081817321700637330891"); // 商户支付订单号	
-            reqdic.Add("refundAmount", "50"); //10 退款金额,单位:分
+            string req = Newtonsoft.Json.JsonConvert.SerializeObject(request);
+            function.WriteLog(req, "好哒商户修改银行卡");
+            Dictionary<string, string> headdic = GetHeader(req);
+            string head = Newtonsoft.Json.JsonConvert.SerializeObject(headdic);
+            function.WriteLog("请求头\n" + head, "好哒商户修改银行卡");
+            function.WriteLog("请求参数\n" + req, "好哒商户修改银行卡");
+            function.WriteLog("请求地址:" + BoxRequestUrl + "/api/inst/mcht/update_acct", "好哒商户修改银行卡");
+            string result = PostWebRequest(BoxRequestUrl + "/api/inst/mcht/update_acct", req, headdic);
+            function.WriteLog("返回\n" + result + "\n\n", "好哒商户修改银行卡");
+
+            return result;
+        }
+
+        /// <summary>
+        /// 查询修改银行卡任务审核状态
+        /// </summary>
+        /// <param name="mchtNo">收款商户号</param>
+        /// <param name="taskId">任务id</param>
+        /// <returns></returns>
+        public string QueryChangeCardStatus(string mchtNo, string taskId)
+        {
+            function.WriteLog(DateTime.Now.ToString(), "好哒查询修改银行卡任务审核状态");
+            Dictionary<string, object> reqdic = new Dictionary<string, object>();
+            reqdic.Add("mchtNo", mchtNo);
+            reqdic.Add("taskId", taskId);
 
             string req = Newtonsoft.Json.JsonConvert.SerializeObject(reqdic);
-            function.WriteLog(req, "好哒聚合支付退款");
+            function.WriteLog(req, "好哒查询修改银行卡任务审核状态");
             Dictionary<string, string> headdic = GetHeader(req);
             string head = Newtonsoft.Json.JsonConvert.SerializeObject(headdic);
-            function.WriteLog("请求头\n" + head, "好哒聚合支付退款");
-            function.WriteLog("请求参数\n" + req, "好哒聚合支付退款");
-            function.WriteLog("请求地址:" + BoxRequestUrl + "/api/hzg/v2/unitedtrade/refund", "好哒聚合支付退款");
-            string result = PostWebRequest(BoxRequestUrl + "/api/hzg/v2/unitedtrade/refund", req, headdic);
-            function.WriteLog("返回\n" + result + "\n\n", "好哒聚合支付退款");
+            function.WriteLog("请求头\n" + head, "好哒查询修改银行卡任务审核状态");
+            function.WriteLog("请求参数\n" + req, "好哒查询修改银行卡任务审核状态");
+            function.WriteLog("请求地址:" + BoxRequestUrl + "/api/inst/mcht/query_acct_task", "好哒查询修改银行卡任务审核状态");
+            string result = PostWebRequest(BoxRequestUrl + "/api/inst/mcht/query_acct_task", req, headdic);
+            function.WriteLog("返回\n" + result + "\n\n", "好哒查询修改银行卡任务审核状态");
 
             return result;
         }
 
+
         /// <summary>
         /// 绑定微信appid接口
         /// </summary>
@@ -531,6 +539,106 @@ namespace MySystem
             return result;
         }
 
+        /// <summary>
+        /// 订单分账申请
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        /// 
+        public string OrderDivideAccounts22()
+        {
+            function.WriteLog(DateTime.Now.ToString(), "好哒订单分账申请");
+            Dictionary<string, object> reqdic = new Dictionary<string, object>();
+            List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
+            Dictionary<string, object> lists = new Dictionary<string, object>();
+            lists = new Dictionary<string, object>();
+            reqdic.Add("applyNo", "FZ202309070001");
+            reqdic.Add("mchtNo", "1475762");
+            reqdic.Add("orderNo", "G2230907C01986946066");
+            lists.Add("acctNo", "230817000000000278");
+            lists.Add("acctType", "1");
+            lists.Add("amount", "100");
+            list.Add(lists);
+
+            lists = new Dictionary<string, object>();
+            lists.Add("acctNo", "030510106621391");
+            lists.Add("acctType", "0");
+            lists.Add("amount", "9862");
+            list.Add(lists);
+            
+            reqdic.Add("detail", list);
+            string req = Newtonsoft.Json.JsonConvert.SerializeObject(reqdic);
+            function.WriteLog(req, "好哒订单分账申请");
+            Dictionary<string, string> headdic = GetHeader(req);
+            string head = Newtonsoft.Json.JsonConvert.SerializeObject(headdic);
+            function.WriteLog("请求头\n" + head, "好哒订单分账申请");
+            function.WriteLog("请求参数\n" + req, "好哒订单分账申请");
+            function.WriteLog("请求地址:" + BoxRequestUrl + "/api/v3/hzg/part/order/apply", "好哒订单分账申请");
+            string result = PostWebRequest(BoxRequestUrl + "/api/v3/hzg/part/order/apply", req, headdic);
+            function.WriteLog("返回\n" + result + "\n\n", "好哒订单分账申请");
+
+            return result;
+        }
+
+        /// <summary>
+        /// 分账交易详情查询
+        /// </summary>
+        /// <param name="mchtNo">慧掌柜商户号</param>
+        /// <param name="orderNo">交易订单号	</param>
+        /// <returns></returns>
+        public string QueryOrderDivideAccountsss()
+        {
+            function.WriteLog(DateTime.Now.ToString(), "好哒分账交易详情查询");
+            Dictionary<string, object> reqdic = new Dictionary<string, object>();
+            reqdic.Add("mchtNo", "1475762"); // 慧掌柜商户号
+            reqdic.Add("orderNo", "G2230907C01986946066"); // 交易订单号	
+            string req = Newtonsoft.Json.JsonConvert.SerializeObject(reqdic);
+            function.WriteLog(req, "好哒分账交易详情查询");
+            Dictionary<string, string> headdic = GetHeader(req);
+            string head = Newtonsoft.Json.JsonConvert.SerializeObject(headdic);
+            function.WriteLog("请求头\n" + head, "好哒分账交易详情查询");
+            function.WriteLog("请求参数\n" + req, "好哒分账交易详情查询");
+            function.WriteLog("请求地址:" + BoxRequestUrl + "/api/v3/hzg/part/trade/clear/get", "好哒分账交易详情查询");
+            string result = PostWebRequest(BoxRequestUrl + "/api/v3/hzg/part/trade/clear/get", req, headdic);
+            function.WriteLog("返回\n" + result + "\n\n", "好哒分账交易详情查询");
+
+            return result;
+        }
+
+        /// <summary>
+        /// 聚合支付退款接口
+        /// </summary>
+        /// <param name="mchtNo">盒子的商户编号</param>
+        /// <param name="storeNo">盒子的门店编号</param>
+        /// <param name="outRefundNo">商户退款订单号</param>
+        /// <param name="outOrderNo">商户支付订单号</param>
+        /// <param name="refundAmount">退款金额,单位:分</param>
+        /// <returns></returns>
+        public string AggregatedPayRefundsss()
+        {
+            function.WriteLog(DateTime.Now.ToString(), "好哒聚合支付退款");
+            Dictionary<string, object> reqdic = new Dictionary<string, object>();
+
+            reqdic.Add("mchtNo", "1475762"); // 盒子的商户编号	
+            reqdic.Add("storeNo", "21604555"); // 盒子的门店编号	
+            reqdic.Add("outRefundNo", "9335533180636825300395666888"); //32 商户退款订单号	
+            reqdic.Add("outOrderNo", "2023090715460060997601022"); // 商户支付订单号	
+            reqdic.Add("refundAmount", "502"); //10 退款金额,单位:分
+            reqdic.Add("refundReason", "门店分红"); //退款原因(仅微信交易且退款金额大于1元时在退款消息中展示)
+
+            string req = Newtonsoft.Json.JsonConvert.SerializeObject(reqdic);
+            function.WriteLog(req, "好哒聚合支付退款");
+            Dictionary<string, string> headdic = GetHeader(req);
+            string head = Newtonsoft.Json.JsonConvert.SerializeObject(headdic);
+            function.WriteLog("请求头\n" + head, "好哒聚合支付退款");
+            function.WriteLog("请求参数\n" + req, "好哒聚合支付退款");
+            function.WriteLog("请求地址:" + BoxRequestUrl + "/api/hzg/v2/unitedtrade/refund", "好哒聚合支付退款");
+            string result = PostWebRequest(BoxRequestUrl + "/api/hzg/v2/unitedtrade/refund", req, headdic);
+            function.WriteLog("返回\n" + result + "\n\n", "好哒聚合支付退款");
+
+            return result;
+        }
+
         public Dictionary<string, string> GetHeader(string req)
         {
             Dictionary<string, string> headdic = new Dictionary<string, string>();

+ 13 - 3
Util/HaoDa/OrderDivideAccountsUtil.cs

@@ -23,7 +23,7 @@ namespace MySystem
         /// <param name="acctType">账户类型(0:商户收款账户(大B),1:分账接收方账户(小B))</param>
         /// <param name="amount">金额(分)</param>
         /// <returns></returns>
-        public static OrderDivideAccounts AddValue(string applyNo, string mchtNo, string orderNo, string acctNo, string acctType, string amount)
+        public static OrderDivideAccounts AddValue(string applyNo, string mchtNo, string orderNo, string acctNo, string sacctNo, string acctType, string amount, string seviceAmount)
         {
             OrderDivideAccounts orderDivideAccounts = new OrderDivideAccounts();
             orderDivideAccounts.applyNo = applyNo;
@@ -31,9 +31,19 @@ namespace MySystem
             orderDivideAccounts.orderNo = orderNo;
             List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
             Dictionary<string, object> obj = new Dictionary<string, object>();
-            obj.Add("acctNo", acctNo);
-            obj.Add("acctType", acctType);
+            //分账接收方账户
+            obj = new Dictionary<string, object>();
+            obj.Add("acctNo", "230817000000000278");
+            obj.Add("acctType", "1");
+            obj.Add("amount", seviceAmount);
+            list.Add(obj);
+
+            //商户收款账户
+            obj = new Dictionary<string, object>();
+            obj.Add("acctNo", sacctNo);
+            obj.Add("acctType", "0");
             obj.Add("amount", amount);
+
             list.Add(obj);
             orderDivideAccounts.detail = list;
             return orderDivideAccounts;

+ 1 - 1
Util/HaoDa/ProfitHelper.cs

@@ -163,7 +163,7 @@ namespace MySystem
                                                     MerchantAddInfo merchantAdd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == suborder.MerchantId) ?? new MerchantAddInfo();
                                                     
                                                     //聚合支付退款
-                                                    var info = HaoDaHelper.Instance.AggregatedPayRefund(merchantAdd.SubMchid, merchantAdd.AlipayPid, "HDTK" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8), merchantAdd.AlipayAuthToken, GetMoney.ToString());
+                                                    var info = HaoDaHelper.Instance.AggregatedPayRefund(merchantAdd.OutMchtNo, merchantAdd.StoreNo, "HDTK" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8), order.OrderNo, GetMoney.ToString());
                                                     if (suborder.CurDivi < suborder.MaxDivi)
                                                     {
                                                         RedisDbconn.Instance.AddList("ConsumerOrders:Divi:" + PayMode + ":" + MerchantId, suborder);

+ 128 - 0
Util/HaoDa/TestChangeMerchantCardSetUtil.cs

@@ -0,0 +1,128 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Aop.Api.Util;
+using GraphQL;
+using Library;
+using LitJson;
+using MySystem;
+using MySystem.Models.Main;
+
+namespace MySystem
+{
+    /// <summary>
+    /// 好哒商户修改银行卡参数赋值(测试)
+    /// </summary>
+    public class TestChangeMerchantCardSetUtil
+    {
+        public static ChangeMerchantCard SetValue(MerchantAddInfo AddInfo, string BankCard = "/static/upload/2023/9/11/nb.jpg")
+        {
+            ChangeMerchantCard changeMerchantCard = new ChangeMerchantCard();
+            changeMerchantCard.mchtNo = "030510106621391"; //收款商户号
+            changeMerchantCard.accountNo = "6217359952003511113"; //卡号(账户类型 0-对公 时填写对公账号,1-对私 时填写银行卡号)
+            changeMerchantCard.accoutType = "1"; //账户类型 0-对公,1-对私
+            if (changeMerchantCard.accoutType == "1")
+            {
+                changeMerchantCard.accountName = "王亦君"; //开户名(账户名称 账户类型 0-对公 时填写对公账户名,1-对私 时填写银行卡户名)
+            }
+            else
+            {
+                changeMerchantCard.accountName = "四川探火网络科技有限责任公司"; //开户名(账户名称 账户类型 0-对公 时填写对公账户名,1-对私 时填写银行卡户名)
+            }
+            changeMerchantCard.zbankNo = "313701013316"; //开户支行号
+            changeMerchantCard.alterType = "1"; //结算类型:0-对公结算银行卡;1-法人对私结算银行卡;2-非法人结算
+            // if (AddInfo.AccountType == "0" && AddInfo.LicenceType == "0") changeMerchantCard.alterType = "0"; //结算类型:0-对公结算银行卡;1-法人对私结算银行卡;2-非法人结算
+            // if (AddInfo.AccountType == "1" && (AddInfo.LicenceType == "0" || AddInfo.LicenceType == "1")) changeMerchantCard.alterType = "1"; //结算类型:0-对公结算银行卡;1-法人对私结算银行卡;2-非法人结算
+            // if (AddInfo.AccountType == "1" && AddInfo.LicenceType == null) changeMerchantCard.alterType = "2"; //结算类型:0-对公结算银行卡;1-法人对私结算银行卡;2-非法人结算
+            changeMerchantCard.acctZbankCode = "510107"; //开户支行地区码
+            changeMerchantCard.idCard = "620522199407080017"; //非法人身份证号
+            if (changeMerchantCard.alterType == "2")
+            {
+                changeMerchantCard.idCard = "620522199407080017"; //非法人身份证号(结算类型为2时必填)
+                if (AddInfo.CardPeriodEnd.Value.Year == 2050)
+                {
+                    changeMerchantCard.agentCardDate = AddInfo.CardPeriodBegin.Value.ToString("yyyyMMdd") + "-" + "长期"; //法人身份证有效期 格式:20150101-20200101,若结束日期为长期填20150101-长期
+                }
+                else
+                {
+                    changeMerchantCard.agentCardDate = AddInfo.CardPeriodBegin.Value.ToString("yyyyMMdd") + "-" + AddInfo.CardPeriodEnd.Value.ToString("yyyyMMdd"); //法人身份证有效期 格式:20150101-20200101,若结束日期为长期填20150101-长期
+                }
+                // changeMerchantCard.agentCardDate = "" + "-" + "长期"; //非法人身份证有效期(结算类型为2时必填,格式:20210101-20220101,如长期:20210101-长期)
+                // changeMerchantCard.agentCardDate = "" + "-" + ""; //非法人身份证有效期(结算类型为2时必填,格式:20210101-20220101,如长期:20210101-长期)
+            }
+            List<PhotoItem> photoList = new List<PhotoItem>();
+            PhotoItem photoItem = new PhotoItem();
+            // alterType结算类型为 0 时,上传 开户许可证照片
+            // alterType结算类型为1时,上传 银行卡照片
+            // alterType结算类型为2时,上传 银行卡照片、非法人身份证正面照片、非法人身份证反
+            // 面照片、委托结算授权书照片、法人手持委托结算授权书
+            if (changeMerchantCard.alterType == "0")
+            {
+                var tokenInfo = JsonMapper.ToObject(HaoDaHelper.Instance.GetToken(AddInfo.BankCard.Substring(AddInfo.BankCard.LastIndexOf("/")).Trim('/'), "0"));
+                if (tokenInfo["code"].ToString() == "1")
+                {
+                    var returnInfo = HaoDaHelper.Instance.ReturnFileName(tokenInfo["token"].ToString(), AddInfo.BankCard);
+                    if (returnInfo != "false")
+                    {
+                        photoItem = new PhotoItem();
+                        photoItem.mediaCode = "openAccountLicenses";
+                        photoItem.mediaPath = returnInfo;
+                        photoList.Add(photoItem);
+                    }
+                }
+            }
+            if (changeMerchantCard.alterType == "1")
+            {
+                var info = "/static/upload/2023/8/14/dd.jpg";
+                if (!string.IsNullOrEmpty(info))
+                {
+                    var tokenInfo = JsonMapper.ToObject(HaoDaHelper.Instance.GetToken(info.Substring(info.LastIndexOf("/")).Trim('/'), "0"));
+                    if (tokenInfo["code"].ToString() == "1")
+                    {
+                        var returnInfo = HaoDaHelper.Instance.ReturnFileName(tokenInfo["token"].ToString(), info);
+                        if (returnInfo != "false")
+                        {
+                            photoItem = new PhotoItem();
+                            photoItem.mediaCode = "openAccountLicenses";
+                            photoItem.mediaPath = returnInfo;
+                            photoList.Add(photoItem);
+                        }
+                    }
+                }
+                if (!string.IsNullOrEmpty(BankCard))
+                {
+                    var tokenInfo = JsonMapper.ToObject(HaoDaHelper.Instance.GetToken(BankCard.Substring(BankCard.LastIndexOf("/")).Trim('/'), "0"));
+                    if (tokenInfo["code"].ToString() == "1")
+                    {
+                        var returnInfo = HaoDaHelper.Instance.ReturnFileName(tokenInfo["token"].ToString(), BankCard);
+                        if (returnInfo != "false")
+                        {
+                            photoItem = new PhotoItem();
+                            photoItem.mediaCode = "bankCard";
+                            photoItem.mediaPath = returnInfo;
+                            photoList.Add(photoItem);
+                        }
+                    }
+                }
+            }
+            if (changeMerchantCard.alterType == "2")
+            {
+                var tokenInfo = JsonMapper.ToObject(HaoDaHelper.Instance.GetToken(AddInfo.BankCard.Substring(AddInfo.BankCard.LastIndexOf("/")).Trim('/'), "0"));
+                if (tokenInfo["code"].ToString() == "1")
+                {
+                    var returnInfo = HaoDaHelper.Instance.ReturnFileName(tokenInfo["token"].ToString(), AddInfo.BankCard);
+                    if (returnInfo != "false")
+                    {
+                        photoItem = new PhotoItem();
+                        photoItem.mediaCode = "openAccountLicenses";
+                        photoItem.mediaPath = returnInfo;
+                        photoList.Add(photoItem);
+                    }
+                }
+            }
+            changeMerchantCard.photoList = photoList; //图片列表
+            return changeMerchantCard;
+        }
+    }
+}

+ 52 - 5
Util/HaoDa/TestOpenDivideAccountsService.cs

@@ -25,8 +25,15 @@ namespace MySystem
         public void StartListen()
         {
             // DivideAccountsSign(1);//分账接收方签约
+            // while (true)
+            // {
+            //     OrderDivideAccounts22();//指定订单申请分账
+            //     Thread.Sleep(20000);
+            // }
             // OrderDivideAccounts22();//指定订单申请分账
-            AggregatedPayRefundsss();//指定订单聚合支付退款接口
+            // QueryOrderDivideAccounts();//指定订单分账交易详情查询
+            // AggregatedPayRefundsss();//指定订单聚合支付退款接口
+            ChangeMerchantCard(1);//商户修改银行卡
         }
 
         //添加分账接收方账户
@@ -59,10 +66,26 @@ namespace MySystem
         //指定订单申请分账
         public void OrderDivideAccounts22()
         {
-            HaoDaHelper.Instance.OrderDivideAccounts22();
+            // JsonData Infos = JsonMapper.ToObject(HaoDaHelper.Instance.OrderDivideAccountsQuery("FZ202309070000", "1475762"));
+            JsonData Info = JsonMapper.ToObject(HaoDaHelper.Instance.OrderDivideAccounts22());
+            if (Info["resultCode"].ToString() == "1")
+            {
+                JsonData Infos = JsonMapper.ToObject(HaoDaHelper.Instance.OrderDivideAccountsQuery("FZ202309070000", "1475762"));
+                if (Infos["resultCode"].ToString() == "1")
+                {
+                    HaoDaHelper.Instance.QueryOrderDivideAccountsss();
+                    // HaoDaHelper.Instance.AggregatedPayRefundsss();
+                }
+            }
         }
 
-        //指定订单申请分账
+        //分账交易详情查询
+        public void QueryOrderDivideAccounts()
+        {
+            HaoDaHelper.Instance.QueryOrderDivideAccountsss();
+        }
+
+        //指定订单聚合支付退款接口
         public void AggregatedPayRefundsss()
         {
             HaoDaHelper.Instance.AggregatedPayRefundsss();
@@ -86,12 +109,36 @@ namespace MySystem
             db.Dispose();
         }
 
-         //绑定微信appid接口
+        //商户修改银行卡
+        public void ChangeMerchantCard(int MerchantId)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            MerchantAddInfo AddInfo = db.MerchantAddInfo.FirstOrDefault(m => m.Id == MerchantId);
+            var request = TestChangeMerchantCardSetUtil.SetValue(AddInfo);
+            JsonData Infos = JsonMapper.ToObject(HaoDaHelper.Instance.ChangeMerchantCard(request));
+            JsonData results = JsonMapper.ToObject(HaoDaHelper.Instance.QueryChangeCardStatus(AddInfo.MchtNo, Infos["taskId"].ToString()));
+            //TODO:修改结算卡变更商户相关信息
+            // AccountNumber
+            // BankName
+            // BankBranchId
+            // BankAddressCode
+            // BankAccountType
+            // OpenUnionNo
+            // OpenCollectBankCode
+            // OpenBankRegionCode
+            // OpenBankAccout
+            // OpenBankAccName
+            // ZbankRegionCode
+            // ZBankNo
+            db.Dispose();
+        }
+
+        //绑定微信appid接口
         public void BindWeChatAppId(int MerchantId)
         {
             WebCMSEntities db = new WebCMSEntities();
             MerchantAddInfo AddInfo = db.MerchantAddInfo.FirstOrDefault(m => m.Id == MerchantId);
-            string result = HaoDaHelper.Instance.BindWeChatAppId(AddInfo.OutMchtNo, AddInfo.StoreNo,AppConfig.Haoda.SubAppId);
+            string result = HaoDaHelper.Instance.BindWeChatAppId(AddInfo.OutMchtNo, AddInfo.StoreNo, AppConfig.Haoda.SubAppId);
             db.Dispose();
         }
     }

+ 31 - 28
Util/HaoDa/WeChatPayBackService.cs

@@ -30,7 +30,7 @@ namespace MySystem
             bool op = true;
             while (op)
             {
-                string content = RedisDbconn.Instance.RPop<string>("WeChatPayBack");
+                string content = RedisDbconn.Instance.RPop<string>("WeChatPayBackHd");
                 if (!string.IsNullOrEmpty(content))
                 {
                     try
@@ -108,34 +108,37 @@ namespace MySystem
                             order.Status = 2;
                             MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == order.MerchantId) ?? new MerchantInfo();
                             MerchantParamSet set = db.MerchantParamSet.FirstOrDefault(m => m.Id == order.MerchantId) ?? new MerchantParamSet();
-                            if (order.IsAct == 1 && order.PayMoney >= set.MinPayMoney)
-                            {
-                                MerchantAddInfo merchantAdd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == order.MerchantId) ?? new MerchantAddInfo();
-                                //发起分账
-                                decimal fee = order.PayMoney; //单位:分
-                                if (fee >= 1)
-                                {
-                                    string applyNo = "FZ" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8); //批次号
-                                    string mchtNo = merchantAdd.OutMchtNo; //慧掌柜商户号
-                                    string orderNo = order.SeoTitle; //交易订单号(好哒平台订单号,G开头)
-                                    string acctNo = AppConfig.Haoda.AcctNo; //账户号,账户类型为商户收款账户时填收款商户号, 账户类型为分账接收方时填分账接收方账户号
-                                    string acctType = "1"; //账户类型(0:商户收款账户(大B),1:分账接收方账户(小B))
-                                    string amount = (fee * (1M - 0.0038M)).ToString(); //金额(分)
-                                    amount = decimal.Parse(amount).ToString("f0");
-                                    HaoDaHelper.Instance.OrderDivideAccounts(OrderDivideAccountsUtil.AddValue(applyNo, mchtNo, orderNo, acctNo, acctType, amount));
+                            // if (order.IsAct == 1 && order.PayMoney >= set.MinPayMoney)
+                            // {
+                            //     MerchantAddInfo merchantAdd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == order.MerchantId) ?? new MerchantAddInfo();
+                            //     //发起分账
+                            //     decimal fee = order.PayMoney; //单位:分
+                            //     if (fee >= 1)
+                            //     {
+                            //         string applyNo = "FZ" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8); //批次号
+                            //         string mchtNo = merchantAdd.OutMchtNo; //慧掌柜商户号
+                            //         string orderNo = order.SeoTitle; //交易订单号(好哒平台订单号,G开头)
+                            //         string acctNo = AppConfig.Haoda.AcctNo; //账户号,分账接收方账户号
+                            //         string sacctNo = merchantAdd.MchtNo; //账户号,收款商户号
+                            //         string acctType = "0"; //账户类型(0:商户收款账户(大B),1:分账接收方账户(小B))
+                            //         string amount = (fee * (1M - 0.0038M)).ToString(); //金额(分)手续费
+                            //         amount = decimal.Parse(amount).ToString("f0");
+                            //         string seviceAmount = (fee * 0.01M).ToString(); //服务费
+                            //         seviceAmount = decimal.Parse(seviceAmount).ToString("f0");
+                            //         HaoDaHelper.Instance.OrderDivideAccounts(OrderDivideAccountsUtil.AddValue(applyNo, mchtNo, orderNo, acctNo, sacctNo, acctType, amount, seviceAmount));
 
-                                    //开始监听分账状态
-                                    Dictionary<string, object> req = new Dictionary<string, object>();
-                                    req.Add("ApplyNo", applyNo);
-                                    req.Add("OrderNo", orderNo);
-                                    req.Add("MchtNo", mchtNo);
-                                    RedisDbconn.Instance.AddList("ProfitShareQueue", Newtonsoft.Json.JsonConvert.SerializeObject(req));
-                                }
-                                else
-                                {
-                                    RedisDbconn.Instance.AddList("ConsumerOrders:Divi:2:List", order.Id.ToString());
-                                }
-                            }
+                            //         //开始监听分账状态
+                            //         Dictionary<string, object> req = new Dictionary<string, object>();
+                            //         req.Add("ApplyNo", applyNo);
+                            //         req.Add("OrderNo", orderNo);
+                            //         req.Add("MchtNo", mchtNo);
+                            //         RedisDbconn.Instance.AddList("ProfitShareQueue", Newtonsoft.Json.JsonConvert.SerializeObject(req));
+                            //     }
+                            //     else
+                            //     {
+                            //         RedisDbconn.Instance.AddList("ConsumerOrders:Divi:2:List", order.Id.ToString());
+                            //     }
+                            // }
                         }
                     }
                     db.SaveChanges();