记一次微信公众号的开发与后台搭建

一.背景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#

相关文章
相关标签/搜索