.NET 위 챗 공공 플랫폼 업로드 멀티미디어 파일 다운로드 실현

예 를 들 어 누군가가 우리 의 공공 마이크로 신호 에 사진 을 찍 어 보 낸 다음 에 우 리 는 이 사진 을 처리 했다.예 를 들 어 ocr 식별 자(그 다음 에 이 예 로 내 려 갈 것 이다)나 얼굴 인식,사진 추출 등 기능 이 상당히 유용 하 다.그럼 우 리 는 지금 이 과정 을 분석 해 야 한다.위 챗 플랫폼 은 OCR 이나 얼굴 인식 등 기능 을 도와 주지 못 할 것 입 니 다.이런 기능 을 하려 면 먼저 그림 을 얻 을 수 있 습 니 다!사용자 가 찍 은 사진 은 먼저 wenxin 서버 에 올 라 간 다음 에 미디어 ID 가 생 겼 습 니 다.저 희 는 이 미디어 ID 로 저희 서버 에 다운로드 한 다음 에 처리 할 수 있 습 니 다.결 과 를 위 챗 플랫폼 에 주 고 위 챗 플랫폼 에서 최종 적 으로 사용자(관심 자)에 게 피드백 할 수 있 습 니 다.위 챗 의 개발 문 서 는 이미 자원 을 다운로드 하 는 방법 을 제 시 했 습 니 다.저 는.net 으로 개조 한 것 은 다음 과 같 습 니 다.

/// <SUMMARY> 
  ///          ,          
  /// </SUMMARY> 
  /// <PARAM name="ACCESS_TOKEN"></PARAM> 
  /// <PARAM name="MEDIA_ID"></PARAM> 
  /// <RETURNS></RETURNS> 
  public string GetMultimedia(string ACCESS_TOKEN, string MEDIA_ID) 
  { 
    string file = string.Empty; 
    string content = string.Empty; 
    string strpath = string.Empty; 
    string savepath = string.Empty; 
    string stUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=" + ACCESS_TOKEN + "&media_id=" + MEDIA_ID; 
 
    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(stUrl); 
 
    req.Method = "GET"; 
    using (WebResponse wr = req.GetResponse()) 
    { 
      HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse(); 
 
      strpath = myResponse.ResponseUri.ToString(); 
      WriteLog("    ://" + myResponse.ContentType); 
      WebClient mywebclient = new WebClient(); 
      savepath = Server.MapPath("image") + "\\" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + (new Random()).Next().ToString().Substring(0, 4) + ".jpg"; 
      WriteLog("  ://" + savepath); 
      try
      { 
        mywebclient.DownloadFile(strpath, savepath); 
        file = savepath; 
      } 
      catch (Exception ex) 
      { 
        savepath = ex.ToString(); 
      } 
 
    } 
    return file; 
  } 
위의 두 매개 변 수 는 이해 하기 쉽 습 니 다.첫 번 째 는 ACCESS 입 니 다.TOKEN,전에 많이 말 했 습 니 다.두 번 째 는 위 챗 서버 에 있 는 자원 id,즉 미디어 ID 입 니 다.우리 가 위 챗 서버 에 있 는 자원 을 다운로드 하려 면 id 를 알 아야 지.하지만 MEDIAID 는 또 어떻게 생 겼 을까요?저 는 먼저 이전의 메시지 실체 류 를 개조 하여 MediaId 속성 을 추가 하 겠 습 니 다.

class wxmessage  
 {  
   public string FromUserName { get; set; }  
   public string ToUserName { get; set; }  
    public string MsgType { get; set; }  
    public string EventName { get; set; }  
    public string Content { get; set; } 
    public string Recognition { get; set; } 
    public string MediaId { get; set; } 
    public string EventKey { get; set; } 
  } 
그리고 GetWxMessage()를 개조 하여 MediaId 에 값 을 부여 합 니 다. 

private wxmessage GetWxMessage() 
   { 
     wxmessage wx = new wxmessage(); 
     StreamReader str = new StreamReader(Request.InputStream, System.Text.Encoding.UTF8); 
     XmlDocument xml = new XmlDocument(); 
     xml.Load(str); 
     wx.ToUserName = xml.SelectSingleNode("xml").SelectSingleNode("ToUserName").InnerText; 
     wx.FromUserName = xml.SelectSingleNode("xml").SelectSingleNode("FromUserName").InnerText; 
     wx.MsgType = xml.SelectSingleNode("xml").SelectSingleNode("MsgType").InnerText; 
     if (wx.MsgType.Trim() == "text") 
     { 
       wx.Content = xml.SelectSingleNode("xml").SelectSingleNode("Content").InnerText; 
     } 
     if (wx.MsgType.Trim() == "event") 
     { 
       wx.EventName = xml.SelectSingleNode("xml").SelectSingleNode("Event").InnerText; 
       wx.EventKey = xml.SelectSingleNode("xml").SelectSingleNode("EventKey").InnerText; 
     } 
     if (wx.MsgType.Trim() == "voice") 
     { 
       wx.Recognition = xml.SelectSingleNode("xml").SelectSingleNode("Recognition").InnerText; 
     } 
    if (wx.MsgType.Trim() == "image") 
    { 
      wx.MediaId = xml.SelectSingleNode("xml").SelectSingleNode("MediaId").InnerText; 
    } 
      
     return wx; 
   } 
만약 에 우리 가 메시지 가 받 아들 인 코드 를 수정 하면 고객 이 위 챗 플랫폼 에 사진 을 보 내 고 프로그램 이 그림 을 검 측 한 다음 에 MediaId 에 따라 GetMultimedia 방법 으로 그림 을 자신의 서버 에 다운로드 할 수 있 습 니 다.뒷 일 이 잖 아,하고 싶 은 대로 해.
방금 의 예 는 사용자(관심 자)인 것 같 습 니 다.그림 을 보 낸 다음 에 위 챗 플랫폼 을 통 해 저희 서버 에 들 어 왔 습 니 다.또 다른 상황 이 있 습 니 다.사용자 가 사용자 이름 을 보 냈 습 니 다.예 를 들 어'hemeng'입 니 다.그리고 저 는 서버 에 존재 하 는 hemeng 프로필 사진 을 사용자 에 게 피드백 해 야 합 니 다.어떻게 해 야 합 니까?어떻게 우리 의 사진 을 위 챗 플랫폼 에 전송 한 후에 사용자 에 게 전달 합 니까?우 리 는 업로드 하 는 방법 을 사용 했다.

/// <SUMMARY> 
  ///        ,   MediaId 
  /// </SUMMARY> 
  /// <PARAM name="ACCESS_TOKEN"></PARAM> 
  /// <PARAM name="Type"></PARAM> 
  /// <RETURNS></RETURNS> 
  public string UploadMultimedia(string ACCESS_TOKEN, string Type) 
  { 
    string result = ""; 
    string wxurl = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=" + ACCESS_TOKEN + "&type=" + Type; 
    string filepath = Server.MapPath("image") + "\\hemeng80.jpg";(        ) 
    WriteLog("    :" + filepath); 
    WebClient myWebClient = new WebClient(); 
    myWebClient.Credentials = CredentialCache.DefaultCredentials; 
    try
    { 
      byte[] responseArray = myWebClient.UploadFile(wxurl, "POST", filepath); 
      result = System.Text.Encoding.Default.GetString(responseArray, 0, responseArray.Length); 
      WriteLog("  result:" + result); 
      UploadMM _mode = JsonHelper.ParseFromJson<UPLOADMM>(result); 
      result = _mode.media_id; 
    } 
    catch (Exception ex) 
    { 
      result = "Error:" + ex.Message; 
    } 
    WriteLog("  MediaId:" + result); 
    return result; 
  } 
두 번 째 매개 변 수 는 그림'image'라면 위 챗 문 서 를 참조 할 수 있 습 니 다.함수 의 반환 값 은 MediaId 입 니 다.그러면 그림 을 보 내 는 함 수 를 이용 하여 고객 에 게 보 낼 수 있 습 니 다.그림 을 보 내 는 함 수 는 다음 과 같 습 니 다. 

protected string sendPicTextMessage(Msg _mode, string MediaId) 
  { 
    string res = string.Format(@"<xml>
                      <ToUserName><![CDATA[{0}]]></ToUserName>
                      <FromUserName><![CDATA[{1}]]></FromUserName>
                      <CreateTime>{2}</CreateTime>
                      <MsgType><![CDATA[image]]></MsgType>
                      <Image>
                      <MediaId><![CDATA[{3}]]></MediaId>
                      </Image>
                  </xml> ", 
      _mode.FromUserName, _mode.ToUserName, DateTime.Now, MediaId); 
 
    return res; 
  } 

다른 동 영상 도 음성 조작 이 비슷 해 더 이상 소개 하지 않 겠 습 니 다.이런 지식 이 있 으 면 우 리 는 많은 응용 을 할 수 있 습 니까?물론 긍정 적 이지 만 우리 의 코드 는 최적화 되 지 않 고 구조 도 합 리 적 이지 않 으 며 조급해 하지 않 습 니 다.우 리 는 점차적으로 소개 할 것 입 니 다.왜냐하면 우 리 는 아직 위 챗 의 강력 한 기능 을 완전히 이해 하지 못 했 기 때 문 입 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기