OWX使用說(shuō)明

OWX使用說(shuō)明

項(xiàng)目設(shè)置

應(yīng)用設(shè)置

通過(guò)UCS添加具體項(xiàng)目添加項(xiàng)目信息

  1. Name(應(yīng)用名稱)

  2. ApplicationPath(消息回調(diào)地址,OWX拋過(guò)來(lái)的消息接收的地址如:http://localhost/XXXX/rest/wxmessage/handle)

  3. ApplicationCallBack(登入回調(diào)地址,OWX登入后需要具體項(xiàng)目登入地址如:http://dev.nbeport.com/XXXX/home/LoginCallBack

  4. WeixinAppId(微信ID)

  5. WeixinAppSecret(微信密鑰)

  6. WeixinClientSecret(響應(yīng)微信的Token驗(yàn)證信息)

具體項(xiàng)目微信設(shè)置

  1. 微信回調(diào)地址統(tǒng)一以http://dev.nbeport.com/owx/rest/message/{applicationId 具體在上面應(yīng)用中設(shè)定的ID}

  2. Token需與上面設(shè)置的WeixinAppSecret一致

  3. 設(shè)置JS接口安全域名,授權(quán)回調(diào)頁(yè)面域名

實(shí)例
實(shí)例

在OWX中設(shè)置首頁(yè)登入模版

    //權(quán)限過(guò)濾器 套用V2模版 不需做修改
    [WeixinAuthorizeV2]
    //定義要設(shè)置的應(yīng)用首頁(yè)
    public ActionResult Index_V2(string id)
   {
        var url = Request.QueryString["returnUrl"];
        //如果有回調(diào)URL則進(jìn)行回調(diào),沒有回調(diào)則默認(rèn)進(jìn)入對(duì)應(yīng)應(yīng)用首頁(yè) 這里的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();
    }
實(shí)例
實(shí)例

注:后期將通過(guò)UCS菜單進(jìn)行控制

具體應(yīng)用中的設(shè)置

 這里以XXXX應(yīng)用為例子
  • HomeController設(shè)置
    //HomeController
    public class HomeController : Controller
    {
        public HomeController()
        {
        }
        //獲取Authentication
        private IAuthenticationManager authentication
        {
            get
            {
                return HttpContext.GetOwinContext().Authentication;
            }
        }
        //獲取應(yīng)用認(rèn)證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>
        /// 授權(quán)回調(diào)函數(shù),跟上面應(yīng)用中設(shè)立的參數(shù)要一致
        /// </summary>
        /// <param name="userId">用戶ID</param>
        /// <param name="openId">微信ID</param>
        /// <param name="returnUrl">回調(diào)短連接ID</param>
        public ActionResult LoginCallBack(string userId,string openId,string returnUrl)
        {
            //有信息才會(huì)登入不然返回owx進(jìn)行再授權(quán)
            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);
        }
    }
  • 登入授權(quán)過(guò)濾器
    ///<summary>
    /// 認(rèn)證信息
    /// </summary>
    public class WeixinAuthorize : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            return base.AuthorizeCore(httpContext);
        }
        //驗(yàn)證不通過(guò)直接跳到OWX進(jìn)行授權(quán)
        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);
        }
    }
  • 設(shè)置參數(shù)必須加入下列項(xiàng)目
    <add key="address:owx" value="http://XXXXX/owx" />
    <add key="address:oauthwx" value="http://XXXX/cas/rest/AccountWx" />

消息處理設(shè)置

在前面應(yīng)用中已經(jīng)將消息處理接口設(shè)置,在具體應(yīng)用中只要設(shè)置具體回調(diào)接口
  • 消息處理接口
        //定義回調(diào)方法
        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 = "敬請(qǐng)期待!"
            };
            RETURNXML = HwxHelper.GetPostXml<TextMessage>(initModel);
            var response = Request.CreateResponse(HttpStatusCode.OK);
            response.Content = new StringContent(RETURNXML, Encoding.UTF8);
            return response;
        }
  • Purple.top.Hwx.Model提供所有關(guān)于微信被動(dòng)消息的模型
    使用時(shí)需先安裝Purple.top.Hwx nuget包
         1. WxMessageReceive--接受模型
    public class WxMessageReceive
    {
        #region 基礎(chǔ)信息
        /// <summary>
        /// 開發(fā)者微信號(hào)
        /// </summary>
        public string ToUserName { get; set; }
        /// <summary>
        /// 發(fā)送方帳號(hào)
        /// </summary>
        public string FromUserName { get; set; }
        /// <summary>
        /// 消息創(chuàng)建時(shí)間
        /// </summary>
        public int CreateTime { get; set; }
        /// <summary>
        /// 消息類型
        /// </summary>
        public string MsgType { get; set; }
        /// <summary>
        /// 消息ID  用于非EVENT消息
        /// </summary>
        public long MsgId { get; set; }
        /// <summary>
        /// 圖片消息媒體id,可以調(diào)用多媒體文件下載接口拉取數(shù)據(jù)
        /// </summary>
        public string MediaId { get; set; }
        #endregion
        #region 文本消息
        /// <summary>
        /// 文本消息內(nèi)容
        /// </summary>
        public string Content { get; set; }
        #endregion
        #region 圖片消息
        /// <summary>
        /// 圖片鏈接
        /// </summary>
        public string PicUrl { get; set; }
        #endregion
        #region  語(yǔ)音消息
        /// <summary>
        /// 語(yǔ)音格式
        /// </summary>
        public string Format { get; set; }
        #endregion
        #region 視頻/小視頻 消息
        /// <summary>
        /// 視頻消息縮略圖的媒體id,可以調(diào)用多媒體文件下載接口拉取數(shù)據(jù)
        /// </summary>
        public string ThumbMediaId { get; set; }
        #endregion
        #region 地理位置消息
        /// <summary>
        /// 地理位置維度
        /// </summary>
        public decimal Location_X { get; set; }
        /// <summary>
        /// 地理位置經(jīng)度
        /// </summary>
        public decimal Location_Y { get; set; }
        /// <summary>
        /// 地圖縮放大小
        /// </summary>
        public int Scale { get; set; }
        /// <summary>
        /// 地理位置信息
        /// </summary>
        public string Label { get; set; }
        #endregion
        #region 鏈接消息
        /// <summary>
        /// 消息標(biāo)題
        /// </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 掃描帶參數(shù)二維碼事件
        /// <summary>
        /// 二維碼的ticket,可用來(lái)?yè)Q取二維碼圖片
        /// </summary>
        public string Ticket { get; set; }
        #endregion
        #region 上報(bào)地理位置事件
        /// <summary>
        /// 地理位置緯度
        /// </summary>
        public decimal Latitude { get; set; }
        /// <summary>
        /// 地理位置經(jīng)度
        /// </summary>
        public decimal Longitude { get; set; }
        /// <summary>
        /// 地理位置精度
        /// </summary>
        public decimal Precision { get; set; }
        #endregion
        #endregion
    }
        2. TextMessage--文本消息
    public partial class TextMessage
    {
        /// <summary>
        /// 接收方帳號(hào)
        /// </summary>
    public partial class TextMessage
    {
         [XmlIgnore]
         public string ToUserName { get; set; }
        /// <summary>
        /// 開發(fā)者微信號(hào)
        /// </summary>
        [XmlIgnore]
         public string FromUserName { get; set; }
        /// <summary>
        /// 消息創(chuàng)建時(shí)間
        /// </summary>
        [XmlIgnore]
        public int CreateTime { get; set; }
        /// <summary>
        /// 消息類型
        /// </summary>
        [XmlIgnore]
        public string MsgType { get; set; }
        /// <summary>
        /// 回復(fù)的內(nèi)容
        /// </summary>
        [XmlIgnore]
        public string Content { get; set; }
    }
        3. ImgMessage--圖片消息
    public partial class ImgMessage
    {
        /// <summary>
        /// 接收方帳號(hào)
        /// </summary>
        [XmlIgnore]
        public string ToUserName { get; set; }
        /// <summary>
        /// 開發(fā)者微信號(hào)
        /// </summary>
        [XmlIgnore]
        public string FromUserName { get; set; }
        /// <summary>
        /// 消息創(chuàng)建時(shí)間
        /// </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>
        /// 接收方帳號(hào)
        /// </summary>
        [XmlIgnore]
        public string ToUserName { get; set; }
        /// <summary>
        /// 開發(fā)者微信號(hào)
        /// </summary>
        [XmlIgnore]
        public string FromUserName { get; set; }
        /// <summary>
        /// 消息創(chuàng)建時(shí)間
        /// </summary>
        [XmlIgnore]
        public int CreateTime { get; set; }
        /// <summary>
        /// 消息類型
        /// </summary>
        [XmlIgnore]
        public string MsgType { get; set; }
    }
        5. VideoMessage--視頻消息
    public partial class VideoMessage
    {
        /// <summary>
        /// 接收方帳號(hào)
        /// </summary>
        [XmlIgnore]
        public string ToUserName { get; set; }
        /// <summary>
        /// 開發(fā)者微信號(hào)
        /// </summary>
        [XmlIgnore]
        public string FromUserName { get; set; }
        /// <summary>
        /// 消息創(chuàng)建時(shí)間
        /// </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>
        /// 標(biāo)題
        /// </summary>
        [XmlIgnore]
        public string Title { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        [XmlIgnore]
        public string Description { get; set; }
    }
        6. MusicMessage--音樂(lè)消息
    public partial class MusicMessage
    {
        /// <summary>
        /// 接收方帳號(hào)
        /// </summary>
        [XmlIgnore]
        public string ToUserName { get; set; }
        /// <summary>
        /// 開發(fā)者微信號(hào)
        /// </summary>
        [XmlIgnore]
        public string FromUserName { get; set; }
        /// <summary>
        /// 消息創(chuàng)建時(shí)間
        /// </summary>
        [XmlIgnore]
        public int CreateTime { get; set; }
        /// <summary>
        /// 消息類型
        /// </summary>
        [XmlIgnore]
        public string MsgType { get; set; }
    }
    /// <summary>
    /// 音樂(lè)消息
    /// </summary>
    public partial class Music
    {
        /// <summary>
        /// 標(biāo)題
        /// </summary>
        [XmlIgnore]
        public string Title { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        [XmlIgnore]
        public string Description { get; set; }
        /// <summary>
        /// 音樂(lè)鏈接
        /// </summary>
        [XmlIgnore]
        public string MusicUrl { get; set; }
        /// <summary>
        /// 高品質(zhì)音樂(lè)鏈接
        /// </summary>
        [XmlIgnore]
        public string HQMusicUrl { get; set; }
        /// <summary>
        /// 縮略圖媒體ID
        /// </summary>
        [XmlIgnore]
        public string ThumbMediaId { get; set; }
    }
        7. ArticleMessage--圖文消息
    public partial class ArticleMessage
    {
        /// <summary>
        /// 接收方帳號(hào)
        /// </summary>
        [XmlIgnore]
        public string ToUserName { get; set; }
        /// <summary>
        /// 開發(fā)者微信號(hào)
        /// </summary>
        [XmlIgnore]
        public string FromUserName { get; set; }
        /// <summary>
        /// 消息創(chuàng)建時(shí)間
        /// </summary>
        [XmlIgnore]
        public int CreateTime { get; set; }
        /// <summary>
        /// 消息類型
        /// </summary>
        [XmlIgnore]
        public string MsgType { get; set; }
        /// <summary>
        /// 圖文消息條數(shù)
        /// </summary>
        [XmlIgnore]
        public int ArticleCount { get; set; }
    }
    /// <summary>
    /// 文章消息
    /// </summary>
    public partial class Article
    {
        /// <summary>
        /// 標(biāo)題
        /// </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>
        /// 點(diǎn)擊圖文消息跳轉(zhuǎn)鏈接
        /// </summary>
        [XmlIgnore]
        public string Url { get; set; }
    }
  • Purple.top.Hwx.Helper提供將所有上述模型轉(zhuǎn)換成XML文檔

      HwxHelper.GetPostXml()將上述模型轉(zhuǎn)換成微信接收的模型
    
  • 主動(dòng)消息發(fā)送

       method:httppost
        
       /rest/message/{applicationId}/sendtemplate
        
        postJsonModel:
    
    /// <summary>
    /// 模版發(fā)送模型
    /// </summary>
    public class TempalteSendModel
    {
        //對(duì)應(yīng)的用戶ID
         public string touser { get; set; }        
        //模版ID
        public string template_id { get; set; }      
        //模版消息點(diǎn)擊URL
        public string url { get; set; }
        //要發(fā)送的數(shù)據(jù)模型
        public object data { get; set; }
    }

二維碼掃碼設(shè)置

未完待續(xù)

圖片上傳

未完待續(xù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容