/// <summary> /// 根据订单号更新表中的红包状态和接收时间字段 /// </summary> /// <param name="redpacket">红包信息</param> /// <returns>返回更新是否成功</returns> public bool UpdateRedPacketInfo(Business_Redpacket_Push_Information redpacket) { using (var db = SugarDao_MsSql.GetInstance()) { return(db.Update <Business_Redpacket_Push_Information>(new { redpacket.CreatedDate, redpacket.RedpacketStatus, redpacket.ReceiveDate, redpacket.Reson }, it => it.OrderNumber == redpacket.OrderNumber)); } }
/// <summary> /// 调用微信接口获取红包信息 /// </summary> public void GetRedPacketInfo() { using (var db = SugarDao_MsSql.GetInstance()) { var listOrderNo = db.Queryable <Business_Redpacket_Push_Information>().Where("isnull(RedpacketStatus,0) not in (3,4,6)").Select(i => i.OrderNumber).ToList(); foreach (string billNo in listOrderNo) { WxPayData data = new WxPayData(); data.SetValue("mch_billno", billNo); var result = WeChatTools.QueryWorkWxRedPacket(data); if (result.GetValue("return_code").ToString() != "SUCCESS" || result.GetValue("result_code").ToString() != "SUCCESS") { continue; } Business_Redpacket_Push_Information redpacket = new Business_Redpacket_Push_Information(); var status = result.GetValue("status").ToString(); //红包状态 var redPacketStatus = (int)((RedPacketStatus)Enum.Parse(typeof(RedPacketStatus), status)); redpacket.RedpacketStatus = redPacketStatus; var sendTime = result.GetValue("send_time").ToString(); redpacket.CreatedDate = DateTime.Parse(sendTime); switch (status) { case "RECEIVED": var rcvTime = result.GetValue("rcv_time").ToString(); //var rcvTime = hblist.Substring(hblist.Length - 19, 19); redpacket.ReceiveDate = DateTime.Parse(rcvTime); break; case "REFUND": var refundTime = result.GetValue("refund_time").ToString(); redpacket.ReceiveDate = DateTime.Parse(refundTime); break; case "FAILED": var reason = result.GetValue("reason").ToString(); redpacket.Reson = reason; break; default: redpacket.ReceiveDate = null; break; } redpacket.OrderNumber = billNo; UpdateRedPacketInfo(redpacket); } } }
/// <summary> /// 重写推送方法 /// </summary> /// <param name="accessTokenModel"></param> /// <param name="contentModel"></param> /// <returns></returns> public override string Push(U_AccessToken accessTokenModel, U_Content contentModel) { //获取AccessToken bool isSuccess = SetCorpAccount(accessTokenModel); if (isSuccess) { var listRedPacket = new List <Business_Redpacket_Push_Information>(); //List<U_WeChatUser> weChatUserList = SearchWeChatUserList(); //string pushObject = GetPushObject(contentModel, weChatUserList);//13788907365|15618738991|18301914615 string pushObject = GetPushObject(contentModel); string[] pushObjs = pushObject.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); //推送的人数 int[] redPacket = new int[pushObjs.Length - 1]; try { //固定金额红包推送 总金额固定,按照人数计算每个红包金额(每个红包金额需一致) // 注:如果无法平均分配,则最后一人多出(例:10元分给3人,则金额为3.3、3.3、3.4) if (contentModel.RedpacketType == 1) { int money = (int)(contentModel.RedpacketMoney * 100); //总金额(分) redPacket = GetAvgRedPacket(pushObjs.Length, money); } else if (contentModel.RedpacketType == 2) //红包总金额(RMB),推送给每人的金额随机。 { int money = (int)(contentModel.RedpacketMoney * 100); //总金额(分) redPacket = GetRandomRedPacket(pushObjs.Length, money); } else if (contentModel.RedpacketType == 3) //输入单个红包随机金额区间(RMB),发给每人红包的金额在此区间内 { int moneyFrom = (int)(contentModel.RedpacketMoneyFrom * 100); int moneyTo = (int)(contentModel.RedpacketMoneyTo * 100); redPacket = GetSingleRandomRedPacket(pushObjs.Length, moneyFrom, moneyTo); } for (int i = 0; i < pushObjs.Length; i++) { WxPayData data = new WxPayData(); Business_Redpacket_Push_Information redpacketPushInfo = new Business_Redpacket_Push_Information(); redpacketPushInfo.Business_WeChatPushVguid = contentModel.VGUID; //推送主键 data.SetValue("nonce_str", WxPayApi.GenerateNonceStr()); //随机字符串 var outTradeNo = WxPayApi.GenerateOutTradeNo(); redpacketPushInfo.OrderNumber = outTradeNo; data.SetValue("mch_billno", outTradeNo); //商户订单号 data.SetValue("mch_id", WxPayConfig.MCHID); //商户号 data.SetValue("wxappid", WxPayConfig.APPID); //公众账号ID data.SetValue("sender_name", "大众交通出租分公司"); //商户名称 //string filePath = AppDomain.CurrentDomain.BaseDirectory + "logo.png"; //string mediaid = UploadTempResource(filePath); data.SetValue("sender_header_media_id", "1G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu9V5w7o8K0"); //发送者头像,此id为微信默认的头像 string openid = ConvertToOpenidByUserId(_accessToken, pushObjs[i]); var openInfo = JsonHelper.JsonToModel <U_OpenInfo>(openid); JsonConvert.DeserializeObject <U_OpenInfo>(openid); data.SetValue("re_openid", openInfo.openid); //用户openid data.SetValue("total_amount", redPacket[i]); //付款金额,单位分 redpacketPushInfo.RedpacketMoney = (decimal)(redPacket[i] * 1.0 / 100); //红包金额 data.SetValue("wishing", contentModel.Message); //红包祝福语 data.SetValue("act_name", contentModel.Title); //活动名称 data.SetValue("remark", "快来抢"); //备注 data.SetValue("scene_id", "PRODUCT_4"); //场景(金额大于200元时必填) data.SetValue("workwx_sign", data.MakeWorkWxSign("redPacket")); //企业微信签名 data.SetValue("sign", data.MakeSign()); //微信支付签名 redpacketPushInfo.UserID = pushObjs[i]; //红包接收人的微信号 string xml = data.ToXml(); const string postUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendworkwxredpack"; //发送企业红包接口地址 string response = PostWebRequest(postUrl, xml, Encoding.UTF8, true); //调用HTTP通信接口提交数据到API WxPayData result = new WxPayData(); result.FromXml(response); if (result.GetValue("return_code").ToString() == "SUCCESS" && result.GetValue("result_code").ToString() == "SUCCESS") { redpacketPushInfo.RedpacketStatus = 2; //已发送待领取 } else { redpacketPushInfo.RedpacketStatus = 3; //发送失败 redpacketPushInfo.Reson = result.GetValue("err_code_des").ToString(); LogManager.WriteLog(LogFile.Error, result.GetValue("err_code") + ":" + result.GetValue("err_code_des")); } redpacketPushInfo.VGUID = Guid.NewGuid(); redpacketPushInfo.CreatedDate = DateTime.Now; redpacketPushInfo.CreatedUser = "******"; listRedPacket.Add(redpacketPushInfo); } } catch (Exception ex) { LogManager.WriteLog(LogFile.Error, ex.ToString()); return("推送失败!"); } UpdatePushStatus(contentModel); InsertRedPacketInfo(listRedPacket); return("推送成功!"); } return("推送失败!"); }