Exemple #1
0
        public QRCodeWxResponse CreateQRCode(string cardid)
        {
            var request = WeChatApiRequestBuilder.GenerateWxQRCodeUrl(this.WeChat.GetToken());

            return(request.GetResponseForJson <QRCodeWxResponse>((http) =>
            {
                http.Method = "POST";
                http.ContentType = "application/json; encoding=utf-8";
                var data = new
                {
                    action_name = "QR_CARD",
                    expire_seconds = 1800,
                    action_info = new
                    {
                        card = new
                        {
                            card_id = cardid,
                            code = CodeTypes.CODE_TYPE_QRCODE.ToString(),
                            openid = "",
                            is_unique_code = false,
                            outer_str = "13b",
                        }
                    }
                };
                using (var stream = http.GetRequestStream())
                {
                    var buffers = UTF8Encoding.UTF8.GetBytes(data.SerializeToJson());
                    stream.Write(buffers, 0, buffers.Length);
                    stream.Flush();
                }
                return http;
            }));
        }
Exemple #2
0
        public QueryCardCouponWxResponse QueryCardCouponOnWechat()
        {
            var request = WeChatApiRequestBuilder.GenerateQueryCardUrl(GetToken());

            //支持开发者拉出指定状态的卡券列表
            //CARD_STATUS_NOT_VERIFY”, 待审核 ;
            //“CARD_STATUS_VERIFY_FAIL”, 审核失败;
            //“CARD_STATUS_VERIFY_OK”, 通过审核;
            //“CARD_STATUS_DELETE”, 卡券被商户删除;
            //“CARD_STATUS_DISPATCH”, 在公众平台投放过的卡券;
            return(request.GetResponseForJson <QueryCardCouponWxResponse>((http) =>
            {
                var data = new
                {
                    offset = 0,
                    count = 100,
                    status_list = new string[]
                    {
                        "CARD_STATUS_NOT_VERIFY", "CARD_STATUS_VERIFY_FAIL", "CARD_STATUS_VERIFY_OK", "CARD_STATUS_DELETE", "CARD_STATUS_DISPATCH"
                    }
                };
                http.Method = "POST";
                http.ContentType = "application/json; encoding=utf-8";
                using (var stream = http.GetRequestStream())
                {
                    var body = data.SerializeToJson();
                    var buffers = UTF8Encoding.UTF8.GetBytes(body);
                    stream.Write(buffers, 0, buffers.Length);
                    stream.Flush();
                }
                return http;
            }));
        }
Exemple #3
0
        public WeChatUserInfo GetWxUser(string openid, string appid, string secret)
        {
            var request = WeChatApiRequestBuilder.GenreateQueryWxLoginUserUrl(openid, GetToken(appid, secret));
            var text    = request.GetUriContentDirectly();
            var result  = request.GetResponseForJson <WeChatUserInfo>();

            return(result);
        }
Exemple #4
0
        public IWxAuthorization GetSessionKey(string code, string appid, string secret)
        {
            var request = WeChatApiRequestBuilder.GenerateWxAuthRequestUrl(appid, code, secret);
            var text    = request.GetUriContentDirectly();
            var auth    = text.DeserializeToObject <WeChatAuthorization>(); // request.GetResponseForJson<WeChatAuthorization>();

            return(auth);
        }
Exemple #5
0
 public ApplyProtocolWxResponse GetApplyProtocol()
 {
     return(this.Cache.Get(CacheKey_ApplyProtocol, ctx =>
     {
         var apply = WeChatApiRequestBuilder.GenerateWxGetApplyProtocolUrl(GetToken())
                     .GetResponseForJson <ApplyProtocolWxResponse>();
         ctx.Monitor(this.Clock.When(TimeSpan.FromDays(15)));//默认过期时间为 7200秒
         return apply;
     }));
 }
Exemple #6
0
        public WxAccessToken GetAccessTokenByCode(string code)
        {
            var request = WeChatApiRequestBuilder.GenerateOAuth2ByCode(code);
            var token   = request.GetResponseForJson <WxAccessToken>();
            //根据openid 换回 unionid以及其他用户信息
            var queryLoginUser = WeChatApiRequestBuilder.GenreateQueryWxLoginUserUrl(token.OpenId, GetToken());

            token.LoginUser = queryLoginUser.GetResponseForJson <WxLoginUser>();
            return(token);
        }
Exemple #7
0
        public WxSession CreateWxSession(IWxAuthContext context)
        {
            var request    = WeChatApiRequestBuilder.GenerateWxAuthRequestUrl(context.AppId, context.Code, Constants.WxConfig.AppSecret);
            var auth       = request.GetResponseForJson <WeChatAuthorization>();
            var wechatUser = Decrypt <WeChatUserInfo>(context.Data, context.IV, auth.SessionKey);

            return(new WxSession()
            {
                LoginUser = context, Miniprogram = null, WeCharUser = wechatUser, Authorization = auth
            });
        }
Exemple #8
0
 public string GetToken(string appid, string appsecret)
 {
     return(this.Cache.Get(appid, ctx =>
     {
         var token = WeChatApiRequestBuilder.GenerateWxTokenRequestUrl(appid, appsecret).GetResponseForJson <AccessTokenWxResponse>();
         ctx.Monitor(this.Clock.When(TimeSpan.FromSeconds(token.Expiresin)));//默认过期时间为 7200秒
         if (token.HasError)
         {
             Logger.Error(token.ErrMsg);
         }
         return token.Token;
     }));
 }
Exemple #9
0
        private UploadMediaWxResponse UploadMaterial(string url, string name, byte[] buffers)
        {
            var response = url.GetResponseForJson <UploadMediaWxResponse>((http) =>
            {
                http.Method      = "POST";
                http.ContentType = "application/x-www-form-urlencoded";
                System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();
                http.CookieContainer     = cookieContainer;
                http.AllowAutoRedirect   = true;
                http.Method              = "POST";
                string boundary          = System.DateTime.UtcNow.Ticks.ToString("X"); // 随机分隔线
                http.ContentType         = "multipart/form-data;charset=utf-8;boundary=" + boundary;
                byte[] itemBoundaryBytes = System.Text.Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
                byte[] endBoundaryBytes  = System.Text.Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");

                //// TODO :need change default filename
                var sbHeader = new System.Text.StringBuilder(string.Format(
                                                                 "Content-Disposition:form-data;name=\"media\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n",
                                                                 @"Enjoy.jpg"));
                byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString());

                using (Stream postStream = http.GetRequestStream())
                {
                    postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
                    postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
                    postStream.Write(buffers, 0, buffers.Length);
                    postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
                    postStream.Flush();
                }
                return(http);
            });

            response.Value = response.MediaId ?? response.Url;
            if (string.IsNullOrEmpty(response.MediaId) == false)//if has mediaid
            {
                this.OS.CreateMediaDirectoryIfNotExits(Constants.Directory_Media_Protocol_ROOT);
                var mediaFileName = this.OS.WorkContext.HttpContext.Server.MapPath(string.Concat(Constants.Directory_Media_Protocol_ROOT, "/", response.MediaId, ".jpg"));
                if (File.Exists(mediaFileName))
                {
                    File.Delete(mediaFileName);
                }

                using (var stream = new FileStream(mediaFileName, FileMode.Create))
                {
                    stream.Write(buffers, 0, buffers.Length);
                    stream.Flush();
                }
            }
            response.Url = string.IsNullOrEmpty(response.MediaId) ? response.Url : WeChatApiRequestBuilder.GenerateImageUrlByMediaId(response.MediaId);
            return(response);
        }
Exemple #10
0
        public NormalWxResponse TestwhiteList(string[] wechatids)
        {
            var request = WeChatApiRequestBuilder.GenerateWxtestwhitelist(this.WeChat.GetToken());

            return(request.GetResponseForJson <NormalWxResponse>((http) =>
            {
                http.Method = "POST";
                http.ContentType = "application/json; encoding=utf-8";
                var data = new
                {
                    openid = new string[] { },
                    username = wechatids
                };
                return http;
            }));
        }
Exemple #11
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="submerchant"></param>
        /// <returns></returns>
        public WxResponseWapper <CreateSubmerchantResponse> CreateSubmerchant(WxRequestWapper <SubMerchant> submerchant)
        {
            var request = WeChatApiRequestBuilder.GenerateWxSubmerchantUrl(this.GetToken(), submerchant.Info.MerchantId == null);

            return(request.GetResponseForJson <WxResponseWapper <CreateSubmerchantResponse> >((http) =>
            {
                http.Method = "POST";
                http.ContentType = "application/json; encoding=utf-8";
                using (var stream = http.GetRequestStream())
                {
                    var body = submerchant.SerializeToJson();
                    var buffers = UTF8Encoding.UTF8.GetBytes(body);
                    stream.Write(buffers, 0, buffers.Length);
                    stream.Flush();
                }
                return http;
            }));
        }
Exemple #12
0
        public NormalWxResponse DeleteCardCoupon(string cardid)
        {
            var request = WeChatApiRequestBuilder.GenerateDeleteCardCoupon(GetToken());

            return(request.GetResponseForJson <NormalWxResponse>((http) =>
            {
                var data = new { card_id = cardid };
                http.Method = "POST";
                http.ContentType = "application/json; encoding=utf-8";
                using (var stream = http.GetRequestStream())
                {
                    var body = data.SerializeToJson();
                    var buffers = UTF8Encoding.UTF8.GetBytes(body);
                    stream.Write(buffers, 0, buffers.Length);
                    stream.Flush();
                }
                return http;
            }));
        }
Exemple #13
0
        public CreateCouponWxResponse Publish(long id)
        {
            var model   = this.GetCardCounpon(id);
            var request = string.IsNullOrEmpty(model.WxNo)
                ? WeChatApiRequestBuilder.GenerateWxCreateCardUrl(this.WeChat.GetToken())
                : WeChatApiRequestBuilder.GenerateWxUpdateCardUrl(this.WeChat.GetToken());
            ////TODO : update has some error
            var result = request.GetResponseForJson <CreateCouponWxResponse>((http) =>
            {
                http.Method      = "POST";
                http.ContentType = "application/json;encoding=utf-8";
                using (var stream = http.GetRequestStream())
                {
                    var json = string.IsNullOrEmpty(model.WxNo)
                        ? model.CardCoupon.GenreateCreatingWapper().SerializeToJson()
                        : model.CardCoupon.GenreateUpgradeWpper().SerializeToJson();
                    var buffers = UTF8Encoding.UTF8.GetBytes(json);
                    stream.Write(buffers, 0, buffers.Length);
                    stream.Flush();
                }
                return(http);
            });

            if (result.HasError == false)
            {
                model.State             = CardCouponStates.Approved;
                model.WxNo              = result.CardId;
                model.CardCoupon.CardId = result.CardId;
                if (model.Type == CardTypes.MEMBER_CARD)
                {
                    this.WeChat.SetMemberCardFieldIfActiveByWx(model.WxNo);
                }
                this.SaveOrUpdate(model);
            }
            else
            {
                model.State = CardCouponStates.PublishedError;
                this.SaveOrUpdate(model);
            }
            return(result);
        }
Exemple #14
0
        /// <summary>
        /// 提交审核
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        private void PushToWechat(MerchantModel model)
        {
            var request = WeChatApiRequestBuilder.GenerateWxSubmerchantUrl(this.WeChat.GetToken(), model.MerchantId == null);
            var wapper  = new WxRequestWapper <SubMerchant>();

            wapper.Info         = new SubMerchant(model);
            wapper.Info.EndTime = model.EndTime;
            var wxrep = this.WeChat.CreateSubmerchant(wapper);

            if (wxrep.HasError == false)
            {
                model.Status     = AuditStatus.CHECKING;
                model.MerchantId = wxrep.Info.MerchantId;
                model.ErrMsg     = string.Empty;
            }
            else
            {
                model.Status = AuditStatus.UnCommitted;
                model.ErrMsg = wxrep.ErrMsg;
            }
        }
Exemple #15
0
        public void SetMemberCardFieldIfActiveByWx(string cardid)
        {
            var request = WeChatApiRequestBuilder.GenerateMemberActiveUserform(GetToken());
            var result  = request.GetResponseForJson <NormalWxResponse>((http) =>
            {
                var data = new
                {
                    card_id = cardid,
                    //service_statement = new
                    //{
                    //    name = "会员守则",
                    //    url = "https://www.yourc.club/wap/statement"////TODO :需要完成 会员守则页面
                    //},
                    //bind_old_card = new
                    //{
                    //    name = "老会员绑定",
                    //    url = "https =//www.qq.com"
                    //},
                    required_form = new
                    {
                        can_modify           = false,
                        common_field_id_list = new string[] { "USER_FORM_INFO_FLAG_MOBILE" }
                    },
                    optional_form = new
                    {
                        can_modify           = false,
                        common_field_id_list = new string[] {
                            "USER_FORM_INFO_FLAG_NAME",
                            "USER_FORM_INFO_FLAG_SEX",
                            "USER_FORM_INFO_FLAG_BIRTHDAY"
                        }
                    }
                };
                http.Method      = "POST";
                http.ContentType = "application/json; encoding=utf-8";

                using (var stream = http.GetRequestStream())
                {
                    var body    = data.SerializeToJson();
                    var buffers = UTF8Encoding.UTF8.GetBytes(body);
                    stream.Write(buffers, 0, buffers.Length);
                    stream.Flush();
                }
                return(http);
            });

            /*
             * 字段值	描述
             * USER_FORM_INFO_FLAG_MOBILE	手机号
             * USER_FORM_INFO_FLAG_SEX	性别
             * USER_FORM_INFO_FLAG_NAME	姓名
             * USER_FORM_INFO_FLAG_BIRTHDAY	生日
             * USER_FORM_INFO_FLAG_IDCARD	身份证
             * USER_FORM_INFO_FLAG_EMAIL	邮箱
             * USER_FORM_INFO_FLAG_LOCATION	详细地址
             * USER_FORM_INFO_FLAG_EDUCATION_BACKGRO	教育背景
             * USER_FORM_INFO_FLAG_INDUSTRY	行业
             * USER_FORM_INFO_FLAG_INCOME	收入
             * USER_FORM_INFO_FLAG_HABIT	兴趣爱好
             */
        }
Exemple #16
0
        public IWxAccessToken GetWxAccessToken(string appid, string secret)
        {
            var request = WeChatApiRequestBuilder.GenerateWxTokenRequestUrl(appid, secret);

            return(request.GetResponseForJson <WxAccessToken>());
        }
Exemple #17
0
        public UploadMediaWxResponse UploadMaterial(string name, byte[] buffers)
        {
            var request = WeChatApiRequestBuilder.GenerateWxUploaMediaUrl(this.GetToken(), MediaUploadTypes.AuthMaterial);

            return(UploadMaterial(request, name, buffers));
        }
Exemple #18
0
 public void CheckCardAgentQulification()
 {
     var request = WeChatApiRequestBuilder.GenerateCheckCardAgentRequest(GetToken());
     var context = request.GetUriContentDirectly();
 }
Exemple #19
0
 public UploadMediaWxResponse UploadMaterialToCDN(byte[] buffers)
 {
     return(UploadMaterial(WeChatApiRequestBuilder.GenerateWxUploaMediaUrl(this.GetToken(), MediaUploadTypes.Material)
                           , "logo", buffers));
 }