public CustomJsonResult GetCardList(string promoteId) { LogUtil.Info("用户:" + this.CurrentUserId + ",领取卡券"); List <WxCard> cardList = new List <WxCard>(); string userId = this.CurrentUserId; var promoteUserCoupons = CurrentDb.ClientCoupon.Where(m => m.PromoteId == promoteId && m.ClientId == this.CurrentUserId).ToList(); var promoteUserCouponsByBuyCount = promoteUserCoupons.Where(m => m.IsBuy == true).Count(); if (promoteUserCouponsByBuyCount == 0) { return(new CustomJsonResult(ResultType.Failure, ResultCode.Failure, "未购买卡券,不能操作!", cardList)); } var promoteUser = CurrentDb.PromoteUser.Where(m => m.PromoteId == promoteId && m.ClientId == this.CurrentUserId).FirstOrDefault(); if (promoteUser == null) { return(new CustomJsonResult(ResultType.Failure, ResultCode.FormImperfect, "请先完成信息", cardList)); } if (string.IsNullOrEmpty(promoteUser.CtName)) { return(new CustomJsonResult(ResultType.Failure, ResultCode.FormImperfect, "请先完成信息", cardList)); } if (promoteUserCoupons.Count > 0) { string api_ticket = SdkFactory.Wx.Instance().GetCardApiTicket(); LogUtil.Info("CardApiTicket:" + api_ticket); foreach (var item in promoteUserCoupons) { string timestamp = CommonUtil.GetTimeStamp(); string nonce_str = CommonUtil.GetNonceStr(); string card_id = item.WxCouponId; string code = ""; string openid = ""; Dictionary <string, string> sParams = new Dictionary <string, string>(); sParams.Add("nonce_str", nonce_str); sParams.Add("timestamp", timestamp); sParams.Add("card_id", card_id); sParams.Add("code", ""); sParams.Add("openid", ""); //sParams.Add("outer_id", outer_id); sParams.Add("api_ticket", api_ticket); LogUtil.Info("api_ticket:" + api_ticket); LogUtil.Info("timestamp:" + timestamp); LogUtil.Info("nonce_str:" + nonce_str); LogUtil.Info("card_id:" + card_id); string signature = Lumos.WeiXinSdk.CommonUtil.MakeCardSign(sParams); LogUtil.Info("signature:" + signature); WxCardExt cardExt = new WxCardExt(); cardExt.code = code; cardExt.openid = openid; cardExt.timestamp = timestamp; cardExt.signature = signature; cardExt.nonce_str = nonce_str; WxCard card = new WxCard(); card.cardId = card_id; card.cardExt = Newtonsoft.Json.JsonConvert.SerializeObject(cardExt); string decryptCode = item.WxCouponDecryptCode; if (string.IsNullOrEmpty(item.WxCouponDecryptCode)) { if (!string.IsNullOrEmpty(item.WxCouponEncryptCode)) { decryptCode = SdkFactory.Wx.Instance().CardCodeDecrypt(item.WxCouponEncryptCode); } } card.code = decryptCode; cardList.Add(card); } LogUtil.Info("cardList:" + Newtonsoft.Json.JsonConvert.SerializeObject(cardList)); } cardList = cardList.Where(m => m.cardId != null).ToList(); return(new CustomJsonResult(ResultType.Success, ResultCode.Success, "", cardList)); }
/// <summary> /// 根据CardID获取微信卡券的详细信息 /// </summary> /// <param name="cardID">微信卡券ID</param> /// <returns></returns> public static WxCard GetCard(string cardID) { WxCard wxCard = null; try { JsonData jCardReq = new JsonData(), jCardInfo, jBaseInfo = null; jCardReq["card_id"] = cardID; string getCardUrl = GET_CARD_API + WxJSAPI.GetAccessToken(); string cardInfo = HttpService.Post(jCardReq.ToJson(), getCardUrl, false, Config.WeChatAPITimeout); jCardInfo = JsonMapper.ToObject(cardInfo); if (jCardInfo["errcode"].ToString() == "0" && jCardInfo["errmsg"].ToString() == "ok") { wxCard = new WxCard(); switch (jCardInfo["card"]["card_type"].ToString().ToUpper()) { //代金券 case "CASH": JsonData jCash = jCardInfo["card"]["cash"]; jBaseInfo = jCash["base_info"]; wxCard.CardType = WxCardType.CASH; decimal leastCost, reduceCost; //代金券减免金额 if (jCash.Keys.Contains("reduce_cost")) { if (decimal.TryParse(jCash["reduce_cost"].ToString(), out reduceCost)) { wxCard.ReduceCost = reduceCost / 100; } else { wxCard.ReduceCost = 0; } } else { wxCard.ReduceCost = 0; } //代金券起用金额 if (jCash.Keys.Contains("advanced_info") && jCash["advanced_info"].Keys.Contains("use_condition") && jCash["advanced_info"]["use_condition"].Keys.Contains("least_cost")) { if (decimal.TryParse(jCash["advanced_info"]["use_condition"]["least_cost"].ToString(), out leastCost)) { wxCard.LeastCost = leastCost / 100; } else { wxCard.LeastCost = 0; } } else { //无门槛代金券没有起用金额字段least_cost wxCard.LeastCost = 0; } break; //折扣券 case "DISCOUNT": JsonData jDiscount = jCardInfo["card"]["discount"]; jBaseInfo = jDiscount["base_info"]; wxCard.CardType = WxCardType.DISCOUNT; int discount; if (int.TryParse(jDiscount["discount"].ToString(), out discount)) { wxCard.Discount = discount; } else { wxCard.Discount = 0; } break; //团购券 case "GROUPON": JsonData jGroupon = jCardInfo["card"]["groupon"]; jBaseInfo = jGroupon["base_info"]; wxCard.CardType = WxCardType.GROUPON; wxCard.DealDetail = jGroupon["deal_detail"].ToString(); break; //礼品券 case "GIFT": JsonData jGift = jCardInfo["card"]["gift"]; jBaseInfo = jGift["base_info"]; wxCard.CardType = WxCardType.GIFT; wxCard.Gift = jGift["gift"].ToString(); break; //通用券 case "GENERAL_COUPON": JsonData jGeneralCoupon = jCardInfo["card"]["general_coupon"]; jBaseInfo = jGeneralCoupon["base_info"]; wxCard.CardType = WxCardType.GENERAL_COUPON; break; //会员卡 case "MEMBER_CARD": JsonData jMemberCard = jCardInfo["card"]["member_card"]; jBaseInfo = jMemberCard["base_info"]; wxCard.CardType = WxCardType.MEMBER_CARD; //wxCard.SupplyBalance = jMemberCard["supply_balance"].ToString() == "true" ? true : false; //wxCard.SupplyBonus = jMemberCard["supply_bonus"].ToString() == "true" ? true : false; //wxCard.BonusCleared = jMemberCard["bonus_cleared"].ToString(); //wxCard.BonusRules = jMemberCard["bonus_rules"].ToString(); //wxCard.BalanceRules = jMemberCard["balance_rules"].ToString(); //wxCard.Prerogative = jMemberCard["prerogative"].ToString(); //wxCard.BindOldCardUrl = jMemberCard["bind_old_card_url"].ToString(); //wxCard.ActivateUrl = jMemberCard["activate_url"].ToString(); break; //景点门票 case "SCENIC_TICKET": JsonData jScenicTicket = jCardInfo["card"]["scenic_ticket"]; jBaseInfo = jScenicTicket["base_info"]; wxCard.CardType = WxCardType.SCENIC_TICKET; break; //电影票 case "MOVIE_TICKET": JsonData jMovieTicket = jCardInfo["card"]["movie_ticket"]; jBaseInfo = jMovieTicket["base_info"]; wxCard.CardType = WxCardType.MOVIE_TICKET; break; //飞机票 case "BOARDING_PASS": JsonData jBoardingPass = jCardInfo["card"]["boarding_pass"]; jBaseInfo = jBoardingPass["base_info"]; wxCard.CardType = WxCardType.BOARDING_PASS; break; //会议门票 case "MEETING_TICKET": JsonData jMeetingTicket = jCardInfo["card"]["meeting_ticket"]; jBaseInfo = jMeetingTicket["base_info"]; wxCard.CardType = WxCardType.MEETING_TICKET; break; //汽车票 case "BUS_TICKET": JsonData jBusTicket = jCardInfo["card"]["bus_ticket"]; jBaseInfo = jBusTicket["base_info"]; wxCard.CardType = WxCardType.BUS_TICKET; break; default: throw new Exception("未知的微信卡券类型:" + jCardInfo["card"]["card_type"].ToString()); } if (jBaseInfo != null) { wxCard.CardID = cardID; wxCard.LogoUrl = jBaseInfo["logo_url"].ToString(); wxCard.BrandName = jBaseInfo["brand_name"].ToString(); wxCard.Title = jBaseInfo["title"].ToString(); wxCard.SubTitle = jBaseInfo["sub_title"].ToString(); wxCard.CanShare = jBaseInfo["can_share"].ToString() == "true" ? true : false; wxCard.CanGiveFriend = jBaseInfo["can_give_friend"].ToString() == "true" ? true : false; int getLimit, quantity, totalQuantity; if (int.TryParse(jBaseInfo["get_limit"].ToString(), out getLimit)) { wxCard.GetLimit = getLimit; } else { wxCard.GetLimit = 1; } if (int.TryParse(jBaseInfo["sku"]["quantity"].ToString(), out quantity)) { wxCard.Quantity = quantity; } else { wxCard.Quantity = 0; } if (int.TryParse(jBaseInfo["sku"]["total_quantity"].ToString(), out totalQuantity)) { wxCard.TotalQuantity = totalQuantity; } else { wxCard.TotalQuantity = 0; } switch (jBaseInfo["code_type"].ToString().ToUpper()) { case "CODE_TYPE_TEXT": wxCard.CodeType = WxCodeType.CODE_TYPE_TEXT; break; case "CODE_TYPE_BARCODE": wxCard.CodeType = WxCodeType.CODE_TYPE_BARCODE; break; case "CODE_TYPE_QRCODE": wxCard.CodeType = WxCodeType.CODE_TYPE_QRCODE; break; case "CODE_TYPE_ONLY_QRCODE": wxCard.CodeType = WxCodeType.CODE_TYPE_ONLY_QRCODE; break; case "CODE_TYPE_ONLY_BARCODE": wxCard.CodeType = WxCodeType.CODE_TYPE_ONLY_BARCODE; break; case "CODE_TYPE_NONE": wxCard.CodeType = WxCodeType.CODE_TYPE_NONE; break; } switch (jBaseInfo["status"].ToString().ToUpper()) { case "CARD_STATUS_NOT_VERIFY": wxCard.Status = CardStatus.CARD_STATUS_NOT_VERIFY; break; case "CARD_STATUS_VERIFY_FAIL": wxCard.Status = CardStatus.CARD_STATUS_VERIFY_FAIL; break; case "CARD_STATUS_VERIFY_OK": wxCard.Status = CardStatus.CARD_STATUS_VERIFY_OK; break; case "CARD_STATUS_USER_DELETE": wxCard.Status = CardStatus.CARD_STATUS_USER_DELETE; break; case "CARD_STATUS_DISPATCH": wxCard.Status = CardStatus.CARD_STATUS_DISPATCH; break; } switch (jBaseInfo["date_info"]["type"].ToString().ToUpper()) { case "DATE_TYPE_FIX_TIME_RANGE": wxCard.DateType = AvailableDateType.DATE_TYPE_FIX_TIME_RANGE; wxCard.BeginTime = UtilityHelper.TimestampToDateTime(jBaseInfo["date_info"]["begin_timestamp"].ToString()); wxCard.EndTime = UtilityHelper.TimestampToDateTime(jBaseInfo["date_info"]["end_timestamp"].ToString()); break; case "DATE_TYPE_FIX_TERM": wxCard.DateType = AvailableDateType.DATE_TYPE_FIX_TERM; int fixedTerm, fixedBeginTerm; if (int.TryParse(jBaseInfo["date_info"]["fixed_term"].ToString(), out fixedTerm)) { wxCard.FixedTerm = fixedTerm; } else { wxCard.FixedTerm = 0; } if (int.TryParse(jBaseInfo["date_info"]["fixed_begin_term"].ToString(), out fixedBeginTerm)) { wxCard.FixedBeginTerm = fixedBeginTerm; } else { wxCard.FixedBeginTerm = 0; } break; case "DATE_TYPE_PERMANENT": wxCard.DateType = AvailableDateType.DATE_TYPE_PERMANENT; break; } } else { throw new Exception("未能获取微信卡券base_info"); } } else { throw new Exception("errcode:" + jCardInfo["errcode"].ToString() + ";" + "errmsg:" + jCardInfo["errmsg"].ToString()); } } catch (Exception ex) { Log.Error("WxCard", ex.Message); return(null); } return(wxCard); }
/// <summary> /// 创建微信会员卡卡套 /// </summary> /// <param name="logo_url">会员卡Logo</param> /// <param name="brand_name">商户名字,字数上限为12个汉字。 </param> /// <param name="title">卡券名,字数上限为9个汉字</param> /// <param name="appOriginalId">小程序原始Id</param> /// <param name="access_token">小程序access_token</param> public static CreateCardResult AddVipWxCard(string logo_url, string brand_name, string title, string appOriginalId, string access_token, int PageType = 22) { //默认专业版的 string center_app_brand_pass = "******"; //专业版 个人中心 string custom_app_brand_pass = "******"; //首页 专业版 switch (PageType) { case (int)TmpType.小程序电商模板: center_app_brand_pass = "******"; //个人中心页面 break; case (int)TmpType.小程序餐饮模板: center_app_brand_pass = "******"; //个人中心页面 custom_app_brand_pass = "******"; //首页 break; case (int)TmpType.小程序足浴模板: center_app_brand_pass = "******"; //个人中心页面 custom_app_brand_pass = "******"; //首页 break; case (int)TmpType.小程序多门店模板: center_app_brand_pass = "******"; //个人中心页面 break; case (int)TmpType.小未平台子模版: center_app_brand_pass = "******"; //个人中心页面 custom_app_brand_pass = "******"; //首页 break; } base_info _base_info = new base_info(); _base_info.logo_url = logo_url; _base_info.code_type = "CODE_TYPE_TEXT"; _base_info.brand_name = brand_name; _base_info.title = title; _base_info.color = "Color010"; _base_info.center_title = "储值余额"; _base_info.center_app_brand_user_name = $"{appOriginalId}@app"; _base_info.center_app_brand_pass = center_app_brand_pass; _base_info.custom_url_name = "小程序"; _base_info.custom_app_brand_user_name = $"{appOriginalId}@app"; _base_info.custom_app_brand_pass = custom_app_brand_pass; _base_info.custom_url_sub_title = "点击进入"; //_base_info.promotion_url_name = "门店地址"; //_base_info.promotion_app_brand_user_name = $"{appOriginalId}@app"; //_base_info.promotion_app_brand_pass = "******"; _base_info.description = $"{brand_name}会员卡"; _base_info.notice = "使用时向服务员出示此券"; Card _card = new Card(); WxCard wxCard = new WxCard(); member_card _member_Card = new member_card(); _member_Card.auto_activate = true; _member_Card.base_info = _base_info; _member_Card.custom_field1 = new custom_fieldItem { name = "储值余额", }; _member_Card.custom_field2 = new custom_fieldItem { name = "累计消费", }; _member_Card.custom_field3 = new custom_fieldItem { name = "会员权益", }; _member_Card.prerogative = "更快更便捷的了解积分余额等信息"; _card.member_card = _member_Card; wxCard.card = _card; string json = JsonConvert.SerializeObject(wxCard); string result = Utility.IO.Context.PostData($"https://api.weixin.qq.com/card/create?access_token={access_token}", json); CreateCardResult _createCardResult = new CreateCardResult(); // _createCardResult.errmsg = json; if (string.IsNullOrEmpty(result)) { return(_createCardResult); } _createCardResult = JsonConvert.DeserializeObject <CreateCardResult>(result); return(_createCardResult); }