真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

微信開(kāi)發(fā)之如何實(shí)現(xiàn)被動(dòng)回復(fù)和上傳下載文件-創(chuàng)新互聯(lián)

小編給大家分享一下微信開(kāi)發(fā)之如何實(shí)現(xiàn)被動(dòng)回復(fù)和上傳下載文件,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)公司于2013年開(kāi)始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元石臺(tái)做網(wǎng)站,已為上家服務(wù),為石臺(tái)各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

在講上傳下載接口前,需要先將下先來(lái)講講access_token獲取方法。在微信接口開(kāi)發(fā)的過(guò)程access_token是至關(guān)重要的,是公眾號(hào)的全局票據(jù),公眾號(hào)調(diào)用各接口時(shí)都需使用access_token。開(kāi)發(fā)者需要進(jìn)行妥善保存。access_token的存儲(chǔ)至少要保留512個(gè)字符空間。access_token的有效期目前為2個(gè)小時(shí),需定時(shí)刷新,重復(fù)獲取將導(dǎo)致上次獲取的access_token失效。需要注意的時(shí),一個(gè)公眾號(hào)同時(shí)只存在一個(gè)有效的access_token,開(kāi)發(fā)者需要在access_token過(guò)期前,刷新access_token。在刷新的過(guò)程中,公眾平臺(tái)后臺(tái)會(huì)保證在刷新短時(shí)間內(nèi),新老access_token都可用,這保證了第三方業(yè)務(wù)的平滑過(guò)渡。

公眾號(hào)可以使用AppID和AppSecret調(diào)用本接口來(lái)獲取access_token。AppID和AppSecret可在微信公眾平臺(tái)官網(wǎng)-開(kāi)發(fā)者中心頁(yè)中獲得(需要已經(jīng)成為開(kāi)發(fā)者,且?guī)ぬ?hào)沒(méi)有異常狀態(tài))。如下圖:

微信開(kāi)發(fā)之如何實(shí)現(xiàn)被動(dòng)回復(fù)和上傳下載文件

獲取access_token的接口地址是:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
將appid和secret替換成你自己的。

發(fā)送get請(qǐng)求到這個(gè)地址,返回的數(shù)據(jù)如下:

{"access_token":"eEd6dhp0s24JfWwDyGBbrvJxnhqHTSYZ8MKdQ7MuCGBKxAjHv-tEIwhFZzn102lGvIWxnjZZreT6C1NCT9fpS7NREOkEX42yojVnqKVaicg","expires_in":7200}
我們只需解析這個(gè)json,即可獲取到我們所需的access_token.代碼如下:
AccessToken實(shí)體類:
public class AccessToken
    {        public string token { get; set; }        public DateTime expirestime { get; set; }
    }

獲取access token

/// 
        /// 獲取access token        /// 
        /// 第三方用戶憑證
        /// 第三方用戶憑證密鑰,即appsecret
        /// AccessToken對(duì)象,expirestime是過(guò)期時(shí)間
        public static AccessToken GetAccessToken(string appid, string secret)
        {            try
            {                string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, secret);                string retdata = Utils.HttpGet(url);                if (retdata.Contains("access_token"))
                {
                    JObject obj = (JObject)JsonConvert.DeserializeObject(retdata);                    string token = obj.Value("access_token");                    int expirestime = obj.Value("expires_in");                    return new AccessToken { token = token, expirestime = DateTime.Now.AddSeconds(expirestime) };
                }                else
                {
                    WriteBug(retdata);//寫錯(cuò)誤日志                }                return null;
            }            catch (Exception e)
            {
                WriteBug(e.ToString());//寫錯(cuò)誤日志
                return null;
            }

        }

access_token獲取成功后,下面來(lái)講上傳下載多媒體文件吧。官方說(shuō),公眾號(hào)在使用接口時(shí),對(duì)多媒體文件、多媒體消息的獲取和調(diào)用等操作,是通過(guò)media_id來(lái)進(jìn)行的(咱讀書(shū)少,不明白為什么不能使用url,而要多此一舉先上傳到服務(wù)器在發(fā)送)。通過(guò)本接口,公眾號(hào)可以上傳或下載多媒體文件。但請(qǐng)注意,每個(gè)多媒體文件(media_id)會(huì)在上傳、用戶發(fā)送到微信服務(wù)器3天后自動(dòng)刪除,以節(jié)省服務(wù)器資源。

上傳多媒體的接口地址是:

file.api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE

其中access_token為調(diào)用接口憑證,type是媒體文件類型,分別有圖片(image)、語(yǔ)音(voice)、視頻(video)和縮略圖(thumb)

注意事項(xiàng):

上傳的多媒體文件有格式和大小限制,如下:

  • 圖片(image): 1M,支持JPG格式

  • 語(yǔ)音(voice):2M,播放長(zhǎng)度不超過(guò)60s,支持AMR\MP3格式

  • 視頻(video):10MB,支持MP4格式

  • 縮略圖(thumb):64KB,支持JPG格式

媒體文件在后臺(tái)保存時(shí)間為3天,即3天后media_id失效。

為了方便調(diào)用,將媒體文件的類型定義為枚舉,代碼如下:

public enum MediaType
    {        /// 
        /// 圖片(image): 1M,支持JPG格式        ///         image,        /// 
        /// 語(yǔ)音(voice):2M,播放長(zhǎng)度不超過(guò)60s,支持AMR\MP3格式        ///         voice,        /// 
        /// 視頻(video):10MB,支持MP4格式        ///         video,        /// 
        /// 縮略圖(thumb):64KB,支持JPG格式        ///         thumb
    }

然后定義返回值的類型:

public class UpLoadInfo
    {        /// 
        /// 媒體文件類型,分別有圖片(image)、語(yǔ)音(voice)、視頻(video)和縮略圖(thumb,主要用于視頻與音樂(lè)格式的縮略圖)        /// 
        public string type { get; set; }        /// 
        /// 媒體文件上傳后,獲取時(shí)的標(biāo)識(shí)        /// 
        public string media_id { get; set; }        /// 
        /// 媒體文件上傳時(shí)間戳        /// 
        public string created_at { get; set; }
    }

最后使用WebClient類來(lái)上傳文件,并讀出返回值,代碼如下:

/// 
        /// 微信上傳多媒體文件        /// 
        /// 文件絕對(duì)路徑
        public static ReceiveModel.UpLoadInfo WxUpLoad(string filepath, string token, MediaType mt)
        {            using (WebClient client = new WebClient())
            {                byte[] b = client.UploadFile(string.Format("http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token={0}&type={1}", token, mt.ToString()), filepath);//調(diào)用接口上傳文件                string retdata = Encoding.Default.GetString(b);//獲取返回值                if (retdata.Contains("media_id"))//判斷返回值是否包含media_id,包含則說(shuō)明上傳成功,然后將返回的json字符串轉(zhuǎn)換成json
                {                    return JsonConvert.DeserializeObject(retdata);
                }                else
                {//否則,寫錯(cuò)誤日志

                    WriteBug(retdata);//寫錯(cuò)誤日志
                    return null;
                }
            }
        }

至此,在講回復(fù)消息之前,插入了兩個(gè)基礎(chǔ)支持接口,由于各位整理歸納能力太爛了,各位看官請(qǐng)多包涵,如有問(wèn)題就留言和我交流。 下面正式開(kāi)始講回復(fù)消息。在看下面內(nèi)容的時(shí)候,請(qǐng)大家結(jié)合第四,第五章進(jìn)行閱讀。

前面兩章講述了接收并處理用戶發(fā)送的消息,講到了一個(gè)消息基類BaseMessage,而不管我們接收到什么類型的消息,都需要可以調(diào)用方法,進(jìn)行響應(yīng)用戶的請(qǐng)求,所以,用戶回復(fù)用戶請(qǐng)求的方法需要封裝到基類中。下面先簡(jiǎn)單了解下公眾號(hào)可以回復(fù)的消息類型,以及消息格式。

注意:

一旦遇到以下情況,微信都會(huì)在公眾號(hào)會(huì)話中,向用戶下發(fā)系統(tǒng)提示“該公眾號(hào)暫時(shí)無(wú)法提供服務(wù),請(qǐng)稍后再試”:

1、開(kāi)發(fā)者在5秒內(nèi)未回復(fù)任何內(nèi)容
2、開(kāi)發(fā)者回復(fù)了異常數(shù)據(jù),比如JSON數(shù)據(jù)等
回復(fù)文本消息
消息創(chuàng)建時(shí)間 (整型)
回復(fù)圖片消息
消息創(chuàng)建時(shí)間 (整型)
回復(fù)語(yǔ)音消息
消息創(chuàng)建時(shí)間 (整型)
回復(fù)視頻消息
消息創(chuàng)建時(shí)間 (整型)
回復(fù)音樂(lè)消息
消息創(chuàng)建時(shí)間 (整型)<![CDATA[視頻消息的標(biāo)題]]>



回復(fù)圖文消息
123456782<![CDATA[title1]]> <![CDATA[title]]>

回復(fù)圖文中,item是一個(gè)項(xiàng),一個(gè)item代碼一個(gè)圖文。在響應(yīng)的時(shí)候,我們只需根據(jù)數(shù)據(jù)格式,替換掉對(duì)應(yīng)的屬性,然后Response.Write(s)即可。結(jié)合前兩章的講解,BaseMessage的最終代碼如下:

/// 
    /// 消息體基類    /// 
    public abstract class BaseMessage
    {        /// 
        /// 開(kāi)發(fā)者微信號(hào)        /// 
        public string ToUserName { get; set; }       /// 
        /// 發(fā)送方帳號(hào)(一個(gè)OpenID)       /// 
        public string FromUserName { get; set; }        /// 
        /// 消息創(chuàng)建時(shí)間 (整型)        /// 
        public string CreateTime { get; set; }        /// 
        /// 消息類型        /// 
        public MsgType MsgType { get; set; }        public virtual void ResponseNull()
        {
            Utils.ResponseWrite("");
        }        public virtual void ResText(EnterParam param, string content)
        {
            StringBuilder resxml = new StringBuilder(string.Format("{2}", FromUserName, ToUserName, Utils.ConvertDateTimeInt(DateTime.Now)));
            resxml.AppendFormat("0", content);
            Response(param, resxml.ToString());
        }        /// 
        /// 回復(fù)消息(音樂(lè))        /// 
        public  void ResMusic(EnterParam param, Music mu)
        {
            StringBuilder resxml = new StringBuilder(string.Format("{2}",FromUserName,ToUserName, Utils.ConvertDateTimeInt(DateTime.Now)));
            resxml.Append(" ");
            resxml.AppendFormat("<![CDATA[{0}]]>", mu.Title, mu.Description);
            resxml.AppendFormat("0", VqiRequest.GetCurrentFullHost(), mu.MusicUrl, VqiRequest.GetCurrentFullHost(), mu.HQMusicUrl);
            Response(param, resxml.ToString());
        }        public  void ResVideo(EnterParam param, Video v)
        {
            StringBuilder resxml = new StringBuilder(string.Format("{2}",FromUserName,ToUserName, Utils.ConvertDateTimeInt(DateTime.Now)));
            resxml.Append(" ");
            resxml.AppendFormat("", v.description);
            Response(param, resxml.ToString());
        }        /// 
        /// 回復(fù)消息(圖片)        /// 
        public  void ResPicture(EnterParam param, Picture pic, string domain)
        {
            StringBuilder resxml = new StringBuilder(string.Format("{2}",FromUserName,ToUserName, Utils.ConvertDateTimeInt(DateTime.Now)));
            resxml.Append(" ");
            resxml.AppendFormat("", domain + pic.PictureUrl);
            Response(param, resxml.ToString());
        }        /// 
        /// 回復(fù)消息(圖文列表)        /// 
        /// 
        /// 
        public  void ResArticles(EnterParam param, List art)
        {
            StringBuilder resxml = new StringBuilder(string.Format("{2}",FromUserName,ToUserName, Utils.ConvertDateTimeInt(DateTime.Now)));
            resxml.AppendFormat("{0}", art.Count);            for (int i = 0; i < art.Count; i++)
            {
                resxml.AppendFormat("<![CDATA[{0}]]>  ", art[i].Title, art[i].Description);
                resxml.AppendFormat("", art[i].PicUrl.Contains("http://") ? art[i].PicUrl : "http://" + VqiRequest.GetCurrentFullHost() + art[i].PicUrl, art[i].Url.Contains("http://") ? art[i].Url : "http://" + VqiRequest.GetCurrentFullHost() + art[i].Url);
            }
            resxml.Append("0");
            Response(param, resxml.ToString());
        }        /// 
        /// 多客服轉(zhuǎn)發(fā)        /// 
        /// 
        public  void ResDKF(EnterParam param)
        {
            StringBuilder resxml = new StringBuilder();
            resxml.AppendFormat("",FromUserName);
            resxml.AppendFormat("{1}",ToUserName,CreateTime);
            resxml.AppendFormat("");
            Response(param, resxml.ToString());
        }        /// 
        /// 多客服轉(zhuǎn)發(fā)如果指定的客服沒(méi)有接入能力(不在線、沒(méi)有開(kāi)啟自動(dòng)接入或者自動(dòng)接入已滿),該用戶會(huì)一直等待指定客服有接入能力后才會(huì)被接入,而不會(huì)被其他客服接待。建議在指定客服時(shí),先查詢客服的接入能力指定到有能力接入的客服,保證客戶能夠及時(shí)得到服務(wù)。        /// 
        /// 用戶發(fā)送的消息體
        /// 多客服賬號(hào)
        public  void ResDKF(EnterParam param, string KfAccount)
        {
            StringBuilder resxml = new StringBuilder();
            resxml.AppendFormat("",FromUserName);
            resxml.AppendFormat("{1}",ToUserName,CreateTime);
            resxml.AppendFormat("{0}", KfAccount);
            Response(param, resxml.ToString());
        }        private  void Response(EnterParam param, string data)
        {            if (param.IsAes)
            {                var wxcpt = new MsgCrypt(param.token, param.EncodingAESKey, param.appid);
                wxcpt.EncryptMsg(data, Utils.ConvertDateTimeInt(DateTime.Now).ToString(), Utils.GetRamCode(), ref data);
            }
            Utils.ResponseWrite(data);

        }
    }

上面的代碼中,public  void ResDKF(EnterParam param),public  void ResDKF(EnterParam param, string KfAccount)兩個(gè)方法時(shí)多客服中,用戶轉(zhuǎn)發(fā)用戶發(fā)送的消息的,多客服將在后期的博文中進(jìn)行更新,敬請(qǐng)期待。

public  void ResMusic(EnterParam param, Music mu)方法中的Music類的定義如下:

public class Music
    {        #region 屬性        /// 
        /// 音樂(lè)鏈接        /// 
        public string MusicUrl { get; set; }        /// 
        /// 高質(zhì)量音樂(lè)鏈接,WIFI環(huán)境優(yōu)先使用該鏈接播放音樂(lè)        /// 
        public string HQMusicUrl { get; set; }        /// 
        /// 標(biāo)題        /// 
        public string Title { get; set; }        /// 
        /// 描述        /// 
        public string Description { get; set; }        #endregion
    }

public  void ResVideo(EnterParam param, Video v)方法中的Video類的定義如下:

public class Video
    {        public string title { get; set; }        public string media_id { get; set; }        public string description { get; set; }
    }

public  void ResArticles(EnterParam param, List art)中的Articles定義如下:

public class Articles
    {        #region 屬性        /// 
        /// 圖文消息標(biāo)題        /// 
        public string Title { get; set; }        /// 
        /// 圖文消息描述        /// 
        public string Description { get; set; }        /// 
        /// 圖片鏈接,支持JPG、PNG格式,較好的效果為大圖640*320,小圖80*80。        /// 
        public string PicUrl { get; set; }        /// 
        /// 點(diǎn)擊圖文消息跳轉(zhuǎn)鏈接        /// 
        public string Url { get; set; }        #endregion
    }

以上是“微信開(kāi)發(fā)之如何實(shí)現(xiàn)被動(dòng)回復(fù)和上傳下載文件”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


當(dāng)前名稱:微信開(kāi)發(fā)之如何實(shí)現(xiàn)被動(dòng)回復(fù)和上傳下載文件-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://weahome.cn/article/hssgg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部