Heim WeChat-Applet WeChat-Entwicklung WeChat-Entwicklungsnotizen zum Aufrufen einer benutzerdefinierten Freigabeschnittstelle

WeChat-Entwicklungsnotizen zum Aufrufen einer benutzerdefinierten Freigabeschnittstelle

Feb 13, 2017 am 11:21 AM
Wechat -Entwicklung

Einführung:

Wir entwickeln bei der Arbeit eine WeChat-Website, eine sogenannte Microsite. Da der freigegebene Inhalt der Microsite die aktuelle URL ist, die automatisch vom System ausgewählt wird, müssen Kunden den freigegebenen Inhalt ändern, d. h. auf die Schaltfläche „Teilen“ in der oberen rechten Ecke des Bildschirms klicken und „An Freunde senden“ oder „An Momente senden“ auswählen. Der Inhalt und die Bilder müssen individuell angepasst werden. Also habe ich das Dokument WeChat JS-SDK-Dokumentation und die Erfahrungen vieler Experten auf der Website nachgeschlagen. Ich kannte im Allgemeinen die Schritte des Anrufs, verstand jedoch nicht, wie ich den Anruf erfolgreich durchführen konnte. Nach einigen Experimenten wurden die beiden Schnittstellen „An Freunde senden“ und „An Momente senden“ endlich erfolgreich aufgerufen. Der spezifische Vorgang des Anrufs wird hier aufgezeichnet.

Schritt 1: Referenzieren Sie die js-Datei.

Fügen Sie die folgende JS-Datei in die Seite ein, die die JS-Schnittstelle aufrufen muss (https wird unterstützt): http://res.wx.qq.com/open/js/jweixin-1.0.0.js

Schritt 2: Fügen Sie die Berechtigungsüberprüfungskonfiguration über die Konfigurationsschnittstelle ein


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


Dies ist auch bei vielen Internetnutzern der Fall, aber es wird wenig darüber gesprochen, wie man es in Übereinstimmung bringt. Als nächstes werde ich in diesem Artikel vorstellen, wie man es nennt.

Debug und AppId, natürlich sehr einfach.

timespan generiert den Zeitstempel der Signatur:


/// <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 generiert den Signatur Zufällige Zeichenfolge:


/// <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;
        }
    }


Code anzeigen

/// <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;
        }
    }


Die Erzeugung von Signatursignaturen ist problematischer.

Zuerst das Zugriffstoken generieren und abrufen (Gültigkeitsdauer beträgt 7200 Sekunden, Entwickler müssen das Zugriffstoken global in ihren eigenen Diensten zwischenspeichern)


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;
        }



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);
            }
        }
    }


Code anzeigen

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);
            }
        }
    }


Dann holen Sie sich jsapi_ticket:

Verwenden Sie das im ersten Schritt erhaltene access_token mit http Get jsapi_ticket per GET-Anfrage ( ist 7200 Sekunden lang gültig, Entwickler müssen jsapi_ticket global in ihren eigenen Diensten zwischenspeichern)


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;
        }


Signatur abschließend generieren:


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;
        }
    }
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;
        }
    }


Code anzeigen

Beispiel dieses Artikels aufrufen:


<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>


Schritt 3: Schnittstelle aufrufen

Nach dem Aufruf des zweiten Schritts wird Schritt 3 ganz einfach.

wx.ready(function(){    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。});

Das Aufrufbeispiel dieses Artikels ist:

<script type="text/javascript" >
    wx.ready(function () {
        wx.onMenuShareAppMessage({
            title: &#39;<%=shareTitle %>&#39;,
            desc: &#39;<%=shareContent %>&#39;,
            link: &#39;<%=currentUrl %>&#39;,
            imgUrl: &#39;<%=shareImageUrl %>&#39;
        });

        wx.onMenuShareTimeline({
            title: &#39;<%=shareContent %>&#39;,
            link: &#39;<%=currentUrl %>&#39;,
            imgUrl: &#39;<%=shareImageUrl %>&#39;
        });
    })     
</script>
<script type="text/javascript" >
    wx.ready(function () {
        wx.onMenuShareAppMessage({
            title: &#39;<%=shareTitle %>&#39;,
            desc: &#39;<%=shareContent %>&#39;,
            link: &#39;<%=currentUrl %>&#39;,
            imgUrl: &#39;<%=shareImageUrl %>&#39;
        });

        wx.onMenuShareTimeline({
            title: &#39;<%=shareContent %>&#39;,
            link: &#39;<%=currentUrl %>&#39;,
            imgUrl: &#39;<%=shareImageUrl %>&#39;
        });
    })     
</script>

Dieser Artikel ist hier grundsätzlich zusammengefasst.

Anfällige Probleme:

1. Überprüfen Sie, ob der Hintergrund festgelegt ist: Name des öffentlichen Kontos in der oberen rechten Ecke – Funktionseinstellungen – Name der JS-Schnittstellensicherheitsdomäne

2 . Überprüfen Sie den Code. Stimmt die App-ID mit der ID im offiziellen Konto-Backend überein?

3. Die Aufrufadresse des Bildes ist ein absoluter Pfad (relative Pfade scheinen nicht zu funktionieren).

Weitere Artikel zu WeChat-Entwicklungsnotizen zum Aufrufen benutzerdefinierter Freigabeschnittstellen finden Sie auf der chinesischen PHP-Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP-Tutorial
1535
276
PHP WeChat-Entwicklung: So implementieren Sie die Nachrichtenverschlüsselung und -entschlüsselung PHP WeChat-Entwicklung: So implementieren Sie die Nachrichtenverschlüsselung und -entschlüsselung May 13, 2023 am 11:40 AM

PHP ist eine Open-Source-Skriptsprache, die in der Webentwicklung und serverseitigen Programmierung, insbesondere in der WeChat-Entwicklung, weit verbreitet ist. Heutzutage beginnen immer mehr Unternehmen und Entwickler, PHP für die WeChat-Entwicklung zu verwenden, da es sich zu einer wirklich leicht zu erlernenden und benutzerfreundlichen Entwicklungssprache entwickelt hat. Bei der WeChat-Entwicklung sind die Nachrichtenverschlüsselung und -entschlüsselung ein sehr wichtiges Thema, da sie die Datensicherheit betreffen. Bei Nachrichten ohne Verschlüsselungs- und Entschlüsselungsmethoden können Hacker leicht an die Daten gelangen, was eine Bedrohung für Benutzer darstellt.

PHP WeChat-Entwicklung: So implementieren Sie die Abstimmungsfunktion PHP WeChat-Entwicklung: So implementieren Sie die Abstimmungsfunktion May 14, 2023 am 11:21 AM

Bei der Entwicklung öffentlicher WeChat-Konten wird häufig die Abstimmungsfunktion verwendet. Die Voting-Funktion ist eine tolle Möglichkeit für Nutzer, sich schnell an Interaktionen zu beteiligen und ist darüber hinaus ein wichtiges Tool für die Durchführung von Veranstaltungen und Meinungsumfragen. In diesem Artikel erfahren Sie, wie Sie PHP zur Implementierung der WeChat-Abstimmungsfunktion verwenden. Holen Sie sich die Autorisierung des offiziellen WeChat-Kontos. Zuerst müssen Sie die Autorisierung des offiziellen WeChat-Kontos einholen. Auf der öffentlichen WeChat-Plattform müssen Sie die API-Adresse des öffentlichen WeChat-Kontos, des offiziellen Kontos und des dem öffentlichen Konto entsprechenden Tokens konfigurieren. Bei unserer Entwicklung mit der PHP-Sprache müssen wir den von WeChat offiziell bereitgestellten PH verwenden

Verwendung von PHP zur Entwicklung von WeChat-Massen-Messaging-Tools Verwendung von PHP zur Entwicklung von WeChat-Massen-Messaging-Tools May 13, 2023 pm 05:00 PM

Mit der Popularität von WeChat beginnen immer mehr Unternehmen, es als Marketinginstrument zu nutzen. Die WeChat-Gruppen-Messaging-Funktion ist für Unternehmen eines der wichtigen Mittel zur Durchführung von WeChat-Marketing. Wenn Sie sich jedoch nur auf den manuellen Versand verlassen, ist dies für Vermarkter eine äußerst zeitaufwändige und mühsame Aufgabe. Daher ist es besonders wichtig, ein WeChat-Massen-Messaging-Tool zu entwickeln. In diesem Artikel wird erläutert, wie Sie mit PHP WeChat-Massen-Messaging-Tools entwickeln. 1. Vorbereitungsarbeiten Um WeChat-Massen-Messaging-Tools zu entwickeln, müssen wir die folgenden technischen Punkte beherrschen: Grundkenntnisse der PHP-Entwicklung der öffentlichen WeChat-Plattform Entwicklungstools: Sub

PHP WeChat-Entwicklung: So implementieren Sie die Verwaltung von Kundendienst-Chatfenstern PHP WeChat-Entwicklung: So implementieren Sie die Verwaltung von Kundendienst-Chatfenstern May 13, 2023 pm 05:51 PM

WeChat ist derzeit eine der sozialen Plattformen mit der größten Nutzerbasis weltweit. Mit der Popularität des mobilen Internets beginnen immer mehr Unternehmen die Bedeutung des WeChat-Marketings zu erkennen. Bei der Durchführung von WeChat-Marketing ist der Kundenservice ein entscheidender Bestandteil. Um das Kundenservice-Chatfenster besser verwalten zu können, können wir die PHP-Sprache für die WeChat-Entwicklung verwenden. 1. Einführung in die PHP-WeChat-Entwicklung PHP ist eine serverseitige Open-Source-Skriptsprache, die im Bereich der Webentwicklung weit verbreitet ist. In Kombination mit der Entwicklungsschnittstelle der öffentlichen WeChat-Plattform können wir die PHP-Sprache zur Durchführung von WeChat verwenden

PHP WeChat-Entwicklung: So implementieren Sie Datensätze zum Senden von Gruppennachrichten PHP WeChat-Entwicklung: So implementieren Sie Datensätze zum Senden von Gruppennachrichten May 13, 2023 pm 04:31 PM

Da WeChat zu einem immer wichtigeren Kommunikationsmittel im Leben der Menschen wird, wird seine agile Messaging-Funktion schnell von einer großen Anzahl von Unternehmen und Einzelpersonen bevorzugt. Für Unternehmen ist die Entwicklung von WeChat zu einer Marketingplattform zu einem Trend geworden, und die Bedeutung der WeChat-Entwicklung ist nach und nach immer wichtiger geworden. Unter diesen wird die Gruppensendefunktion noch häufiger verwendet. Wie implementiert man als PHP-Programmierer Datensätze zum Senden von Gruppennachrichten? Im Folgenden erhalten Sie eine kurze Einführung. 1. Verstehen Sie die Entwicklungskenntnisse im Zusammenhang mit öffentlichen WeChat-Konten, bevor Sie verstehen, wie Datensätze zum Senden von Gruppennachrichten implementiert werden

PHP WeChat-Entwicklung: So implementieren Sie die Benutzer-Tag-Verwaltung PHP WeChat-Entwicklung: So implementieren Sie die Benutzer-Tag-Verwaltung May 13, 2023 pm 04:31 PM

Bei der Entwicklung öffentlicher WeChat-Konten ist die Benutzer-Tag-Verwaltung eine sehr wichtige Funktion, die es Entwicklern ermöglicht, ihre Benutzer besser zu verstehen und zu verwalten. In diesem Artikel wird erläutert, wie Sie mit PHP die WeChat-Benutzer-Tag-Verwaltungsfunktion implementieren. 1. Erhalten Sie die OpenID des WeChat-Benutzers. Bevor wir die WeChat-Benutzer-Tag-Verwaltungsfunktion verwenden, müssen wir zunächst die OpenID des Benutzers abrufen. Bei der Entwicklung öffentlicher WeChat-Konten ist es üblich, die OpenID durch Benutzerautorisierung zu erhalten. Nachdem die Benutzerautorisierung abgeschlossen ist, können wir den Benutzer über den folgenden Code abrufen

Schritte zur Implementierung der Entwicklung eines öffentlichen WeChat-Kontos mit PHP Schritte zur Implementierung der Entwicklung eines öffentlichen WeChat-Kontos mit PHP Jun 27, 2023 pm 12:26 PM

So verwenden Sie PHP zur Entwicklung öffentlicher WeChat-Konten. Öffentliche WeChat-Konten sind für viele Unternehmen zu einem wichtigen Kanal für Werbung und Interaktion geworden. PHP als häufig verwendete Websprache kann auch zur Entwicklung öffentlicher WeChat-Konten verwendet werden. In diesem Artikel werden die spezifischen Schritte zur Verwendung von PHP zum Entwickeln öffentlicher WeChat-Konten vorgestellt. Schritt 1: Erhalten Sie das Entwicklerkonto des offiziellen WeChat-Kontos. Bevor Sie mit der Entwicklung des offiziellen WeChat-Kontos beginnen, müssen Sie ein Entwicklerkonto des offiziellen WeChat-Kontos beantragen. Informationen zum spezifischen Registrierungsprozess finden Sie auf der offiziellen Website der öffentlichen WeChat-Plattform

Wie verwende ich PHP für die WeChat-Entwicklung? Wie verwende ich PHP für die WeChat-Entwicklung? May 21, 2023 am 08:37 AM

Mit der Entwicklung des Internets und mobiler Smart-Geräte ist WeChat zu einem unverzichtbaren Bestandteil im sozialen Bereich und im Marketing geworden. In diesem zunehmend digitalen Zeitalter ist die Verwendung von PHP für die WeChat-Entwicklung zum Fokus vieler Entwickler geworden. In diesem Artikel werden hauptsächlich die relevanten Wissenspunkte zur Verwendung von PHP für die WeChat-Entwicklung sowie einige Tipps und Vorsichtsmaßnahmen vorgestellt. 1. Vorbereitung der Entwicklungsumgebung Bevor Sie WeChat entwickeln, müssen Sie zunächst die entsprechende Entwicklungsumgebung vorbereiten. Insbesondere müssen Sie die PHP-Betriebsumgebung und die öffentliche WeChat-Plattform installieren

See all articles