WeChat 개발 노트 - 사용자 정의 공유 인터페이스 호출

高洛峰
풀어 주다: 2017-02-13 11:21:58
원래의
1565명이 탐색했습니다.

소개:

우리는 직장에서 마이크로사이트라고 불리는 WeChat 웹사이트를 개발합니다. 마이크로사이트의 공유 콘텐츠는 시스템에서 자동으로 선택한 현재 URL이므로 고객은 공유 콘텐츠를 변경해야 합니다. 즉, 화면 오른쪽 상단에 있는 공유 버튼을 클릭하고 친구에게 보내기 또는 모멘트로 보내기를 선택하세요. 콘텐츠와 사진을 맞춤설정해야 합니다. 그래서 WeChat JS-SDK Documentation 문서와 웹사이트에 있는 많은 전문가들의 경험을 찾아보니 통화 단계는 대체적으로 알고 있었지만 통화를 성공시키는 방법은 잘 이해가 되지 않았습니다. 몇 가지 실험 끝에 Send to Friends와 Send to Moments의 두 가지 인터페이스가 마침내 성공적으로 호출되었습니다. 통화의 구체적인 프로세스가 여기에 기록됩니다.

1단계: js 파일을 참조합니다.

JS 인터페이스를 호출해야 하는 페이지에 다음 JS 파일을 삽입합니다(https 지원): http://res.wx.qq.com/open/js/jweixin-1.0.0.js

2단계: 구성 인터페이스를 통해 권한 확인 구성 삽입


wx.config({
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '', // 必填,公众号的唯一标识
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名,见附录1
    jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
로그인 후 복사


다수 인터넷상의 네티즌들도 이런 글을 썼는데 구체적인 구성에 대해서는 거의 이야기가 없습니다. 다음으로 이 글에서 어떻게 부르는지 소개하겠습니다.

디버그와 appId는 말할 필요도 없이 매우 간단합니다.

timespan은 서명된 타임스탬프를 생성합니다.


/// <summary>
        /// 生成时间戳
        /// 从 1970 年 1 月 1 日 00:00:00 至今的秒数,即当前的时间,且最终需要转换为字符串形式
        /// </summary>
        /// <returns></returns>
        public string getTimestamp()
        {
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return Convert.ToInt64(ts.TotalSeconds).ToString();
        }
로그인 후 복사


nonceStr은 서명된 임의 문자열을 생성합니다.


/// <summary>
        /// 生成随机字符串
        /// </summary>
        /// <returns></returns>
        public string getNoncestr()
        {
            Random random = new Random();
            return MD5Util.GetMD5(random.Next(1000).ToString(), "GBK");
        }
로그인 후 복사


/// <summary>
    /// MD5Util 的摘要说明。    /// </summary>
    public class MD5Util
    {        public MD5Util()
        {            //
            // TODO: 在此处添加构造函数逻辑            
            //        
            }        
            /** 获取大写的MD5签名结果 */
        public static string GetMD5(string encypStr, string charset)
        {            string retStr;
            MD5CryptoServiceProvider m5 = new MD5CryptoServiceProvider();            
            //创建md5对象
            byte[] inputBye;            byte[] outputBye;            
            //使用GB2312编码方式把字符串转化为字节数组.
            try
            {
                inputBye = Encoding.GetEncoding(charset).GetBytes(encypStr);
            }            catch (Exception ex)
            {
                inputBye = Encoding.GetEncoding("GB2312").GetBytes(encypStr);
            }
            outputBye = m5.ComputeHash(inputBye);

            retStr = System.BitConverter.ToString(outputBye);
            retStr = retStr.Replace("-", "").ToUpper();            
            return retStr;
        }
    }
로그인 후 복사


코드 보기

rree


싱글 시그니처 생성이 더 귀찮습니다.

먼저 access_token을 생성하고 획득하세요(유효 기간은 7200초, 개발자는 자신의 서비스에서 전역적으로 access_token을 캐시해야 합니다)


/// <summary>
    /// MD5Util 的摘要说明。
    /// </summary>
    public class MD5Util
    {
        public MD5Util()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }

        /** 获取大写的MD5签名结果 */
        public static string GetMD5(string encypStr, string charset)
        {
            string retStr;
            MD5CryptoServiceProvider m5 = new MD5CryptoServiceProvider();

            //创建md5对象
            byte[] inputBye;
            byte[] outputBye;

            //使用GB2312编码方式把字符串转化为字节数组.
            try
            {
                inputBye = Encoding.GetEncoding(charset).GetBytes(encypStr);
            }
            catch (Exception ex)
            {
                inputBye = Encoding.GetEncoding("GB2312").GetBytes(encypStr);
            }
            outputBye = m5.ComputeHash(inputBye);

            retStr = System.BitConverter.ToString(outputBye);
            retStr = retStr.Replace("-", "").ToUpper();
            return retStr;
        }
    }
로그인 후 복사



아아앙


코드 보기

public string Getaccesstoken()
        {
            string appid = System.Configuration.ConfigurationManager.AppSettings["WXZjAppID"].ToString();
            string secret = System.Configuration.ConfigurationManager.AppSettings["WXZjAppSecret"].ToString();
            string urljson = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret;
            string strjson = "";
            UTF8Encoding encoding = new UTF8Encoding();
            HttpWebRequest myRequest =
            (HttpWebRequest)WebRequest.Create(urljson);
            myRequest.Method = "GET";
            myRequest.ContentType = "application/x-www-form-urlencoded";
            HttpWebResponse response;
            Stream responseStream;
            StreamReader reader;
            string srcString;
            response = myRequest.GetResponse() as HttpWebResponse;
            responseStream = response.GetResponseStream();
            reader = new System.IO.StreamReader(responseStream, Encoding.UTF8);
            srcString = reader.ReadToEnd();
            reader.Close();
            if (srcString.Contains("access_token"))
            {
                //CommonJsonModel model = new CommonJsonModel(srcString);
                HP.CPS.BLL.WeiXin.CommonJsonModel model = new BLL.WeiXin.CommonJsonModel(srcString);
                strjson = model.GetValue("access_token");
                Session["access_tokenzj"] = strjson;
            }
            return strjson;
        }
로그인 후 복사


그런 다음 jsapi_ticket을 가져옵니다.

첫 번째 단계에서 얻은 access_token을 사용하여 http GET을 사용하여 jsapi_ticket을 요청합니다. 메서드( 유효 기간은 7200초이며 개발자는 자신의 서비스에서 jsapi_ticket을 전역적으로 캐시해야 합니다)


public class CommonJsonModelAnalyzer
    {        protected string _GetKey(string rawjson)
        {            if (string.IsNullOrEmpty(rawjson))                return rawjson;
            rawjson = rawjson.Trim();            string[] jsons = rawjson.Split(new char[] { &#39;:&#39; });            if (jsons.Length < 2)                return rawjson;            return jsons[0].Replace("\"", "").Trim();
        }        protected string _GetValue(string rawjson)
        {            if (string.IsNullOrEmpty(rawjson))                return rawjson;
            rawjson = rawjson.Trim();            string[] jsons = rawjson.Split(new char[] { &#39;:&#39; }, StringSplitOptions.RemoveEmptyEntries);            if (jsons.Length < 2)                return rawjson;
            StringBuilder builder = new StringBuilder();            for (int i = 1; i < jsons.Length; i++)
            {
                builder.Append(jsons[i]);
                builder.Append(":");
            }            if (builder.Length > 0)
                builder.Remove(builder.Length - 1, 1);            string value = builder.ToString();            if (value.StartsWith("\""))
                value = value.Substring(1);            if (value.EndsWith("\""))
                value = value.Substring(0, value.Length - 1);            return value;
        }        protected List<string> _GetCollection(string rawjson)
        {            //[{},{}]
            List<string> list = new List<string>();            if (string.IsNullOrEmpty(rawjson))                return list;
            rawjson = rawjson.Trim();
            StringBuilder builder = new StringBuilder();            int nestlevel = -1;            int mnestlevel = -1;            for (int i = 0; i < rawjson.Length; i++)
            {                if (i == 0)                    continue;                else if (i == rawjson.Length - 1)                    continue;                char jsonchar = rawjson[i];                if (jsonchar == &#39;{&#39;)
                {
                    nestlevel++;
                }                if (jsonchar == &#39;}&#39;)
                {
                    nestlevel--;
                }                if (jsonchar == &#39;[&#39;)
                {
                    mnestlevel++;
                }                if (jsonchar == &#39;]&#39;)
                {
                    mnestlevel--;
                }                if (jsonchar == &#39;,&#39; && nestlevel == -1 && mnestlevel == -1)
                {
                    list.Add(builder.ToString());
                    builder = new StringBuilder();
                }                else
                {
                    builder.Append(jsonchar);
                }
            }            if (builder.Length > 0)
                list.Add(builder.ToString());            return list;
        }
    }    public class CommonJsonModel : CommonJsonModelAnalyzer
    {        private string rawjson;        private bool isValue = false;        private bool isModel = false;        private bool isCollection = false;        public CommonJsonModel(string rawjson)
        {            this.rawjson = rawjson;            if (string.IsNullOrEmpty(rawjson))                throw new Exception("missing rawjson");
            rawjson = rawjson.Trim();            if (rawjson.StartsWith("{"))
            {
                isModel = true;
            }            else if (rawjson.StartsWith("["))
            {
                isCollection = true;
            }            else
            {
                isValue = true;
            }
        }        public string Rawjson
        {            get { return rawjson; }
        }        public bool IsValue()
        {            return isValue;
        }        public bool IsValue(string key)
        {            if (!isModel)                return false;            if (string.IsNullOrEmpty(key))                return false;            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);                if (!model.IsValue())                    continue;                if (model.Key == key)
                {
                    CommonJsonModel submodel = new CommonJsonModel(model.Value);                    return submodel.IsValue();
                }
            }            return false;
        }        public bool IsModel()
        {            return isModel;
        }        public bool IsModel(string key)
        {            if (!isModel)                return false;            if (string.IsNullOrEmpty(key))                return false;            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);                if (!model.IsValue())                    continue;                if (model.Key == key)
                {
                    CommonJsonModel submodel = new CommonJsonModel(model.Value);                    return submodel.IsModel();
                }
            }            return false;
        }        public bool IsCollection()
        {            return isCollection;
        }        public bool IsCollection(string key)
        {            if (!isModel)                return false;            if (string.IsNullOrEmpty(key))                return false;            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);                if (!model.IsValue())                    continue;                if (model.Key == key)
                {
                    CommonJsonModel submodel = new CommonJsonModel(model.Value);                    return submodel.IsCollection();
                }
            }            return false;
        }        /// <summary>
        /// 当模型是对象,返回拥有的key        /// </summary>
        /// <returns></returns>
        public List<string> GetKeys()
        {            if (!isModel)                return null;
            List<string> list = new List<string>();            foreach (string subjson in base._GetCollection(this.rawjson))
            {                string key = new CommonJsonModel(subjson).Key;                if (!string.IsNullOrEmpty(key))
                    list.Add(key);
            }            return list;
        }        /// <summary>
        /// 当模型是对象,key对应是值,则返回key对应的值        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string GetValue(string key)
        {            if (!isModel)                return null;            if (string.IsNullOrEmpty(key))                return null;            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);                if (!model.IsValue())                    continue;                if (model.Key == key)                    return model.Value;
            }            return null;
        }        /// <summary>
        /// 模型是对象,key对应是对象,返回key对应的对象        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public CommonJsonModel GetModel(string key)
        {            if (!isModel)                return null;            if (string.IsNullOrEmpty(key))                return null;            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);                if (!model.IsValue())                    continue;                if (model.Key == key)
                {
                    CommonJsonModel submodel = new CommonJsonModel(model.Value);                    if (!submodel.IsModel())                        return null;                    else
                        return submodel;
                }
            }            return null;
        }        /// <summary>
        /// 模型是对象,key对应是集合,返回集合        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public CommonJsonModel GetCollection(string key)
        {            if (!isModel)                return null;            if (string.IsNullOrEmpty(key))                return null;            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);                if (!model.IsValue())                    continue;                if (model.Key == key)
                {
                    CommonJsonModel submodel = new CommonJsonModel(model.Value);                    if (!submodel.IsCollection())                        return null;                    else
                        return submodel;
                }
            }            return null;
        }        /// <summary>
        /// 模型是集合,返回自身        /// </summary>
        /// <returns></returns>
        public List<CommonJsonModel> GetCollection()
        {
            List<CommonJsonModel> list = new List<CommonJsonModel>();            if (IsValue())                return list;            foreach (string subjson in base._GetCollection(rawjson))
            {
                list.Add(new CommonJsonModel(subjson));
            }            return list;
        }        /// <summary>
        /// 当模型是值对象,返回key        /// </summary>
        private string Key
        {            get
            {                if (IsValue())                    return base._GetKey(rawjson);                return null;
            }
        }        /// <summary>
        /// 当模型是值对象,返回value        /// </summary>
        private string Value
        {            get
            {                if (!IsValue())                    return null;                return base._GetValue(rawjson);
            }
        }
    }
로그인 후 복사


마지막으로 서명 생성:


public class CommonJsonModelAnalyzer
    {
        protected string _GetKey(string rawjson)
        {
            if (string.IsNullOrEmpty(rawjson))
                return rawjson;
            rawjson = rawjson.Trim();
            string[] jsons = rawjson.Split(new char[] { &#39;:&#39; });
            if (jsons.Length < 2)
                return rawjson;
            return jsons[0].Replace("\"", "").Trim();
        }
        protected string _GetValue(string rawjson)
        {
            if (string.IsNullOrEmpty(rawjson))
                return rawjson;
            rawjson = rawjson.Trim();
            string[] jsons = rawjson.Split(new char[] { &#39;:&#39; }, StringSplitOptions.RemoveEmptyEntries);
            if (jsons.Length < 2)
                return rawjson;
            StringBuilder builder = new StringBuilder();
            for (int i = 1; i < jsons.Length; i++)
            {
                builder.Append(jsons[i]);
                builder.Append(":");
            }
            if (builder.Length > 0)
                builder.Remove(builder.Length - 1, 1);
            string value = builder.ToString();
            if (value.StartsWith("\""))
                value = value.Substring(1);
            if (value.EndsWith("\""))
                value = value.Substring(0, value.Length - 1);
            return value;
        }
        protected List<string> _GetCollection(string rawjson)
        {
            //[{},{}]
            List<string> list = new List<string>();
            if (string.IsNullOrEmpty(rawjson))
                return list;
            rawjson = rawjson.Trim();
            StringBuilder builder = new StringBuilder();
            int nestlevel = -1;
            int mnestlevel = -1;
            for (int i = 0; i < rawjson.Length; i++)
            {
                if (i == 0)
                    continue;
                else if (i == rawjson.Length - 1)
                    continue;
                char jsonchar = rawjson[i];
                if (jsonchar == &#39;{&#39;)
                {
                    nestlevel++;
                }
                if (jsonchar == &#39;}&#39;)
                {
                    nestlevel--;
                }
                if (jsonchar == &#39;[&#39;)
                {
                    mnestlevel++;
                }
                if (jsonchar == &#39;]&#39;)
                {
                    mnestlevel--;
                }
                if (jsonchar == &#39;,&#39; && nestlevel == -1 && mnestlevel == -1)
                {
                    list.Add(builder.ToString());
                    builder = new StringBuilder();
                }
                else
                {
                    builder.Append(jsonchar);
                }
            }
            if (builder.Length > 0)
                list.Add(builder.ToString());
            return list;
        }
    }

    public class CommonJsonModel : CommonJsonModelAnalyzer
    {
        private string rawjson;
        private bool isValue = false;
        private bool isModel = false;
        private bool isCollection = false;
        public CommonJsonModel(string rawjson)
        {
            this.rawjson = rawjson;
            if (string.IsNullOrEmpty(rawjson))
                throw new Exception("missing rawjson");
            rawjson = rawjson.Trim();
            if (rawjson.StartsWith("{"))
            {
                isModel = true;
            }
            else if (rawjson.StartsWith("["))
            {
                isCollection = true;
            }
            else
            {
                isValue = true;
            }
        }
        public string Rawjson
        {
            get { return rawjson; }
        }
        public bool IsValue()
        {
            return isValue;
        }
        public bool IsValue(string key)
        {
            if (!isModel)
                return false;
            if (string.IsNullOrEmpty(key))
                return false;
            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);
                if (!model.IsValue())
                    continue;
                if (model.Key == key)
                {
                    CommonJsonModel submodel = new CommonJsonModel(model.Value);
                    return submodel.IsValue();
                }
            }
            return false;
        }
        public bool IsModel()
        {
            return isModel;
        }
        public bool IsModel(string key)
        {
            if (!isModel)
                return false;
            if (string.IsNullOrEmpty(key))
                return false;
            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);
                if (!model.IsValue())
                    continue;
                if (model.Key == key)
                {
                    CommonJsonModel submodel = new CommonJsonModel(model.Value);
                    return submodel.IsModel();
                }
            }
            return false;
        }
        public bool IsCollection()
        {
            return isCollection;
        }
        public bool IsCollection(string key)
        {
            if (!isModel)
                return false;
            if (string.IsNullOrEmpty(key))
                return false;
            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);
                if (!model.IsValue())
                    continue;
                if (model.Key == key)
                {
                    CommonJsonModel submodel = new CommonJsonModel(model.Value);
                    return submodel.IsCollection();
                }
            }
            return false;
        }

        /// <summary>
        /// 当模型是对象,返回拥有的key
        /// </summary>
        /// <returns></returns>
        public List<string> GetKeys()
        {
            if (!isModel)
                return null;
            List<string> list = new List<string>();
            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                string key = new CommonJsonModel(subjson).Key;
                if (!string.IsNullOrEmpty(key))
                    list.Add(key);
            }
            return list;
        }
        /// <summary>
        /// 当模型是对象,key对应是值,则返回key对应的值
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string GetValue(string key)
        {
            if (!isModel)
                return null;
            if (string.IsNullOrEmpty(key))
                return null;
            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);
                if (!model.IsValue())
                    continue;
                if (model.Key == key)
                    return model.Value;
            }
            return null;
        }
        /// <summary>
        /// 模型是对象,key对应是对象,返回key对应的对象
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public CommonJsonModel GetModel(string key)
        {
            if (!isModel)
                return null;
            if (string.IsNullOrEmpty(key))
                return null;
            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);
                if (!model.IsValue())
                    continue;
                if (model.Key == key)
                {
                    CommonJsonModel submodel = new CommonJsonModel(model.Value);
                    if (!submodel.IsModel())
                        return null;
                    else
                        return submodel;
                }
            }
            return null;
        }
        /// <summary>
        /// 模型是对象,key对应是集合,返回集合
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public CommonJsonModel GetCollection(string key)
        {
            if (!isModel)
                return null;
            if (string.IsNullOrEmpty(key))
                return null;
            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);
                if (!model.IsValue())
                    continue;
                if (model.Key == key)
                {
                    CommonJsonModel submodel = new CommonJsonModel(model.Value);
                    if (!submodel.IsCollection())
                        return null;
                    else
                        return submodel;
                }
            }
            return null;
        }
        /// <summary>
        /// 模型是集合,返回自身
        /// </summary>
        /// <returns></returns>
        public List<CommonJsonModel> GetCollection()
        {
            List<CommonJsonModel> list = new List<CommonJsonModel>();
            if (IsValue())
                return list;
            foreach (string subjson in base._GetCollection(rawjson))
            {
                list.Add(new CommonJsonModel(subjson));
            }
            return list;
        }


        /// <summary>
        /// 当模型是值对象,返回key
        /// </summary>
        private string Key
        {
            get
            {
                if (IsValue())
                    return base._GetKey(rawjson);
                return null;
            }
        }
        /// <summary>
        /// 当模型是值对象,返回value
        /// </summary>
        private string Value
        {
            get
            {
                if (!IsValue())
                    return null;
                return base._GetValue(rawjson);
            }
        }
    }
로그인 후 복사
public string Getjsapi_ticket()
        {
            string accesstoken = (string)Session["access_tokenzj"];
            string urljson = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accesstoken + "&type=jsapi";
            string strjson = "";
            UTF8Encoding encoding = new UTF8Encoding();
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(urljson);
            myRequest.Method = "GET";
            myRequest.ContentType = "application/x-www-form-urlencoded";
            HttpWebResponse response = myRequest.GetResponse() as HttpWebResponse;
            Stream responseStream = response.GetResponseStream();
            StreamReader reader = new System.IO.StreamReader(responseStream, Encoding.UTF8);
            string srcString = reader.ReadToEnd();
            reader.Close();
            if (srcString.Contains("ticket"))
            {
                HP.CPS.BLL.WeiXin.CommonJsonModel model = new BLL.WeiXin.CommonJsonModel(srcString);
                strjson = model.GetValue("ticket");
                Session["ticketzj"] = strjson;
            }

            return strjson;
        }
로그인 후 복사
public string Getsignature(string nonceStr, string timespanstr)
        {
            if (Session["access_tokenzj"] == null)
            {
                Getaccesstoken();
            }
            if (Session["ticketzj"] == null)
            {
                Getjsapi_ticket();
            }

            string url = Request.Url.ToString();

            string str = "jsapi_ticket=" + (string)Session["ticketzj"] + "&noncestr=" + nonceStr +
                "&timestamp=" + timespanstr + "&url=" + url;// +"&wxref=mp.weixin.qq.com";
            string singature = SHA1Util.getSha1(str);
            string ss = singature;
            return ss;
        }
로그인 후 복사


코드 보기

이 문서의 호출 예:


class SHA1Util
    {
        public static String getSha1(String str)
        {
            //建立SHA1对象
            SHA1 sha = new SHA1CryptoServiceProvider();
            //将mystr转换成byte[] 
            ASCIIEncoding enc = new ASCIIEncoding();
            byte[] dataToHash = enc.GetBytes(str);
            //Hash运算
            byte[] dataHashed = sha.ComputeHash(dataToHash);
            //将运算结果转换成string
            string hash = BitConverter.ToString(dataHashed).Replace("-", "");
            return hash;
        }
    }
로그인 후 복사


3단계: 인터페이스 호출

완료 후 두 번째 단계를 호출하고 나면 세 번째 단계는 매우 쉬워집니다.

class SHA1Util
    {        public static String getSha1(String str)
        {            //建立SHA1对象
            SHA1 sha = new SHA1CryptoServiceProvider();            //将mystr转换成byte[] 
            ASCIIEncoding enc = new ASCIIEncoding();            byte[] dataToHash = enc.GetBytes(str);            //Hash运算
            byte[] dataHashed = sha.ComputeHash(dataToHash);            //将运算结果转换成string
            string hash = BitConverter.ToString(dataHashed).Replace("-", "");            return hash;
        }
    }
로그인 후 복사

이 기사의 호출 예는 다음과 같습니다.

<script type="text/javascript">
        wx.config({
            debug: false,
            appId: &#39;<%=corpid %>&#39;,
            timestamp: <%=timestamp%>,
            nonceStr: &#39;<%=nonceStr%>&#39;,
            signature: &#39;<%=signature %>&#39;,
            jsApiList: [&#39;onMenuShareTimeline&#39;, &#39;onMenuShareAppMessage&#39;]
        });
    </script>
로그인 후 복사
wx.ready(function(){    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。});
로그인 후 복사

이 기사는 기본적으로 여기에 요약되어 있습니다.

발생하기 쉬운 문제:

1. 배경 설정 여부 확인: 오른쪽 상단 공개 계정 이름--기능 설정--JS 인터페이스 보안 도메인 이름

2 .코드를 확인하세요. appid가 공식계정 백엔드의 id와 일치하나요?

3. 이미지 호출주소는 절대경로입니다(상대경로는 안되는 것 같습니다).

더 많은 WeChat 개발 노트-호출 사용자 정의 공유 인터페이스 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿