Esempio n. 1
0
 /// <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));
     }
 }
Esempio n. 2
0
        /// <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);
                }
            }
        }
Esempio n. 3
0
        /// <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("推送失败!");
        }