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));
        }
Exemple #2
0
    /// <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);
    }
Exemple #3
0
        /// <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);
        }