示例#1
0
文件: WxCard.cs 项目: mahui-cn/FruitU
    /// <summary>
    /// 核销Code,是核销卡券的唯一接口,开发者可以调用当前接口将用户的优惠券进行核销,该过程不可逆。
    /// 1.仅支持核销有效状态的卡券,若卡券处于异常状态,均不可核销。(异常状态包括:卡券删除、未生效、过期、转赠中、转赠退回、失效)
    /// 2.自定义Code码(use_custom_code为true)的优惠券,在code被核销时,必须调用此接口。用于将用户客户端的code状态变更。自定义code的卡券调用接口时, post数据中需包含card_id,否则报invalid serial code,非自定义code不需上报。
    /// </summary>
    /// <param name="code"></param>
    /// <param name="cardID"></param>
    /// <returns></returns>
    public static bool ConsumeCode(string code, string cardID = null)
    {
        bool isConsumed = false;

        try
        {
            JsonData jCardReq = new JsonData(), jCardInfo;
            jCardReq["code"] = code;
            if (!string.IsNullOrEmpty(cardID))
            {
                jCardReq["card_id"] = cardID;
            }
            string getCardUrl = CONSUME_CODE_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")
            {
                isConsumed = true;
            }
            else
            {
                isConsumed = false;
            }
        }
        catch (Exception ex)
        {
            Log.Error("WxCard", ex.Message);
            isConsumed = false;
        }

        return(isConsumed);
    }
示例#2
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["WxUser"] != null)
        {
            WeChatUser wxUser = Session["WxUser"] as WeChatUser;
            string     jsTicket, jsSign, timestamp, nonceStr, url;

            url      = Request.Url.ToString().Split('#')[0];
            jsTicket = WxJSAPI.GetJsAPITicket();
            jsSign   = WxJSAPI.MakeJsAPISign(jsTicket, url, out nonceStr, out timestamp);

            //处理用户的推荐人
            string agentOpenID = Request.QueryString["AgentOpenID"];
            if (!string.IsNullOrEmpty(agentOpenID) && agentOpenID != wxUser.OpenID)
            {
                wxUser.AgentOpenID = agentOpenID;
            }

            if (string.IsNullOrEmpty(Page.Title))
            {
                Page.Title = Config.SiteTitle;
            }
            else
            {
                Page.Title = Config.SiteTitle + " -- " + Page.Title;
            }

            //注册JS变量openID,用于用户分享页面时带上自己的OpenID
            ScriptManager.RegisterStartupScript(Page, this.GetType(), "openID", string.Format("var openID = '{0}';", wxUser.OpenID), true);
            //注册JS变量wxJsApiParam,用于调用微信的JS SDK
            ScriptManager.RegisterStartupScript(Page, this.GetType(), "wxJSAPI", string.Format("var wxJsApiParam = {{appId:'{0}', timestamp:'{1}', nonceStr:'{2}', signature:'{3}'}};", Config.APPID, timestamp, nonceStr, jsSign), true);
            //注册JS变量webConfigServer,用于用户分享页面时设置页面title等信息
            ScriptManager.RegisterStartupScript(Page, this.GetType(), "webConfig", string.Format("var webConfigServer = {{siteDomain:'{0}',siteTitle:'{1}',siteDesc:'{2}',siteKeywords:'{3}',siteIcon:'{4}',siteCopyrights:'{5}',defaultImg:'{6}'}};", Request.Url.Scheme + "://" + Request.Url.Host, Config.SiteTitle, Config.SiteDesc, Config.SiteKeywords, Config.SiteIcon, Config.SiteCopyrights, Config.DefaultImg), true);
        }
    }
示例#3
0
文件: WxCard.cs 项目: mahui-cn/FruitU
    /// <summary>
    /// 微信卡券CODE解码
    /// 应用场景:
    /// 1.商家获取choos_card_info后,将card_id和encrypt_code字段通过解码接口,获取真实code。
    /// 2.卡券内跳转外链的签名中会对code进行加密处理,通过调用解码接口获取真实code。
    /// 注意事项:
    /// 1.只能解码本公众号卡券获取的加密code。
    /// 2.开发者若从url上获取到加密code,请注意先进行urldecode,否则报错。
    /// 3.encrypt_code是卡券的code码经过加密处理得到的加密code码,与code一一对应。
    /// 4.开发者只能解密本公众号的加密code,否则报错。
    /// </summary>
    /// <param name="encryptCode"></param>
    /// <returns></returns>
    public static string DecryptCode(string encryptCode)
    {
        string decryptCode = string.Empty;

        try
        {
            JsonData jCardReq = new JsonData(), jDecryptCode;
            jCardReq["encrypt_code"] = encryptCode;
            string decryptCodeUrl = DECRYPT_CODE_API + WxJSAPI.GetAccessToken();
            string cardInfo       = HttpService.Post(jCardReq.ToJson(), decryptCodeUrl, false, Config.WeChatAPITimeout);
            jDecryptCode = JsonMapper.ToObject(cardInfo);
            if (jDecryptCode["errcode"].ToString() == "0" && jDecryptCode["errmsg"].ToString() == "ok")
            {
                decryptCode = jDecryptCode["code"].ToString();
            }
            else
            {
                throw new Exception("errcode:" + jDecryptCode["errcode"].ToString() + ";" + "errmsg:" + jDecryptCode["errmsg"].ToString());
            }
        }
        catch (Exception ex)
        {
            Log.Error("WxCard", ex.Message);
        }

        return(decryptCode);
    }
示例#4
0
    protected void Page_Load(object sender, EventArgs e)
    {
        string jsTicket, jsSign, timestamp, nonceStr, url;

        url      = Request.Url.ToString().Split('#')[0];
        jsTicket = WxJSAPI.GetJsAPITicket();
        jsSign   = WxJSAPI.MakeJsAPISign(jsTicket, url, out nonceStr, out timestamp);

        //向前端页面注册JS变量,用于调用微信客户端JS-API
        ScriptManager.RegisterStartupScript(Page, this.GetType(), "wxJSAPI", string.Format("var appId = '{0}', timestamp = '{1}', nonceStr = '{2}', signature = '{3}';", Config.APPID, timestamp, nonceStr, jsSign), true);
    }
示例#5
0
    /// <summary>
    /// 发送模板消息
    /// </summary>
    /// <param name="listReceiver">消息接收者</param>
    /// <param name="jTmplMsg">模板消息体</param>
    /// <returns>微信模板消息返回值</returns>
    public static JsonData SendTmplMsg(List <string> listReceiver, JsonData jTmplMsg)
    {
        string   recvMsg;
        bool     isSuccess = false;
        JsonData jRet = new JsonData(), jRecv;
        int      tryTimes = 0;

        listReceiver.ForEach(receiver =>
        {
            jTmplMsg["touser"] = receiver;

            do
            {
                //调用微信模板消息接口,并获取返回报文
                Log.Debug("WxTmplMsg", "SendOrderMsg request" + jTmplMsg.ToJson());
                recvMsg = HttpService.Post(jTmplMsg.ToJson(), WxTmplMsg.WxTmplMsgUrl + WxJSAPI.GetAccessToken(), false, Config.WeChatAPITimeout);
                Log.Debug("WxTmplMsg", "SendOrderMsg response" + recvMsg);

                if (!string.IsNullOrEmpty(recvMsg))
                {
                    jRecv = JsonMapper.ToObject(recvMsg);
                    if (jRecv.Keys.Contains("errcode") && jRecv["errcode"] != null)
                    {
                        switch (jRecv["errcode"].ToString())
                        {
                        case "0":
                            isSuccess = true;
                            break;

                        case "40001":
                        case "40002":
                            isSuccess = false;
                            WxJSAPI.RefreshAccessToken();
                            break;

                        default:
                            isSuccess = false;
                            break;
                        }
                    }

                    jRet.Add(jRecv);
                }

                tryTimes++;
            } while (!isSuccess && tryTimes < 10);
        });

        return(jRet);
    }
示例#6
0
文件: WxCard.cs 项目: mahui-cn/FruitU
    /// <summary>
    /// 获取用户已领取卡券,属于该appid下所有可用卡券,包括正常状态和未生效状态。
    /// 只能获取普通优惠券,不能获取“朋友的券”
    /// </summary>
    /// <param name="openID"></param>
    /// <param name="cardID"></param>
    /// <returns></returns>
    public static List <WxCard> GetCardList(string openID, string cardID = null)
    {
        List <WxCard> cardList = new List <WxCard>();
        WxCard        wxCard;

        try
        {
            JsonData jCard = new JsonData(), jCardInfo;
            jCard["openid"] = openID;
            if (!string.IsNullOrEmpty(cardID))
            {
                jCard["card_id"] = cardID;
            }
            string getCardListUrl = GET_CARD_LIST_API + WxJSAPI.GetAccessToken();
            string recvMsg        = HttpService.Post(jCard.ToJson(), getCardListUrl, false, Config.WeChatAPITimeout);
            jCardInfo = JsonMapper.ToObject(recvMsg);
            if (jCardInfo.Keys.Contains("errcode") && jCardInfo["errcode"].ToString() == "0" && jCardInfo.Keys.Contains("errmsg") && jCardInfo["errmsg"].ToString() == "ok")
            {
                if (jCardInfo.Keys.Contains("card_list") && jCardInfo["card_list"].IsArray)
                {
                    for (int i = 0; i < jCardInfo["card_list"].Count; i++)
                    {
                        wxCard = GetCard(jCardInfo["card_list"][i]["card_id"].ToString());
                        if (wxCard != null)
                        {
                            wxCard.Code = jCardInfo["card_list"][i]["code"].ToString();
                        }

                        cardList.Add(wxCard);
                    }
                }
            }
            else
            {
                throw new Exception("errcode:" + jCardInfo["errcode"].ToString() + ";" + "errmsg:" + jCardInfo["errmsg"].ToString());
            }
        }
        catch (Exception ex)
        {
            Log.Error("WxCard", ex.Message);
        }
        return(cardList);
    }
示例#7
0
    protected void Page_Load(object sender, EventArgs e)
    {
        string jsTicket, jsSign, timestamp, nonceStr, url;

        url      = Request.Url.ToString().Split('#')[0];
        jsTicket = WxJSAPI.GetJsAPITicket();
        jsSign   = WxJSAPI.MakeJsAPISign(jsTicket, url, out nonceStr, out timestamp);

        //向前端页面注册JS变量,用于调用微信客户端JS-API
        ScriptManager.RegisterStartupScript(Page, this.GetType(), "wxJSAPI", string.Format("var wxJsApiParam={{appId:'{0}', timestamp:'{1}', nonceStr:'{2}', signature:'{3}'}}, pageSize={4};", Config.APPID, timestamp, nonceStr, jsSign, Config.ProductListPageSize), true);

        List <Category> categoryList;
        List <Fruit>    fruitList;
        FruitImg        mainImg;

        //从每个商品类别中选取第一个商品的图片,作为轮播图图片
        categoryList = Category.FindAllCategory();
        categoryList.ForEach(c =>
        {
            fruitList = Fruit.FindFruitByCategoryID(c.ID);
            if (fruitList != null && fruitList.Count > 0)
            {
                mainImg = fruitList[0].FruitImgList.Find(img =>
                {
                    if (img.MainImg)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                });
                if (mainImg != default(FruitImg))
                {
                    this.divSlides.InnerHtml += string.Format("<div><img u=\"image\" src=\"images/{0}\" alt=\"{1}:{2}\" /></div>", mainImg.ImgName, fruitList[0].FruitName, fruitList[0].FruitDesc);
                }
            }
        });
    }
示例#8
0
文件: WxCard.cs 项目: mahui-cn/FruitU
    /// <summary>
    /// 查询Code
    /// </summary>
    /// <param name="cardID"></param>
    /// <param name="code"></param>
    /// <param name="checkConsume">是否校验code核销状态</param>
    /// <returns></returns>
    public static UserCardStatus GetCode(string cardID, string code, bool checkConsume)
    {
        UserCardStatus userCardStatus = UserCardStatus.NORMAL;

        try
        {
            JsonData jCardReq = new JsonData(), jCardInfo;
            jCardReq["card_id"]       = cardID;
            jCardReq["code"]          = code;
            jCardReq["check_consume"] = checkConsume;
            string getCardUrl = GET_CODE_API + WxJSAPI.GetAccessToken();
            string cardInfo   = HttpService.Post(jCardReq.ToJson(), getCardUrl, false, Config.WeChatAPITimeout);
            jCardInfo = JsonMapper.ToObject(cardInfo);
            if (checkConsume)
            {
                if (jCardInfo["errcode"].ToString() == "0" && jCardInfo["errmsg"].ToString() == "ok")
                {
                    switch (jCardInfo["user_card_status"].ToString().ToUpper())
                    {
                    case "NORMAL":
                        userCardStatus = UserCardStatus.NORMAL;
                        break;

                    case "CONSUMED":
                        userCardStatus = UserCardStatus.CONSUMED;
                        break;

                    case "EXPIRE":
                        userCardStatus = UserCardStatus.EXPIRE;
                        break;

                    case "GIFTING":
                        userCardStatus = UserCardStatus.GIFTING;
                        break;

                    case "GIFT_TIMEOUT":
                        userCardStatus = UserCardStatus.GIFT_TIMEOUT;
                        break;

                    case "DELETE":
                        userCardStatus = UserCardStatus.DELETE;
                        break;

                    case "UNAVAILABLE":
                        userCardStatus = UserCardStatus.UNAVAILABLE;
                        break;

                    default:
                        userCardStatus = UserCardStatus.INVALID_SERIAL_CODE;
                        break;
                    }
                }
                else
                {
                    userCardStatus = UserCardStatus.INVALID_SERIAL_CODE;
                }
            }
            else
            {
                switch (jCardInfo["user_card_status"].ToString().ToUpper())
                {
                case "NORMAL":
                    userCardStatus = UserCardStatus.NORMAL;
                    break;

                case "CONSUMED":
                    userCardStatus = UserCardStatus.CONSUMED;
                    break;

                case "EXPIRE":
                    userCardStatus = UserCardStatus.EXPIRE;
                    break;

                case "GIFTING":
                    userCardStatus = UserCardStatus.GIFTING;
                    break;

                case "GIFT_TIMEOUT":
                    userCardStatus = UserCardStatus.GIFT_TIMEOUT;
                    break;

                case "DELETE":
                    userCardStatus = UserCardStatus.DELETE;
                    break;

                case "UNAVAILABLE":
                    userCardStatus = UserCardStatus.UNAVAILABLE;
                    break;

                default:
                    userCardStatus = UserCardStatus.INVALID_SERIAL_CODE;
                    break;
                }
            }
        }
        catch (Exception ex)
        {
            Log.Error("WxCard", ex.Message);
        }

        return(userCardStatus);
    }
示例#9
0
文件: WxCard.cs 项目: mahui-cn/FruitU
    /// <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);
    }
示例#10
0
    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);
        }
    }
示例#11
0
    /// <summary>
    /// 获取微信用户基本信息
    /// API参考:https://mp.weixin.qq.com/wiki/14/bb5031008f1494a59c6f71fa0f319c66.html
    /// </summary>
    /// <param name="wxUsers"></param>
    public static void RefreshWxUserInfo(List <WeChatUser> wxUsers)
    {
        string   wxUserInfoAPI = string.Format(@"https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token={0}", WxJSAPI.GetAccessToken());
        string   recvMsg;
        JsonData jUserList = new JsonData(), jUserInfoList = new JsonData(), jUser;

        jUserList["user_list"] = new JsonData();
        for (int i = 0; i < wxUsers.Count; i++)
        {
            jUser           = new JsonData();
            jUser["openid"] = wxUsers[i].OpenID;
            jUserList["user_list"].Add(jUser);

            //一次最多拉取100个用户的微信信息
            if (jUserList["user_list"].Count == 100 || i == (wxUsers.Count - 1))
            {
                recvMsg       = HttpService.Post(jUserList.ToJson(), wxUserInfoAPI, false, Config.WeChatAPITimeout);
                jUserInfoList = JsonMapper.ToObject(recvMsg);

                //用获取的信息刷新形参
                if (jUserInfoList != null && jUserInfoList.Keys.Contains("user_info_list") && jUserInfoList["user_info_list"].IsArray)
                {
                    //遍历拉取的微信用户JSON消息包,并刷新形参
                    for (int j = 0; j < jUserInfoList["user_info_list"].Count; j++)
                    {
                        if (jUserInfoList["user_info_list"][j].Keys.Contains("subscribe") && jUserInfoList["user_info_list"][j].Keys.Contains("openid"))
                        {
                            WeChatUser user = wxUsers.Find(wxUser =>
                            {
                                if (wxUser.OpenID == jUserInfoList["user_info_list"][j]["openid"].ToString())
                                {
                                    return(true);
                                }
                                return(false);
                            });

                            if (user != default(WeChatUser))
                            {
                                //此用户关注公众号,则返回详细信息
                                if (jUserInfoList["user_info_list"][j]["subscribe"].ToString() == "1")
                                {
                                    user.IsSubscribe = true;
                                    user.NickName    = jUserInfoList["user_info_list"][j].Keys.Contains("nickname") ? jUserInfoList["user_info_list"][j]["nickname"].ToString() : user.NickName;
                                    user.Sex         = jUserInfoList["user_info_list"][j].Keys.Contains("sex") ? (jUserInfoList["user_info_list"][j]["sex"].ToString() == "1" ? true : false) : user.Sex;
                                    user.Country     = jUserInfoList["user_info_list"][j].Keys.Contains("country") ? jUserInfoList["user_info_list"][j]["country"].ToString() : user.Country;
                                    user.Province    = jUserInfoList["user_info_list"][j].Keys.Contains("province") ? jUserInfoList["user_info_list"][j]["province"].ToString() : user.Province;
                                    user.City        = jUserInfoList["user_info_list"][j].Keys.Contains("city") ? jUserInfoList["user_info_list"][j]["city"].ToString() : user.City;
                                    user.HeadImgUrl  = jUserInfoList["user_info_list"][j].Keys.Contains("headimgurl") ? jUserInfoList["user_info_list"][j]["headimgurl"].ToString() : user.HeadImgUrl;
                                    user.UnionID     = jUserInfoList["user_info_list"][j].Keys.Contains("unionid") ? jUserInfoList["user_info_list"][j]["unionid"].ToString() : user.UnionID;
                                }
                                else
                                {
                                    user.IsSubscribe = false;
                                    user.UnionID     = jUserInfoList["user_info_list"][j].Keys.Contains("unionid") ? jUserInfoList["user_info_list"][j]["unionid"].ToString() : user.UnionID;
                                }
                            }
                        }
                    }
                }

                jUserList.Clear();
            }
        }
    }
示例#12
0
    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;
        }
    }