記一次微信公衆號的開發與後臺搭建

一.背景css

  剛入新公司不久,就遇見一個同事要離職,就交接了這個項目給我。同事的離職比較倉促,因此交接的也不是很好,這也是後面問題偏多的一個客觀緣由。項目如題所示,前端採用vue.js+node.js開發,後臺採用c#開發接口,還須要開發一個c#的網站來展現數據。上一份工做作的是erp,用的是powerbuilder,因此這個項目仍是涉及到比較多的生疏知識。html

二.遇到的問題前端

  1.微信測試環境搭建vue

    微信的測試環境搭建仍是比較麻煩的(對於新手來講),可是我回過頭去看的時候,也不知道該寫些什麼,仍是網上找教程吧。node

2.微信錄音上傳下載
  微信錄音若是想要下載的指定路徑,須要先上傳錄音到微信服務器,再根據返回的serverId(即下載的MEDIA_ID)去微信提供的接口下載到你目標路徑,微信測試環境沒問題的話,按照這個基本上就沒有問題,不過調試之類的比較麻煩,只能經過寫日誌的方式查看。微信也提供了一個供測試的界面,輸入參數,能夠獲取報錯信息。
/// <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 strpath = string.Empty;
            string stUrl = Common.TextHelper.WXUploadMediaUrl+"?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();

                WebClient mywebclient = new WebClient();
                string basePath = AppDomain.CurrentDomain.BaseDirectory + "Attachment";//附件臨時存放路徑
                string amrFile = DateTime.Now.ToString("yyyyMMddhhmmssms")+".amr";
                string mp3File= DateTime.Now.ToString("yyyyMMddhhmmssms")+".mp3";
                try
                {
                    mywebclient.DownloadFile(strpath, Path.Combine(basePath, amrFile));
                    ConvertToMp3(Path.Combine(basePath, amrFile), Path.Combine(basePath, mp3File));
                    file = mp3File;
                    //file = amrFile;
                }
                catch (Exception ex)
                {
                    //savepath = ex.ToString();
                }

            }
            return file ;
        }
View Code

 

3.微信錄音格式轉換
  amr格式的文件,網頁不能播放,因此須要轉換成MP3格式,查看了許多都選擇使用第三方工具ffmpeg。剛開始使用的時候,遇到了MP3能夠轉成wav格式,可是amr格式不能轉成mp3的尷尬局面。折騰了許久,後面通過檢查才發現用於測試的amr文件壞掉了。這個故事告訴咱們必定要細心,還有遇到問題不用慌,深呼吸一口氣,從頭檢查一遍,或許會有收穫。
public string ConvertToMp3(string pathBefore, string pathLater)
         {
             string c = System.Web.HttpContext.Current.Server.MapPath("/ffmpeg/") + @"ffmpeg.exe -i " + pathBefore + " " + pathLater;
             log.WriteLine(c);
             string str = RunCmd(c);
             return str;
         }

        /// <summary>
        /// 執行Cmd命令
        /// </summary>
        private string RunCmd(string c)
        {
            try
            {
                ProcessStartInfo info = new ProcessStartInfo("cmd.exe");
                info.RedirectStandardOutput = false;
                info.UseShellExecute = false;
                Process p = Process.Start(info);
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardInput = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.RedirectStandardError = true;
                p.Start();
                p.StandardInput.WriteLine(c);
                p.StandardInput.AutoFlush = true;
                Thread.Sleep(1000);
                p.StandardInput.WriteLine("exit");
                p.WaitForExit();
                string outStr = p.StandardOutput.ReadToEnd();
                p.Close();

                return outStr;
            }
            catch (Exception ex)
            {
                return "error" + ex.Message;
            }
        }
View Code
 
 
4.路徑正確,卻沒法獲取附件(iis mine類型配置)
  公衆號提交的信息包含圖片、音頻、視頻,上傳到服務器後都是放在同一個文件夾,可是網頁顯示的時候,圖片能夠訪問,音頻、視頻卻提示不能訪問。問了老大才知道iis上mine類型須要加下配置。因爲我以前作的不是網頁開發,甚至不是c#開發,因此不少坑還沒踩過,只能一個個踩過去,纔會長記性。所謂經驗,大概就是踩過的坑比較多吧!
5.圖片旋轉
  這個卻是沒什麼好說的,圖片旋轉的簡單實現而已
 
function rotate(row)
{
    var deg = eval('get' + $("#" + row).css('transform'));//構造getmatrix函數,返回上次旋轉度數  
    var step = 90;//每次旋轉多少度  
    $("#" + row).css({ 'transform': 'rotate(' + (deg + step) % 360 + 'deg)' });
}

function getmatrix(a, b, c, d, e, f) {
    var aa = Math.round(180 * Math.asin(a) / Math.PI);
    var bb = Math.round(180 * Math.acos(b) / Math.PI);
    var cc = Math.round(180 * Math.asin(c) / Math.PI);
    var dd = Math.round(180 * Math.acos(d) / Math.PI);
    var deg = 0;
    if (aa == bb || -aa == bb) {
        deg = dd;
    } else if (-aa + bb == 180) {
        deg = 180 + cc;
    } else if (aa + bb == 180) {
        deg = 360 - cc || 360 - dd;
    }
    return deg >= 360 ? 0 : deg;
    //return (aa+','+bb+','+cc+','+dd);  
}
View Code

 參考文檔: http://m.blog.csdn.net/cengjingcanghai123/article/details/53537242web

  
  

三.總結數據庫

  花了將近一個月的時間,雖然過程磕磕碰碰,但整體來講仍是完成了任務。不足之處有不少,好比前端樣式賊醜(雖然我不是前端,不太小公司只能先後端兼收幷蓄了),好比效率略低(這個是由於我以前作的是pb,c#雖然有基礎,可是實際的開發經驗並很少)。大致來講,對本身的表現還算滿意,畢竟涉及到的東西都不太熟悉,一個月的時候可以完成任務,打個60分吧!個人優勢在於邏輯能力與數據庫(上一份工做是作erp的,虐出來),缺點也很明顯(基礎不夠好,因此仍是須要狠補基礎),但願再接再礪!若是寫下的這篇文章可以解決某個猿的部分問題,可讓某些猿少踩一個坑,我就挺開心的!文筆很差,絮絮不休,求輕虐!c#

相關文章
相關標籤/搜索