匿名通过本文主要向大家介绍了微信开发等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
引言:
工作中开发微信网站,简称微网站。由于微网站的分享内容是系统自动选取的当前网址,客户需要改变分享的内容,即点击屏幕右上角的分享按钮,选择发送给朋友和发送到朋友圈,其中的内容和图片需要自定义。于是查找文档微信JS-SDK说明文档一文和网站众多高手的经验,大体知道了调用的步骤,但是具体如何调用才能成功却是不了解的。经过一番试验,终于成功调用发送朋友和发送到朋友圈两个接口,此处记录调用的具体过程。
步骤一:引用js文件。
在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js
步骤二:通过config接口注入权限验证配置
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名,见附录1
jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});网上众多网友也是这样写的,但是具体如果配却谈之甚少,接下来介绍本文是如何调用的。
debug和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;
}
}View Code
/// <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;
}
}
singature签名的生成比较麻烦。
首先生成获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token)
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[] { ':' }); 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[] { ':' }, StringSplitOptions.RemoveEmptyEntries); if (jsons.Length < 2) return rawjson;
StringBuilder builder = new StringBuilder(); for (int i =

