后端的分享接口需要返回一些基本的数据:
分享返回值链接:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN
( debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: ”, // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: ”, // 必填,生成签名的随机串
signature: ”,// 必填,签名,见附录1
jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2)
首先我们需要获取微信公众号的Accese_token:
http://blog.csdn.net/u013223198/article/details/51975718
然后根据获取的accese_token 生成临时票据
string JsApiTicket = WeChatApi.GetJsApiTicket(token);
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={获取的token值}&type=jsapi
///获取token-->生成临时票据-->生成签名--->返回分享数据
public string GetSignature(string timestamp, string nonce, string url)
{
string token;
Cache = new HttpRuntimeCache();
//获取token
var strtoken = Cache.Get(CacheEnum.CacheKey.TokenKey.ToString());
if (strtoken != null)
{
token = strtoken.ToString();
}
else
{
token = WeChatApi.GetToken("wx5a192ee7fe14fcb2", "4fc0a1c7a3dc2ef0e3c0be3eb60a8686");
}
//生成临时票据
string JsApiTicket = WeChatApi.GetJsApiTicket(token);
var sign = WeChatApi.GetJsSignature(nonce, JsApiTicket, timestamp,url);
return sign;
}
然后生成签名:
/// <summary>
/// 获取 Js 接口的签名
/// </summary>
/// <param name="noncestr">随机字符串</param>
/// <param name="jsApiTicket">JS接口的临时票据</param>
/// <param name="timestamp">时间戳</param>
/// <param name="url">当前网页的URL</param>
/// <returns>签名</returns>
public static string GetJsSignature(string noncestr, string jsApiTicket, string timestamp, string url)
{
var dictionary = new Dictionary<string, string>
{
{"noncestr", noncestr},
{"jsapi_ticket", jsApiTicket},
{"timestamp", timestamp},
{"url", url}
};
// 第一步:对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)
IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(dictionary);
IEnumerator<KeyValuePair<string, string>> dem = sortedParams.GetEnumerator();
// 第二步:使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1
var query = new StringBuilder();
while (dem.MoveNext())
{
string key = dem.Current.Key;
string value = dem.Current.Value;
if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
{
query.Append(key).Append("=").Append(value).Append("&");
}
}
var arrString = query.ToString().TrimEnd('&');
//第三步:进行sha1签名,得到signature
var sha1 = System.Security.Cryptography.SHA1.Create();
var sha1Arr = sha1.ComputeHash(Encoding.UTF8.GetBytes(arrString));
var sign = new StringBuilder();
foreach (var b in sha1Arr)
{
sign.AppendFormat("{0:x2}", b);
}
return sign.ToString();
}
最后返回分享数据:
public ActionResult GetShare(string ShareUrl)
{
string url = ShareUrl == null ? ConfigurationManager.AppSettings["tokenUrl"] : ShareUrl;
string[] arr = { "onMenuShareTimeline", "onMenuShareAppMessage" };
WeCharShareModel share = new WeCharShareModel();
share.debug = false;
share.appId = "wx5a192ee7fe14fcb2";
share.timestamp = WeChatApi.GenerateTimeStamp();
share.nonceStr = WeChatApi.GenerateNonceStr();
share.signature = GetSignature(share.timestamp, share.nonceStr, url);
share.jsApiList = arr;
LogHelper.Info("GetShare.share:" + share.ToJson() + ".url:" + url + ".");
return Json(share, JsonRequestBehavior.AllowGet);
}
由于有些东西直接用了封装的内容。详细内容只能过段时间再来更改了。