1. 程式人生 > >公眾號調用微信上傳圖片接口(商品評論的圖片)

公眾號調用微信上傳圖片接口(商品評論的圖片)

微信 公眾號 圖片接口

<body>
    <div>
        <input type="button" value="頭像"  onclick="chooseImage()"/>
        <div >       
           <input type="button" value="重選" onclick="chooseImage()"/>
            <input type="button" value="上傳"  onclick="Upload()"/>
        </div>
    </div>
</body>
  <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">

    $(function () {
        var url = location.href.split(‘#‘)[0];
        var date = "url=" + url;
        //get中url指後臺處理的url,生成簽名返回給前端
        $.get(url",date, function (data) {
            var da = $.parseJSON(data);
            wx.config({
                debug: false, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。
                appId: da.appid, // 必填,公眾號的唯一標識
                timestamp: da.timeStamp, // 必填,生成簽名的時間戳
                nonceStr: da.nonceStr, // 必填,生成簽名的隨機串
                signature: da.signature,// 必填,簽名,見附錄1
                jsApiList: ["chooseImage", "uploadImage", "downloadImage"] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2
            });
            wx.ready(function () {
                //alert("wx.config success.");
                // config信息驗證後會執行ready方法,所有接口調用都必須在config接口獲得結果之後,config是一個客戶端的異步操作,所以如果需要在頁面加載時就調用相關接口,則須把相關接口放在ready函數中調用來確保正確執行。對於用戶觸發時才調用的接口,則可以直接調用,不需要放在ready函數中。
            });
            wx.error(function (res) {
                alert("wx.config failed.");
                // config信息驗證失敗會執行error函數,如簽名過期導致驗證失敗,具體錯誤信息可以打開config的debug模式查看,
                // 也可以在返回的res參數中查看,對於SPA可以在這裏更新簽名。
            });
        })
         
    })
    var images;    
        function chooseImage() {
            wx.chooseImage({
                count: 1, // 默認9
                sizeType: [‘original‘, ‘compressed‘], // 可以指定是原圖還是壓縮圖,默認二者都有
                sourceType: [‘album‘, ‘camera‘], // 可以指定來源是相冊還是相機,默認二者都有
                success: function (res) {
                    var localIds = res.localIds; // 返回選定照片的本地ID列表,localId可以作為img標簽的src屬性顯示圖片               
                }
            });
        }
        
        function uploadImage(localId) {
            wx.uploadImage({
                localId: localId, // 需要上傳的圖片的本地ID,由chooseImage接口獲得
                isShowProgressTips: 1, // 默認為1,顯示進度提示
                success: function (res) {
                    var serverId = res.serverId; // 返回圖片的服務器端ID
                    var data="serverId="+serverId;
                     //get中url指後臺處理的url,生成簽名返回給前端
                  $.get("url",data,function(r){
                  if(r>0){
                  
                  alert("成功");
                  }else
                  alert("系統異常!,聯系管理員");
                  
                  })
                }
            });
        }
        function Upload(){
            uploadImage(images);
        }
</script>
  //後端接收方法,生成簽名的後臺
  [HttpGet]
        public ActionResult XXXX(string url)
        {          
            string timeStamp = getTimestamp();//時間
            string nonceStr = getNoncestr();//隨機數
            string signature = Weixinjsapi_ticket(timeStamp, nonceStr, url);
            string appid = appid;
            String json = "{";
            json += "\"timeStamp\":" + "\"" + timeStamp + "\",";
            json += "\"nonceStr\":" + "\"" + nonceStr + "\",";
            json += "\"signature\":" + "\"" + signature + "\",";
            json += "\"appid\":" + "\"" + appid + "\"";
            json += "}";

            return Content(json);
        }
        //後端接收方法,下載圖片
         [HttpGet]
        public ActionResult XXXX(string mediaId)
        {         
        try{
        if(mediaId!=null&&mediaId!=""){
          xxxxx(圖片的名稱,mediaId);
          return Content("1");
          }
          }
          catch(){}
          return Content("0");
        }
          /// <summary>
        /// 隨機串
        /// </summary>
        public static string getNoncestr()
        {
            Random random = new Random();
            return MD5Util.GetMD5(random.Next(1000).ToString(), "GBK").ToLower().Replace("s", "S");
        }





        /// <summary>
        /// 時間截,自1970年以來的秒數
        /// </summary>
        public static string getTimestamp()
        {
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return Convert.ToInt64(ts.TotalSeconds).ToString();
        }
        
     /// <summary>
      /// 保存憑證
      /// </summary>
      public static string Asscess { set; get; }
    /// <summary>
    /// jsp_api 簽名參數
    /// </summary>
     public static string jsapi_ticket{set;get;}
      /// <summary>
     /// 保存憑證時間
      /// </summary>
     public static DateTime Asscess_Time { set; get; }
     /// <summary>
     /// 保存jsp_api時間
     /// </summary>
     public static DateTime Jsp_Api_Time { set; get; }
      /// <summary>
      /// 獲取signature
      /// </summary>
      /// <returns></returns>
      public string Weixinjsapi_ticket(string  timeStamp, string nonceStr,string url)
      {       
          if (Asscess == null)
          {
              string token = GetToken(appid, secret);
              Asscess = token;
              Asscess_Time = DateTime.Now;
          }
          else
          {
              DateTime time = DateTime.Now;

              if ((time - Asscess_Time).TotalSeconds > 7000)
              {
                  string token =GetToken(appid, secret);
                  Asscess = token;
                  Asscess_Time = DateTime.Now;
              }
          }
          if (jsapi_ticket == null)
          {
              jsapi_ticket = getjsapi_ticket(Asscess);
              Jsp_Api_Time = DateTime.Now;
          }
          else {
              DateTime time = DateTime.Now;
              if ((time - Jsp_Api_Time).TotalSeconds > 7000) {
                  jsapi_ticket = getjsapi_ticket(Asscess);
                  Jsp_Api_Time = DateTime.Now;
              }

          }        
          string string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonceStr + "&timestamp=" + timeStamp + "&url="+url;
          string signature = sha1(string1);
          return signature;
      }
        
        
            #region 獲取Token
        /// <summary>
        /// 獲取Token
        /// </summary>
        public static string GetToken(string appid, string secret)
        {
            var strJson = HttpRequestutil.RequestUrl(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, secret),"get");
            JavaScriptSerializer json = new JavaScriptSerializer();
            token tk = json.Deserialize<token>(strJson);
            return tk.access_token;
        }
        
         /// <summary>
        /// 獲取jsapi_ticket
        /// </summary>
        /// <returns></returns>
        public static string getjsapi_ticket(string Asscess) {
            var strJson = RequestUrl(string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", Asscess), "get");
            JavaScriptSerializer json = new JavaScriptSerializer();
            token tk = json.Deserialize<token>(strJson);
            return tk.ticket;
        }
        
        
           /// <summary>
        /// 請求Url,不發送數據
        ///  Method  發送類型(post,get)
        /// </summary>
        public static string RequestUrl(string url, string method)
        {
            // 設置參數
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            CookieContainer cookieContainer = new CookieContainer();
            request.CookieContainer = cookieContainer;
            request.AllowAutoRedirect = true;
            request.Method = method;
            request.ContentType = "text/html";
            request.Headers.Add("charset", "utf-8");

            //發送請求並獲取相應回應數據
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            //直到request.GetResponse()程序才開始向目標網頁發送Post請求
            Stream responseStream = response.GetResponseStream();
            StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
            //返回結果網頁(html)代碼
            string content = sr.ReadToEnd();
            return content;
        }
        
          [Serializable]
    public class token
    {
        /// <summary>
        /// 憑證
        /// </summary>
        public string access_token { set; get; }
        /// <summary>
        /// 有效時間
        /// </summary>
        public string expires_in { set; get; }
        /// <summary>
        /// jsp_api簽到憑證
        /// </summary>
        public string ticket { set; get; }
    }
    
       /// <summary>
        /// SHA1加密
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string sha1(string str)
        {
            return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "sha1");
        }
       /// <summary>
        /// 下載微信頭像圖片
        /// </summary>
        private void xxxxx(string PatnName,string media)
        {
        
          if (Asscess == null)
          {
              string token = GetToken(appid, secret);
              Asscess = token;
              Asscess_Time = DateTime.Now;
          }
          else
          {
              DateTime time = DateTime.Now;

              if ((time - Asscess_Time).TotalSeconds > 7000)
              {
                  string token =GetToken(appid, secret);
                  Asscess = token;
                  Asscess_Time = DateTime.Now;
              }
          }
        
       string   url = string.Format("https://api.weixin.qq.com/cgi-bin/media/get?access_token={0}&media_id={1}", Asscess , media) 
            WebRequest request = WebRequest.Create(url);
            WebResponse response = request.GetResponse();
            Stream reader = response.GetResponseStream();
            FileStream writer = new FileStream(GetPath(PatnName), FileMode.OpenOrCreate, FileAccess.Write);
            byte[] buff = new byte[512];
            int c = 0; //實際讀取的字節數
            while ((c = reader.Read(buff, 0, buff.Length)) > 0)
            {
                writer.Write(buff, 0, c);
            }
            writer.Close();
            writer.Dispose();
            reader.Close();
            reader.Dispose();
            response.Close();

        }
        /// <summary>
        /// 保存圖片地址
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        private string GetPath(string fileName)
        {

            string path = "";//寫上地址
            path = Server.MapPath(path);
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            path += fileName + ".jpg";

            return path;
        }
           public const string appid = "";//公眾號ID
        public const string secret = "";//微信公眾號的secret


公眾號調用微信上傳圖片接口(商品評論的圖片)