OWX使用说明

OWX使用说明

项目设置

应用设置

通过UCS添加具体项目添加项目信息

  1. Name(应用名称)

  2. ApplicationPath(消息回调地址,OWX抛过来的消息接收的地址如:http://localhost/XXXX/rest/wxmessage/handle)

  3. ApplicationCallBack(登入回调地址,OWX登入后需要具体项目登入地址如:http://dev.nbeport.com/XXXX/home/LoginCallBack

  4. WeixinAppId(微信ID)

  5. WeixinAppSecret(微信密钥)

  6. WeixinClientSecret(响应微信的Token验证信息)

具体项目微信设置

  1. 微信回调地址统一以http://dev.nbeport.com/owx/rest/message/{applicationId 具体在上面应用中设定的ID}

  2. Token需与上面设置的WeixinAppSecret一致

  3. 设置JS接口安全域名,授权回调页面域名

实例
实例

在OWX中设置首页登入模版

    //权限过滤器 套用V2模版 不需做修改
    [WeixinAuthorizeV2]
    //定义要设置的应用首页
    public ActionResult Index_V2(string id)
   {
        var url = Request.QueryString["returnUrl"];
        //如果有回调URL则进行回调,没有回调则默认进入对应应用首页 这里的URL为GOX短连接唯一ID
        if (!String.IsNullOrEmpty(url))
        {
        string shortCode = url;
        var rs = GoxClient.GetShortUrl(shortCode);
        return Content(string.Format("<script>window.location.href='" + rs.LongUrl + "'; </script>"));
        }
        ViewData["ApplicationId"] = Session["applicationId"] == null ? "default" : Session["applicationId"].ToString();
        ViewData["Openid"] = Session["openId"] == null ? "default" : Session["openId"].ToString();
        return View();
    }
实例
实例

注:后期将通过UCS菜单进行控制

具体应用中的设置

 这里以XXXX应用为例子
  • HomeController设置
    //HomeController
    public class HomeController : Controller
    {
        public HomeController()
        {
        }
        //获取Authentication
        private IAuthenticationManager authentication
        {
            get
            {
                return HttpContext.GetOwinContext().Authentication;
            }
        }
        //获取应用认证ID
        private string GetOauthType
        {
            get
            {
                return System.Configuration.ConfigurationManager.AppSettings["oauth:authType"];
            }
        }
        [WeixinAuthorize]
        public ActionResult Index()
        {   
             //获取用户信息并放入VIWDATA
            var result = authentication.AuthenticateAsync(GetOauthType).Result;
            ViewData["UserId"] = result.Identity.Claims.Where(x => x.Type == ClaimTypes.NameIdentifier).FirstOrDefault().Value;
            ViewData["OpenId"] = result.Identity.Claims.Where(x => x.Type == ClaimTypes.Name).FirstOrDefault().Value;
            ViewData["ApplicationId"] = Purple.ConfigHelper.GetConfigString("oauth:clientId");
            return View();
        }
        /// <summary>
        /// 授权回调函数,跟上面应用中设立的参数要一致
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <param name="openId">微信ID</param>
        /// <param name="returnUrl">回调短连接ID</param>
        public ActionResult LoginCallBack(string userId,string openId,string returnUrl)
        {
            //有信息才会登入不然返回owx进行再授权
            if(!String.IsNullOrEmpty(userId))
            {
                //sigin
                this.authentication.SignOut(GetOauthType);
                var claims = new List<Claim>();
                claims.Add(new Claim(ClaimTypes.NameIdentifier, userId));
                claims.Add(new Claim(ClaimTypes.Name, openId));
                var id = new ClaimsIdentity(claims, GetOauthType);
                this.authentication.SignIn(id);
            }
            return Redirect(Purple.ConfigHelper.GetConfigString("address:owx") + "/weixin/Index_V2?id=" + Purple.ConfigHelper.GetConfigString("oauth:clientId")+"&ReturnUrl="+returnUrl);
        }
    }
  • 登入授权过滤器
    ///<summary>
    /// 认证信息
    /// </summary>
    public class WeixinAuthorize : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            return base.AuthorizeCore(httpContext);
        }
        //验证不通过直接跳到OWX进行授权
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            var url = filterContext.HttpContext.Request.Params["id"];
            filterContext.HttpContext.Response.Redirect(Purple.ConfigHelper.GetConfigString("address:owx") + "/WxAccountV2/UnifyLogin?id=" + Purple.ConfigHelper.GetConfigString("oauth:clientId") + "&returnUrl=" + url);
        }
    }
  • 设置参数必须加入下列项目
    <add key="address:owx" value="http://XXXXX/owx" />
    <add key="address:oauthwx" value="http://XXXX/cas/rest/AccountWx" />

消息处理设置

在前面应用中已经将消息处理接口设置,在具体应用中只要设置具体回调接口
  • 消息处理接口
        //定义回调方法
        public HttpResponseMessage MessageHandle(WxMessageReceive model)
        {
            //要返回的XML
            string RETURNXML = "";
            //初始化信息
            TextMessage initModel = new TextMessage()
            {
                ToUserName = model.FromUserName,
                FromUserName = model.ToUserName,
                CreateTime = HwxHelper.ConvertDateTimeInt(DateTime.Now),
                MsgType = "text",
                Content = "敬请期待!"
            };
            RETURNXML = HwxHelper.GetPostXml<TextMessage>(initModel);
            var response = Request.CreateResponse(HttpStatusCode.OK);
            response.Content = new StringContent(RETURNXML, Encoding.UTF8);
            return response;
        }
  • Purple.top.Hwx.Model提供所有关于微信被动消息的模型
    使用时需先安装Purple.top.Hwx nuget包
         1. WxMessageReceive--接受模型
    public class WxMessageReceive
    {
        #region 基础信息
        /// <summary>
        /// 开发者微信号
        /// </summary>
        public string ToUserName { get; set; }
        /// <summary>
        /// 发送方帐号
        /// </summary>
        public string FromUserName { get; set; }
        /// <summary>
        /// 消息创建时间
        /// </summary>
        public int CreateTime { get; set; }
        /// <summary>
        /// 消息类型
        /// </summary>
        public string MsgType { get; set; }
        /// <summary>
        /// 消息ID  用于非EVENT消息
        /// </summary>
        public long MsgId { get; set; }
        /// <summary>
        /// 图片消息媒体id,可以调用多媒体文件下载接口拉取数据
        /// </summary>
        public string MediaId { get; set; }
        #endregion
        #region 文本消息
        /// <summary>
        /// 文本消息内容
        /// </summary>
        public string Content { get; set; }
        #endregion
        #region 图片消息
        /// <summary>
        /// 图片链接
        /// </summary>
        public string PicUrl { get; set; }
        #endregion
        #region  语音消息
        /// <summary>
        /// 语音格式
        /// </summary>
        public string Format { get; set; }
        #endregion
        #region 视频/小视频 消息
        /// <summary>
        /// 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据
        /// </summary>
        public string ThumbMediaId { get; set; }
        #endregion
        #region 地理位置消息
        /// <summary>
        /// 地理位置维度
        /// </summary>
        public decimal Location_X { get; set; }
        /// <summary>
        /// 地理位置经度
        /// </summary>
        public decimal Location_Y { get; set; }
        /// <summary>
        /// 地图缩放大小
        /// </summary>
        public int Scale { get; set; }
        /// <summary>
        /// 地理位置信息
        /// </summary>
        public string Label { get; set; }
        #endregion
        #region 链接消息
        /// <summary>
        /// 消息标题
        /// </summary>
        public string Title { get; set; }
        /// <summary>
        /// 消息描述
        /// </summary>
        public string Description { get; set; }
        /// <summary>
        /// 消息链接
        /// </summary>
        public string Url { get; set; }
        #endregion
        #region event
        /// <summary>
        /// 事件类型
        /// </summary>
        public string Event { get; set; }
        /// <summary>
        /// 事件Key值
        /// </summary>
        public string EventKey { get; set; }
        #region 扫描带参数二维码事件
        /// <summary>
        /// 二维码的ticket,可用来换取二维码图片
        /// </summary>
        public string Ticket { get; set; }
        #endregion
        #region 上报地理位置事件
        /// <summary>
        /// 地理位置纬度
        /// </summary>
        public decimal Latitude { get; set; }
        /// <summary>
        /// 地理位置经度
        /// </summary>
        public decimal Longitude { get; set; }
        /// <summary>
        /// 地理位置精度
        /// </summary>
        public decimal Precision { get; set; }
        #endregion
        #endregion
    }
        2. TextMessage--文本消息
    public partial class TextMessage
    {
        /// <summary>
        /// 接收方帐号
        /// </summary>
    public partial class TextMessage
    {
         [XmlIgnore]
         public string ToUserName { get; set; }
        /// <summary>
        /// 开发者微信号
        /// </summary>
        [XmlIgnore]
         public string FromUserName { get; set; }
        /// <summary>
        /// 消息创建时间
        /// </summary>
        [XmlIgnore]
        public int CreateTime { get; set; }
        /// <summary>
        /// 消息类型
        /// </summary>
        [XmlIgnore]
        public string MsgType { get; set; }
        /// <summary>
        /// 回复的内容
        /// </summary>
        [XmlIgnore]
        public string Content { get; set; }
    }
        3. ImgMessage--图片消息
    public partial class ImgMessage
    {
        /// <summary>
        /// 接收方帐号
        /// </summary>
        [XmlIgnore]
        public string ToUserName { get; set; }
        /// <summary>
        /// 开发者微信号
        /// </summary>
        [XmlIgnore]
        public string FromUserName { get; set; }
        /// <summary>
        /// 消息创建时间
        /// </summary>
        [XmlIgnore]
        public int CreateTime { get; set; }
        /// <summary>
        /// 消息类型
        /// </summary>
        [XmlIgnore]
        public string MsgType { get; set; }
        /// <summary>
        /// 图片信息
        /// </summary>
        [XmlElement("Image")]
        public Image Image { get; set; }
    }
    /// <summary>
    /// 图片信息
    /// </summary>
    public partial class Image
    {
        /// <summary>
        /// 素材ID
        /// </summary>
        [XmlIgnore]
        public string MediaId { get; set; }
    }
        4. VoiceMessage--声音消息
    public partial class VoiceMessage
    {
        /// <summary>
        /// 接收方帐号
        /// </summary>
        [XmlIgnore]
        public string ToUserName { get; set; }
        /// <summary>
        /// 开发者微信号
        /// </summary>
        [XmlIgnore]
        public string FromUserName { get; set; }
        /// <summary>
        /// 消息创建时间
        /// </summary>
        [XmlIgnore]
        public int CreateTime { get; set; }
        /// <summary>
        /// 消息类型
        /// </summary>
        [XmlIgnore]
        public string MsgType { get; set; }
    }
        5. VideoMessage--视频消息
    public partial class VideoMessage
    {
        /// <summary>
        /// 接收方帐号
        /// </summary>
        [XmlIgnore]
        public string ToUserName { get; set; }
        /// <summary>
        /// 开发者微信号
        /// </summary>
        [XmlIgnore]
        public string FromUserName { get; set; }
        /// <summary>
        /// 消息创建时间
        /// </summary>
        [XmlIgnore]
        public int CreateTime { get; set; }
        /// <summary>
        /// 消息类型
        /// </summary>
        [XmlIgnore]
        public string MsgType { get; set; }
    }
    public partial class Video
    {
        /// <summary>
        /// 素材ID
        /// </summary>
        [XmlIgnore]
        public string MediaId { get; set; }
        /// <summary>
        /// 标题
        /// </summary>
        [XmlIgnore]
        public string Title { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        [XmlIgnore]
        public string Description { get; set; }
    }
        6. MusicMessage--音乐消息
    public partial class MusicMessage
    {
        /// <summary>
        /// 接收方帐号
        /// </summary>
        [XmlIgnore]
        public string ToUserName { get; set; }
        /// <summary>
        /// 开发者微信号
        /// </summary>
        [XmlIgnore]
        public string FromUserName { get; set; }
        /// <summary>
        /// 消息创建时间
        /// </summary>
        [XmlIgnore]
        public int CreateTime { get; set; }
        /// <summary>
        /// 消息类型
        /// </summary>
        [XmlIgnore]
        public string MsgType { get; set; }
    }
    /// <summary>
    /// 音乐消息
    /// </summary>
    public partial class Music
    {
        /// <summary>
        /// 标题
        /// </summary>
        [XmlIgnore]
        public string Title { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        [XmlIgnore]
        public string Description { get; set; }
        /// <summary>
        /// 音乐链接
        /// </summary>
        [XmlIgnore]
        public string MusicUrl { get; set; }
        /// <summary>
        /// 高品质音乐链接
        /// </summary>
        [XmlIgnore]
        public string HQMusicUrl { get; set; }
        /// <summary>
        /// 缩略图媒体ID
        /// </summary>
        [XmlIgnore]
        public string ThumbMediaId { get; set; }
    }
        7. ArticleMessage--图文消息
    public partial class ArticleMessage
    {
        /// <summary>
        /// 接收方帐号
        /// </summary>
        [XmlIgnore]
        public string ToUserName { get; set; }
        /// <summary>
        /// 开发者微信号
        /// </summary>
        [XmlIgnore]
        public string FromUserName { get; set; }
        /// <summary>
        /// 消息创建时间
        /// </summary>
        [XmlIgnore]
        public int CreateTime { get; set; }
        /// <summary>
        /// 消息类型
        /// </summary>
        [XmlIgnore]
        public string MsgType { get; set; }
        /// <summary>
        /// 图文消息条数
        /// </summary>
        [XmlIgnore]
        public int ArticleCount { get; set; }
    }
    /// <summary>
    /// 文章消息
    /// </summary>
    public partial class Article
    {
        /// <summary>
        /// 标题
        /// </summary>
        [XmlIgnore]
        public string Title { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        [XmlIgnore]
        public string Description { get; set; }
        /// <summary>
        /// 图片链接,支持JPG、PNG格式,较好的效果为大图360*200,小图200*200
        /// </summary>
        [XmlIgnore]
        public string PicUrl { get; set; }
        /// <summary>
        /// 点击图文消息跳转链接
        /// </summary>
        [XmlIgnore]
        public string Url { get; set; }
    }
  • Purple.top.Hwx.Helper提供将所有上述模型转换成XML文档

      HwxHelper.GetPostXml()将上述模型转换成微信接收的模型
    
  • 主动消息发送

       method:httppost
        
       /rest/message/{applicationId}/sendtemplate
        
        postJsonModel:
    
    /// <summary>
    /// 模版发送模型
    /// </summary>
    public class TempalteSendModel
    {
        //对应的用户ID
         public string touser { get; set; }        
        //模版ID
        public string template_id { get; set; }      
        //模版消息点击URL
        public string url { get; set; }
        //要发送的数据模型
        public object data { get; set; }
    }

二维码扫码设置

未完待续

图片上传

未完待续

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容