using System; using System.Collections.Generic; using System.Linq; using MySystem.Models; using Library; using LitJson; using System.Text.RegularExpressions; using System.Threading; namespace MySystem { public class CheckAlipaySignService { public readonly static CheckAlipaySignService Instance = new CheckAlipaySignService(); private CheckAlipaySignService() { } public void Start() { Thread th = new Thread(StartListen); th.IsBackground = true; th.Start(); } public void StartListen() { while (true) { string content = RedisDbconn.Instance.RPop("AlipaySignQueue"); if (!string.IsNullOrEmpty(content)) { string result = StartDo(Newtonsoft.Json.JsonConvert.DeserializeObject(content)); if (result == "wait") { Thread.Sleep(10000); RedisDbconn.Instance.AddList("AlipaySignQueue", content); } } else { Thread.Sleep(2000); } } } public string StartDo(MerchantSign sign) { try { WebCMSEntities db = new WebCMSEntities(); string content = AlipayFunction.Instance.QuerySignStatus(sign.BusinessCode); JsonData dic = JsonMapper.ToObject(content); if (dic["alipay_open_agent_order_query_response"]["code"].ToString() == "10000") { // MERCHANT_INFO_HOLD=暂存,提交事务出现业务校验异常时,会暂存申请单信息,可以调用业务接口修正参数,并重新提交 // MERCHANT_AUDITING=审核中,申请信息正在人工审核中 // MERCHANT_CONFIRM=待商户确认,申请信息审核通过,等待联系人确认签约或授权 // MERCHANT_CONFIRM_SUCCESS=商户确认成功,商户同意签约或授权 // MERCHANT_CONFIRM_TIME_OUT=商户超时未确认,如果商户受到确认信息15天内未确认,则需要重新提交申请信息 // MERCHANT_APPLY_ORDER_CANCELED=审核失败或商户拒绝,申请信息审核被驳回,或者商户选择拒绝签约或授权 if (dic["alipay_open_agent_order_query_response"]["order_status"].ToString() == "MERCHANT_CONFIRM") { string sign_url = dic["alipay_open_agent_order_query_response"]["confirm_url"].ToString(); MerchantAddInfo merchantadd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId); if (merchantadd != null) { merchantadd.QueryCount = 1; MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId); if (merchant != null) { merchant.QueryCount = 1; } string confirm_url = dic["alipay_open_agent_order_query_response"]["confirm_url"].ToString(); string fileName = function.MD5_16(Guid.NewGuid().ToString()); function.CreateQRCode2(sign_url, fileName, "/" + confirm_url); merchantadd.AlipaySignUrl = confirm_url; merchantadd.AlipayPid = dic["alipay_open_agent_order_query_response"]["merchant_pid"].ToString(); db.SaveChanges(); } return "wait"; } else if (dic["alipay_open_agent_order_query_response"]["order_status"].ToString() == "MERCHANT_CONFIRM_SUCCESS") { //{"alipay_open_agent_order_query_response":{"code":"10000","msg":"Success","order_no":"20230704034000100000030319581766","product_agent_status_infos":[{"product_code":"FACE_TO_FACE_PAYMENT","product_name":"当面付","status":"EFFECTED"}],"order_status":"MERCHANT_CONFIRM_SUCCESS","merchant_pid":"2088641525908640"},"sign":"UyyrAf+Q+2jd5VVsaKUyWTMW8gFadUWWQIoYSTLzYFx0NOetjbN4XE9xq2kYvoJIYgQQOhohDKyAZZ7FOnOz9J849AXaqW1VYfVY9FSDvnSCdcUrAdyXGQEp7TcbnMtP5RTXZO+VCKRpvvUc/LVdXMPMetUbzhyaahQf/T512aQNuYFjxH5QfMdzGDwevt47iNoANITwXqns1A+ETBCuxHlx2Ps7WXpPxzqvFYK9CBD5MQCaq7IrDityzAUcMFiMjE3LlXb1zgg6PlsHnJBZm0Zde1PYzKZcHKnx2bxWl2upwpC3uj6drxzkGqzcZ4D21cTlndm8GIRLo2XHpd79Hw=="} MerchantAddInfo merchantadd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId); if (merchantadd != null) { merchantadd.AlipayPid = dic["alipay_open_agent_order_query_response"]["merchant_pid"].ToString(); if (content.Contains("restrict_infos")) { if (dic["alipay_open_agent_order_query_response"]["restrict_infos"].Count > 0) { merchantadd.QueryCount = -1; merchantadd.AlipayRemark = dic["alipay_open_agent_order_query_response"]["restrict_infos"][0]["restrict_reason"].ToString(); MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId); if (merchant != null) { merchant.QueryCount = -1; } } else { merchantadd.QueryCount = 2; MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId); if (merchant != null) { merchant.QueryCount = 2; if (merchant.SignDate == null) { merchant.SignDate = DateTime.Now; } } if (merchant.Latitude == 0) { //签约成功调用腾讯地图接口获取地址 RedisDbconn.Instance.AddList("GetTencentAddressInfoQueue", "{\"MerChantId\":\"" + merchant.Id + "\",\"Address\":\"" + merchant.Areas + merchant.Address + "\"}"); } } } else { merchantadd.QueryCount = 2; MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId); if (merchant != null) { merchant.QueryCount = 2; if (merchant.SignDate == null) { merchant.SignDate = DateTime.Now; } } if (merchant.Latitude == 0) { //签约成功调用腾讯地图接口获取地址 RedisDbconn.Instance.AddList("GetTencentAddressInfoQueue", "{\"MerChantId\":\"" + merchant.Id + "\",\"Address\":\"" + merchant.Areas + merchant.Address + "\"}"); } } db.SaveChanges(); } } else if (dic["alipay_open_agent_order_query_response"]["order_status"].ToString() == "MERCHANT_APPLY_ORDER_CANCELED") { MerchantAddInfo merchantadd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId); if (merchantadd != null) { string reason = ""; if (dic["alipay_open_agent_order_query_response"]["restrict_infos"].Count > 0) { reason = dic["alipay_open_agent_order_query_response"]["restrict_infos"][0]["restrict_reason"].ToString(); } merchantadd.AlipayRemark = reason; merchantadd.QueryCount = -1; MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId); if (merchant != null) { merchant.QueryCount = -1; } db.SaveChanges(); } } else if (dic["alipay_open_agent_order_query_response"]["order_status"].ToString() == "MERCHANT_AUDITING") { return "wait"; } } else { if (dic["alipay_open_agent_order_query_response"]["code"].ToString() == "40004" && dic["alipay_open_agent_order_query_response"]["sub_msg"].ToString() == "系统繁忙") { return "wait"; } MerchantAddInfo merchantadd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId); if (merchantadd != null) { merchantadd.QueryCount = -1; merchantadd.AlipayRemark = dic["alipay_open_agent_order_query_response"]["sub_msg"].ToString(); MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId); if (merchant != null) { merchant.QueryCount = -1; } db.SaveChanges(); } } } catch (Exception ex) { LogHelper.Instance.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "支付宝签约审核队列异常"); } return ""; } } }