WeixinJS.cs 4.19 KB
using System;
using System.Collections.Generic;
using System.Net;
using System.Text;
using System.Web;
using Quiz.Models;
using Quiz.Utility;
using WeixinApi;

namespace Quiz.SiteBase
{
    public class WeixinJS
    {
        /// <summary>
        /// 获取JS SDK配置
        /// </summary>
        /// <returns></returns>
        public static WeixinConfig GetWeixinConfig(string typeid)
        {
            var noncestr = Utility.Helper.RandomNumString(16);
            var timestamp = Utility.Helper.GetTimeStamp();
            var url = SiteHelper.CurrentUrl;//"http://" + HttpContext.Current.Request.Headers["host"] + HttpContext.Current.Request.RawUrl;
            var weixin = Cache.CacheManage.Weixin.CacheData.Find(o => o.Account == typeid);
            if (weixin == null) return null;
            //从中心服务站点获取jsticket
            WebClient client = new WebClient();
            client.Encoding = Encoding.UTF8;
            url = string.Format("http://10.25.3.21:81/Index.aspx?typeid={0}", weixin.Account);
            WxAccount account = JsonHelper.ParseFromJson<WxAccount>(client.DownloadString(url));
            Helper.SaveLog("jsticket="+account.JsapiTicket,"jsticket");
            
            return new WeixinConfig()
            {
                AppId = weixin.AppId,
                NonceStr = noncestr,
                Timestamp = timestamp,
                Signature = Utility.Helper.GetSha1(string.Format("jsapi_ticket={0}&noncestr={1}&timestamp={2}&url={3}", account.JsapiTicket, noncestr, timestamp, url))
            };
        }

        /// <summary>
        /// JS SDK配置
        /// </summary>
        public class WeixinConfig
        {
            private const string ApiList = "'checkJsApi','onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','hideMenuItems','showMenuItems','hideAllNonBaseMenuItem','showAllNonBaseMenuItem','translateVoice','startRecord','stopRecord','onRecordEnd','playVoice','pauseVoice','stopVoice','uploadVoice','downloadVoice','chooseImage','previewImage','uploadImage','downloadImage','getNetworkType','openLocation','getLocation','hideOptionMenu','showOptionMenu','closeWindow','scanQRCode','chooseWXPay','openProductSpecificView','addCard','chooseCard','openCard'";
            public string AppId { get; set; }
            public string Timestamp { get; set; }
            public string NonceStr { get; set; }
            public string Signature { get; set; }
            /// <summary>
            /// 配置JS API, 输出到页面
            /// </summary>
            /// <param name="jsapi"></param>
            /// <returns></returns>
            public string Register(params string[] jsapi)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("<script src=\"http://res.wx.qq.com/open/js/jweixin-1.0.0.js\" type=\"text/javascript\"></script>");
                sb.Append("<script type=\"text/javascript\">wx.config({");
                sb.AppendFormat("debug:false,appId: '{0}',timestamp: {1},nonceStr: '{2}',signature: '{3}',", AppId, Timestamp, NonceStr, Signature);
                sb.AppendFormat("jsApiList: [{0}]", jsapi == null || jsapi.Length <= 0 ? ApiList : "'" + string.Join("','", jsapi) + "'");
                sb.Append("});</script>");
                return sb.ToString();
            }
            /// <summary>
            /// 配置JS API, 输出到页面
            /// </summary>
            /// <param name="jsapi"></param>
            /// <returns></returns>
            public string RegisterDebug(params string[] jsapi)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("<script src=\"http://res.wx.qq.com/open/js/jweixin-1.0.0.js\" type=\"text/javascript\"></script>");
                sb.Append("<script type=\"text/javascript\">wx.config({");
                sb.AppendFormat("debug:true,appId: '{0}',timestamp: {1},nonceStr: '{2}',signature: '{3}',", AppId, Timestamp, NonceStr, Signature);
                sb.AppendFormat("jsApiList: [{0}]", jsapi == null || jsapi.Length <= 0 ? ApiList : "'" + string.Join("','", jsapi) + "'");
                sb.Append("});</script>");
                return sb.ToString();
            }
        }
    }
}