protected void odsUserList_Selected(object sender, ObjectDataSourceStatusEventArgs e) { if (e.ReturnValue is List <WeChatUser> && e.OutputParameters.Count != 0 && e.OutputParameters["totalRecords"] != null) { this.lblSearchResult.Text = e.OutputParameters["totalRecords"].ToString(); //更新此页用户的微信信息 WeChatUserDAO.RefreshWxUserInfo(e.ReturnValue as List <WeChatUser>); } }
/// <summary> /// 根据OpenID查询用户参加的所有团购活动 /// </summary> /// <param name="conn"></param> /// <param name="openID"></param> /// <param name="isLoadGroupEventMember">是否加载团购活动成员</param> /// <returns></returns> public static List <GroupPurchaseEvent> FindGroupPurchaseEventByOpenID(SqlConnection conn, string openID, bool isLoadGroupEventMember) { List <GroupPurchaseEvent> groupEventList = new List <GroupPurchaseEvent>(); GroupPurchaseEvent groupEvent = null; try { using (SqlCommand cmdGroup = conn.CreateCommand()) { SqlParameter paramID = cmdGroup.CreateParameter(); paramID.ParameterName = "@GroupMember"; paramID.SqlDbType = System.Data.SqlDbType.NVarChar; paramID.SqlValue = openID; cmdGroup.Parameters.Add(paramID); cmdGroup.CommandText = "select * from GroupPurchaseEvent where Id in (select GroupEventID from GroupPurchaseEventMember where GroupMember = @GroupMember)"; using (SqlDataReader sdr = cmdGroup.ExecuteReader()) { while (sdr.Read()) { groupEvent = new GroupPurchaseEvent(); groupEvent.ID = int.Parse(sdr["Id"].ToString()); groupEvent.Organizer = WeChatUserDAO.FindUserByOpenID(conn, sdr["Organizer"].ToString(), false); groupEvent.LaunchDate = DateTime.Parse(sdr["LaunchDate"].ToString()); groupEvent.GroupPurchase = GroupPurchase.FindGroupPurchaseByID(conn, int.Parse(sdr["GroupID"].ToString()), false, false); groupEvent.IsNotify = bool.Parse(sdr["IsNotify"].ToString()); if (isLoadGroupEventMember) { groupEvent.GroupPurchaseEventMembers = groupEvent.FindGroupPurchaseEventMembers(conn); } else { groupEvent.GroupPurchaseEventMembers = null; } groupEventList.Add(groupEvent); } } } } catch (Exception ex) { Log.Error("根据OpenID查询用户参加的所有团购活动", ex.ToString()); throw ex; } return(groupEventList); }
/// <summary> /// 查询指定团购活动ID包含的所有订单,用于检测活动成员是否全部支付成功。不需要加载订单明细,以及订单明细项对应的团购活动 /// </summary> /// <param name="conn"></param> /// <returns></returns> public List <ProductOrder> FindOrderByGroupEventID(SqlConnection conn) { List <ProductOrder> poList = new List <ProductOrder>(); ProductOrder po; try { using (SqlCommand cmdOrder = conn.CreateCommand()) { cmdOrder.CommandText = "select * from ProductOrder where Id in (select ProductOrder.Id from ProductOrder left join OrderDetail on ProductOrder.Id = OrderDetail.PoID where OrderDetail.GroupEventID=@EventID) order by Id"; SqlParameter paramEventID = cmdOrder.CreateParameter(); paramEventID.ParameterName = "@EventID"; paramEventID.SqlDbType = System.Data.SqlDbType.Int; paramEventID.SqlValue = this.ID; cmdOrder.Parameters.Add(paramEventID); using (SqlDataReader sdrOrder = cmdOrder.ExecuteReader()) { while (sdrOrder.Read()) { po = new ProductOrder(); ProductOrder.SDR2PO(po, sdrOrder); po.Purchaser = WeChatUserDAO.FindUserByOpenID(conn, sdrOrder["OpenID"].ToString(), false); if (sdrOrder["AgentOpenID"] != DBNull.Value) { po.Agent = WeChatUserDAO.FindUserByOpenID(conn, sdrOrder["AgentOpenID"].ToString(), false); } poList.Add(po); } } } } catch (Exception ex) { throw ex; } return(poList); }
/// <summary> /// 查询未通知用户的团购活动 /// </summary> /// <param name="conn"></param> /// <param name="isLoadGroupEventMember"></param> /// <returns></returns> public static List <GroupPurchaseEvent> FindGroupPurchaseEventForNotify(SqlConnection conn, bool isLoadGroupEventMember) { List <GroupPurchaseEvent> groupEventList = new List <GroupPurchaseEvent>(); GroupPurchaseEvent groupEvent; try { using (SqlCommand cmdGroup = conn.CreateCommand()) { cmdGroup.CommandText = "select * from GroupPurchaseEvent where IsNotify = 0"; using (SqlDataReader sdr = cmdGroup.ExecuteReader()) { while (sdr.Read()) { groupEvent = new GroupPurchaseEvent(); groupEvent.ID = int.Parse(sdr["Id"].ToString()); groupEvent.Organizer = WeChatUserDAO.FindUserByOpenID(conn, sdr["Organizer"].ToString(), false); groupEvent.LaunchDate = DateTime.Parse(sdr["LaunchDate"].ToString()); groupEvent.GroupPurchase = GroupPurchase.FindGroupPurchaseByID(conn, int.Parse(sdr["GroupID"].ToString()), false, false); groupEvent.IsNotify = bool.Parse(sdr["IsNotify"].ToString()); if (isLoadGroupEventMember) { groupEvent.GroupPurchaseEventMembers = groupEvent.FindGroupPurchaseEventMembers(conn); } else { groupEvent.GroupPurchaseEventMembers = null; } groupEventList.Add(groupEvent); } } } } catch (Exception ex) { Log.Error("查询所有团购活动", ex.ToString()); throw ex; } return(groupEventList); }
protected void Page_Load(object sender, EventArgs e) { WeChatUser wxUser; string cardSign = string.Empty, timeStamp = string.Empty, nonceStr = string.Empty; try { wxUser = Session["WxUser"] as WeChatUser; //获取“微信收货地址共享接口参数”,已过时,改用JSAPI openAddress //string authUrl; //string redirectUri = Request.Url.AbsoluteUri; ////如果wxUser中不包含snsapi_base模式授权的token或token已超时,则发起snsapi_base授权 //if (string.IsNullOrEmpty(wxUser.AccessTokenForBase) || DateTime.Now >= wxUser.ExpireOfAccessTokenForBase) //{ // if (Request.QueryString["CODE"] == null) // { // authUrl = String.Format(@"https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope={2}&state=STATE#wechat_redirect", // Config.APPID, // HttpUtility.UrlEncode(redirectUri), // "snsapi_base"); // Response.Redirect(authUrl); // } // else // { // authUrl = String.Format(@"https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", // Config.APPID, // Config.APPSECRET, // Request.QueryString["CODE"]); // string strAuth = HttpService.Get(authUrl); // JsonData jAccessToken = JsonMapper.ToObject(strAuth); // if (jAccessToken != null && jAccessToken is JsonData && jAccessToken.Keys.Contains("access_token") && jAccessToken.Keys.Contains("refresh_token") && jAccessToken.Keys.Contains("expires_in")) // { // wxUser.AccessTokenForBase = jAccessToken["access_token"].ToString(); // wxUser.RefreshTokenForBase = jAccessToken["refresh_token"].ToString(); // wxUser.ExpireOfAccessTokenForBase = DateTime.Now.AddSeconds(double.Parse(jAccessToken["expires_in"].ToString())); // } // else // { // throw new Exception("snsapi_base模式认证失败"); // } // } //} ////获取“收货地址共享接口参数”,传给前端JS //wxEditAddrParam = WxJSAPI.MakeEditAddressJsParam(wxUser.AccessTokenForBase, redirectUri); //获取最新的用户积分信息 wxUser.MemberPoints = WeChatUserDAO.FindMemberPointsByOpenID(wxUser.OpenID); //生成微信卡券签名,用于客户端调用微信卡券JSSDK string apiTicket; apiTicket = WxJSAPI.GetAPITicket(); cardSign = WxJSAPI.MakeCardSign(apiTicket, out nonceStr, out timeStamp); //定义前端JS全局变量:会员积分兑换比率、会员积分余额 ScriptManager.RegisterStartupScript(Page, this.GetType(), "jsMemberPoints", string.Format("var memberPointsExchangeRate = {0}, validMemberPoints = {1};", Config.MemberPointsExchangeRate, wxUser.MemberPoints), true); //定义前端JS全局变量:运费标准、免运费条件 ScriptManager.RegisterStartupScript(Page, this.GetType(), "jsFreightTerm", string.Format("var freight = {0}, freightFreeCondition = {1};", Config.Freight, Config.FreightFreeCondition), true); //定义前端JS全局变量:支付方式枚举值、支付宝网关 ScriptManager.RegisterStartupScript(Page, this.GetType(), "jsPaymentTerm", string.Format("var paymentTerm={{wechat:{0},alipay:{1},cash:{2}}}, apGateway = '{3}';", (int)PaymentTerm.WECHAT, (int)PaymentTerm.ALIPAY, (int)PaymentTerm.CASH, AliPayConfig.AliPayGateway), true); //定义前端JS全局变量:微信卡券JS参数、微信地址JS参数 ScriptManager.RegisterStartupScript(Page, this.GetType(), "jsWxJSParam", string.Format("var wxCardParam={{cardSign:'{0}',timestamp:'{1}',nonceStr:'{2}',signType:'SHA1'}};", cardSign, timeStamp, nonceStr), true); //定义前端JS全局变量:微信卡券CardType枚举值 ScriptManager.RegisterStartupScript(Page, this.GetType(), "jsCardType", string.Format("var wxCardType={{cash:{0},discount:{1},groupon:{2},gift:{3},generalCoupon:{4},memberCard:{5},scenicTicket:{6},movieTicket:{7},boardingPass:{8},meetingTicket:{9},busTicket:{10}}};", (int)WxCardType.CASH, (int)WxCardType.DISCOUNT, (int)WxCardType.GROUPON, (int)WxCardType.GIFT, (int)WxCardType.GENERAL_COUPON, (int)WxCardType.MEMBER_CARD, (int)WxCardType.SCENIC_TICKET, (int)WxCardType.MOVIE_TICKET, (int)WxCardType.BOARDING_PASS, (int)WxCardType.MEETING_TICKET, (int)WxCardType.BUS_TICKET), true); } catch (System.Threading.ThreadAbortException) { } catch (Exception ex) { Log.Error(this.GetType().ToString(), ex.Message); } }
protected void Page_Load(object sender, EventArgs e) { WeChatUser wxUser; string cardSign = string.Empty, timeStamp = string.Empty, nonceStr = string.Empty; try { wxUser = Session["WxUser"] as WeChatUser; //string authUrl; //string redirectUri = Request.Url.AbsoluteUri; ////如果wxUser中不包含snsapi_base模式授权的token或token已超时,则发起snsapi_base授权 //if (string.IsNullOrEmpty(wxUser.AccessTokenForBase) || DateTime.Now >= wxUser.ExpireOfAccessTokenForBase) //{ // if (Request.QueryString["CODE"] == null) // { // authUrl = String.Format(@"https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope={2}&state=STATE#wechat_redirect", // Config.APPID, // HttpUtility.UrlEncode(redirectUri), // "snsapi_base"); // Response.Redirect(authUrl); // } // else // { // authUrl = String.Format(@"https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", // Config.APPID, // Config.APPSECRET, // Request.QueryString["CODE"]); // string strAuth = HttpService.Get(authUrl); // JsonData jAccessToken = JsonMapper.ToObject(strAuth); // if (jAccessToken != null && jAccessToken is JsonData && jAccessToken.Keys.Contains("access_token") && jAccessToken.Keys.Contains("refresh_token") && jAccessToken.Keys.Contains("expires_in")) // { // wxUser.AccessTokenForBase = jAccessToken["access_token"].ToString(); // wxUser.RefreshTokenForBase = jAccessToken["refresh_token"].ToString(); // wxUser.ExpireOfAccessTokenForBase = DateTime.Now.AddSeconds(double.Parse(jAccessToken["expires_in"].ToString())); // } // else // { // throw new Exception("snsapi_base模式认证失败"); // } // } //} ////获取“收货地址共享接口参数”,传给前端JS //wxEditAddrParam = WxJSAPI.MakeEditAddressJsParam(wxUser.AccessTokenForBase, redirectUri); //获取最新的用户积分信息 wxUser.MemberPoints = WeChatUserDAO.FindMemberPointsByOpenID(wxUser.OpenID); //生成微信卡券签名,用于客户端调用微信卡券JSSDK string apiTicket; apiTicket = WxJSAPI.GetAPITicket(); cardSign = WxJSAPI.MakeCardSign(apiTicket, out nonceStr, out timeStamp); ////开始:显示当前微信用户信息:用户头像、昵称、特权、积分 this.imgPortrait.ImageUrl = wxUser.HeadImgUrl; this.lblNickName.Text = wxUser.NickName; this.lblPrivilege.Text = wxUser.Privilege; this.lblMemberPoints.Text = string.Format("{0}(={1}元)", wxUser.MemberPoints, (decimal)wxUser.MemberPoints / Config.MemberPointsExchangeRate); this.lblMemberPointsExchageRate.Text = Config.MemberPointsExchangeRate.ToString(); ////结束:显示auth.ashx鉴权获取的微信用户信息 //定义前端JS全局变量:微信卡券JS参数 ScriptManager.RegisterStartupScript(Page, this.GetType(), "jsWxCard", string.Format("var wxCardParam={{cardSign:'{0}',timestamp:'{1}',nonceStr:'{2}',signType:'SHA1'}};", cardSign, timeStamp, nonceStr), true); } catch (System.Threading.ThreadAbortException) { } catch (Exception ex) { Log.Error(this.GetType().ToString(), ex.Message); throw ex; } }
/// <summary> /// 查询团购活动成员 /// </summary> /// <param name="conn"></param> /// <returns></returns> public List <GroupPurchaseEventMember> FindGroupPurchaseEventMembers(SqlConnection conn) { List <GroupPurchaseEventMember> groupEventMemberList = new List <GroupPurchaseEventMember>(); try { //查询团购活动关联的所有订单,用于检测此用户是否全部支付成功 List <ProductOrder> poList = this.FindOrderByGroupEventID(conn); using (SqlCommand cmdGroupID = conn.CreateCommand()) { SqlParameter paramID = cmdGroupID.CreateParameter(); paramID.ParameterName = "@GroupEventID"; paramID.SqlDbType = System.Data.SqlDbType.Int; paramID.SqlValue = this.ID; cmdGroupID.Parameters.Add(paramID); cmdGroupID.CommandText = "select * from GroupPurchaseEventMember where GroupEventID = @GroupEventID order by Id"; using (SqlDataReader sdr = cmdGroupID.ExecuteReader()) { GroupPurchaseEventMember eventMember; while (sdr.Read()) { eventMember = new GroupPurchaseEventMember(); eventMember.ID = int.Parse(sdr["Id"].ToString()); eventMember.GroupMember = WeChatUserDAO.FindUserByOpenID(conn, sdr["GroupMember"].ToString(), false); eventMember.JoinDate = DateTime.Parse(sdr["JoinDate"].ToString()); eventMember.GroupPurchaseEvent = this; //检查当前成员是否有未支付、未撤单的订单,必须全部订单支付成功才认为此用户参加的团购活动支付成功 int memberAllPO = 0, notPaidPO = 0, cancelledPO = 0; poList.ForEach(po => { if (po.Purchaser.OpenID == eventMember.GroupMember.OpenID) { //计算团购活动里的所有订单数量 memberAllPO++; } if (po.Purchaser.OpenID == eventMember.GroupMember.OpenID && !po.IsCancel && po.TradeState != TradeState.SUCCESS && po.TradeState != TradeState.CASHPAID && po.TradeState != TradeState.AP_TRADE_FINISHED && po.TradeState != TradeState.AP_TRADE_SUCCESS) { //计算团购活动里的未支付订单数量 notPaidPO++; } if (po.Purchaser.OpenID == eventMember.GroupMember.OpenID && po.IsCancel) { //计算团购活动里的取消订单数量 cancelledPO++; } }); //设置当前成员的支付标记,如果不存在未支付的订单,并且订单没有被全部取消,则认为此团购成员已支付 if (notPaidPO == 0 && cancelledPO < memberAllPO) { eventMember.IsPaid = true; } else { eventMember.IsPaid = false; } groupEventMemberList.Add(eventMember); } } } } catch (Exception ex) { Log.Error("查询指定团购活动中的所有用户", ex.ToString()); throw ex; } return(groupEventMemberList); }
public static void SendMsgOnMemberPoints(object sender, ProductOrder.MemberPointsCalculatedEventArgs e) { if (sender == null || !(sender is ProductOrder) || e == null) { throw new ArgumentNullException("sender或事件参数对象不能为null"); } ProductOrder po = sender as ProductOrder; JsonData jRet; try { List <string> listReceiver; JsonData jTmplMsg, jTmplMsgData, jTmplMsgDataValue; //给订单的下单人发送积分通知消息 listReceiver = new List <string>(new string[] { po.Purchaser.OpenID }); //构造模板消息 jTmplMsg = new JsonData(); jTmplMsgData = new JsonData(); jTmplMsg["touser"] = string.Empty; jTmplMsg["template_id"] = TMPL_MEMBER_POINTS_NOTIFY; jTmplMsg["url"] = @"http://mahui.me/UserCenter.aspx"; jTmplMsg["topcolor"] = MSG_HEAD_COLOR; jTmplMsgDataValue = new JsonData(); jTmplMsgDataValue["value"] = "您的FruitU会员积分信息变更如下"; jTmplMsgDataValue["color"] = MSG_BODY_COLOR; jTmplMsgData["first"] = jTmplMsgDataValue; jTmplMsgDataValue = new JsonData(); jTmplMsgDataValue["value"] = po.Purchaser.NickName; jTmplMsgDataValue["color"] = MSG_BODY_COLOR; jTmplMsgData["keyword1"] = jTmplMsgDataValue; jTmplMsgDataValue = new JsonData(); jTmplMsgDataValue["value"] = "微信用户"; jTmplMsgDataValue["color"] = MSG_BODY_COLOR; jTmplMsgData["keyword2"] = jTmplMsgDataValue; jTmplMsgDataValue = new JsonData(); jTmplMsgDataValue["value"] = string.Format("本次消费增加{0}积分,使用{1}积分", e.increasedMemberPoints, e.usedMemberPoints); jTmplMsgDataValue["color"] = MSG_BODY_COLOR; jTmplMsgData["keyword3"] = jTmplMsgDataValue; jTmplMsgDataValue = new JsonData(); jTmplMsgDataValue["value"] = string.Format("{0}积分(={1}元)", e.newMemberPoints, (decimal)e.newMemberPoints / Config.MemberPointsExchangeRate); jTmplMsgDataValue["color"] = MSG_HEAD_COLOR; jTmplMsgData["keyword4"] = jTmplMsgDataValue; jTmplMsgDataValue = new JsonData(); jTmplMsgDataValue["value"] = "在FruitU页面中分享给好友或朋友圈,好友消费后您有100积分(5元)奖励哦,现在就分享吧!"; jTmplMsgDataValue["color"] = MSG_BODY_COLOR; jTmplMsgData["remark"] = jTmplMsgDataValue; jTmplMsg["data"] = jTmplMsgData; //发送模板消息 jRet = SendTmplMsg(listReceiver, jTmplMsg); //如果此订单有推荐人,且推荐人获得了积分奖励,则也给推荐人发送积分奖励消息 if (po.Agent != null && !string.IsNullOrEmpty(po.Agent.OpenID) && po.Purchaser.OpenID != po.Agent.OpenID && e.agentNewMemberPoints != -1) { WeChatUser wxAgent = WeChatUserDAO.FindUserByOpenID(po.Agent.OpenID); if (wxAgent != null) { listReceiver = new List <string>(new string[] { po.Agent.OpenID }); //构造模板消息 jTmplMsg = new JsonData(); jTmplMsgData = new JsonData(); jTmplMsg["touser"] = string.Empty; jTmplMsg["template_id"] = TMPL_MEMBER_POINTS_NOTIFY; jTmplMsg["url"] = @"http://mahui.me/UserCenter.aspx"; jTmplMsg["topcolor"] = MSG_HEAD_COLOR; jTmplMsgDataValue = new JsonData(); jTmplMsgDataValue["value"] = string.Format("您推荐好友“{0}”消费,获得了积分奖励哦!", po.Purchaser.NickName); jTmplMsgDataValue["color"] = MSG_BODY_COLOR; jTmplMsgData["first"] = jTmplMsgDataValue; jTmplMsgDataValue = new JsonData(); jTmplMsgDataValue["value"] = wxAgent.NickName; jTmplMsgDataValue["color"] = MSG_BODY_COLOR; jTmplMsgData["keyword1"] = jTmplMsgDataValue; jTmplMsgDataValue = new JsonData(); jTmplMsgDataValue["value"] = "微信用户"; jTmplMsgDataValue["color"] = MSG_BODY_COLOR; jTmplMsgData["keyword2"] = jTmplMsgDataValue; jTmplMsgDataValue = new JsonData(); jTmplMsgDataValue["value"] = string.Format("本次推荐奖励{0}积分", 100); jTmplMsgDataValue["color"] = MSG_BODY_COLOR; jTmplMsgData["keyword3"] = jTmplMsgDataValue; jTmplMsgDataValue = new JsonData(); jTmplMsgDataValue["value"] = string.Format("{0}积分(={1}元)", e.agentNewMemberPoints, (decimal)e.agentNewMemberPoints / Config.MemberPointsExchangeRate); jTmplMsgDataValue["color"] = MSG_HEAD_COLOR; jTmplMsgData["keyword4"] = jTmplMsgDataValue; jTmplMsgDataValue = new JsonData(); jTmplMsgDataValue["value"] = "如有疑问,请及时与FruitU微信客服联系"; jTmplMsgDataValue["color"] = MSG_BODY_COLOR; jTmplMsgData["remark"] = jTmplMsgDataValue; jTmplMsg["data"] = jTmplMsgData; //发送模板消息 jRet = SendTmplMsg(listReceiver, jTmplMsg); } } } catch (Exception ex) { Log.Error("SendMsgOnMemberPoints", ex.Message); throw ex; } if (jRet != null) { Log.Info("SendMsgOnMemberPoints", jRet.ToJson()); } }