您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

微信开发-Jssdk调用分享实例

2025/4/17 15:05:28发布23次查看
using system; using system.collections.generic; using system.linq; using system.web; using system.io; using newtonsoft.json; using system.net; using system.runtime.serialization.formatters.binary; using system.text; using system.security.cryptography; /// <summary> /// wxjssdk 的摘要说明 /// </summary> public class wxjssdk { private string appid; private string appsecret; private datatable dt; public wxjssdk(string appid, string appsecret) { this.appid = appid; this.appsecret = appsecret; } //得到数据包,返回使用页面 public system.collections.hashtable getsignpackage() { string jsapiticket = getjsapiticket(); string url = httpcontext.current.request.url.tostring(); string timestamp = convert.tostring(convertdatetimeint(datetime.now)); string noncestr = createnoncestr(); // 这里参数的顺序要按照 key 值 ascii 码升序排序 string rawstring = "jsapi_ticket=" + jsapiticket + "&noncestr=" + noncestr + "&timestamp=" + timestamp + "&url=" + url + ""; string signature = sha1_hash(rawstring); system.collections.hashtable signpackage = new system.collections.hashtable(); signpackage.add("appid", appid); signpackage.add("noncestr", noncestr); signpackage.add("timestamp", timestamp); signpackage.add("url", url); signpackage.add("signature", signature); signpackage.add("rawstring", rawstring); return signpackage; } //创建随机字符串 private string createnoncestr() { int length = 16; string chars = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789"; string str = ""; random rad = new random(); for (int i = 0; i < length; i++) { str += chars.substring(rad.next(0, chars.length - 1), 1); } return str; } //得到ticket 如果文件里时间 超时则重新获取 //注:jsapi_ticket使用规则(有过期时间)类似access_token, oauth的access_token与基础access_token不同 private string getjsapiticket() { //这里我从数据库读取 dt = dbsession.default.fromsql("select jsapi_ticket,ticket_expires from table where id=1").todatatable(); int expire_time = (int)dt.rows[0]["ticket_expires"]; string ticket = dt.rows[0]["jsapi_ticket"].tostring(); string accesstoken =getaccesstoken();//获取系统的全局token if (expire_time < convertdatetimeint(datetime.now)) { string url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=" + accesstoken + ""; jsapi api =jsonconvert.deserializeobject<jsapi>(httpget(url)); ticket = api.ticket; if (ticket != "") { expire_time = convertdatetimeint(datetime.now) + 7000; //存入数据库操作 } } return ticket; } ////得到accesstoken 如果文件里时间 超时则重新获取 //private string getaccesstoken() //{ // // access_token 应该全局存储与更新,以下代码以写入到文件中做示例 // string access_token = ""; // string path = httpcontext.current.server.mappath(@"/weixin/access_token.json"); // filestream file = new filestream(path, filemode.open); // var serializer = new datacontractjsonserializer(typeof(acctoken)); // acctoken readjsticket = (acctoken)serializer.readobject(file); // file.close(); // if (readjsticket.expires_in < convertdatetimeint(datetime.now)) // { // string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + appsecret + ""; // acctoken iden = desrialize<acctoken>(new acctoken(), httpget(url)); // access_token = iden.access_token; // if (access_token != "") // { // iden.expires_in = convertdatetimeint(datetime.now) + 7000; // iden.access_token = access_token; // string json = serialize<acctoken>(iden); // streamwritermetod(json, path); // } // } // else // { // access_token = readjsticket.access_token; // } // return access_token; //} //发起一个http请球,返回值 private string httpget(string url) { try { webclient mywebclient = new webclient(); mywebclient.credentials = credentialcache.defaultcredentials;//获取或设置用于向internet资源的请求进行身份验证的网络凭据 byte[] pagedata = mywebclient.downloaddata(url); //从指定网站下载数据 string pagehtml = system.text.encoding.default.getstring(pagedata); //如果获取网站页面采用的是gb2312,则使用这句 return pagehtml; } catch (webexception webex) { console.writeline(webex.message.tostring()); return null; } } //sha1哈希加密算法 public string sha1_hash(string str_sha1_in) { sha1 sha1 = new sha1cryptoserviceprovider(); byte[] bytes_sha1_in = system.text.utf8encoding.default.getbytes(str_sha1_in); byte[] bytes_sha1_out = sha1.computehash(bytes_sha1_in); string str_sha1_out = bitconverter.tostring(bytes_sha1_out); str_sha1_out = str_sha1_out.replace("-", "").tolower(); return str_sha1_out; } /// <summary> /// streamwriter写入文件方法 /// </summary> private void streamwritermetod(string str, string patch) { try { filestream fsfile = new filestream(patch, filemode.openorcreate); streamwriter swwriter = new streamwriter(fsfile); swwriter.writeline(str); swwriter.close(); } catch (exception e) { throw e; } } /// <summary> /// 将c# datetime时间格式转换为unix时间戳格式 /// </summary> /// <param name="time">时间</param> /// <returns>double</returns> public int convertdatetimeint(system.datetime time) { int intresult = 0; system.datetime starttime = timezone.currenttimezone.tolocaltime(new system.datetime(1970, 1, 1)); intresult = convert.toint32((time - starttime).totalseconds); return intresult; } } //创建json序列化 及反序列化类目 #region //创建json类 保存文件 jsapi_ticket.json public class jsticket { public string jsapi_ticket { get; set; } public double expire_time { get; set; } } //创建 json类 保存文件 access_token.json public class acctoken { public string access_token { get; set; } public double expires_in { get; set; } } //创建从微信返回结果的一个类 用于获取ticket public class jsapi { public int errcode { get; set; } public string errmsg { get; set; } public string ticket { get; set; } public string expires_in { get; set; } } #endregion
上面是写好的类,接下来直接调用后对应输出给js
wxjssdk jssdk = new wxjssdk(appid,appsecret); hashtable hs = jssdk.getsignpackage(); string signature = hs["signature"].tostring(); string signature = hs["signature"].tostring(); string timestamp = hs["timestamp"].tostring(); string nonce = hs["noncestr"].tostring();
接着js调用:
<script type="text/javascript"> var dataforweixin = { appid: "<%=appid%>", msgimg: "<%=wechatimg%>", tlimg: "<%=wechatimg%>", url: "<%=url%>", title: "<%=title%>", desc: "<%=desc%>", timestamp: '<%=timestamp%>', noncestr: '<%=nonce%>', signature: '<%=signature%>', jsapilist: ['onmenusharetimeline', 'onmenushareappmessage', 'onmenushareqq', 'onmenushareweibo'], fakeid: "", callback: function () { } }; wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appid: dataforweixin.appid, // 必填,公众号的唯一标识 timestamp: dataforweixin.timestamp, // 必填,生成签名的时间戳 noncestr: dataforweixin.noncestr, // 必填,生成签名的随机串 signature: dataforweixin.signature,// 必填,签名,见附录1 jsapilist: dataforweixin.jsapilist // 必填,需要使用的js接口列表,所有js接口列表见附录2 }); wx.ready(function () { //在此输入各种api //分享到朋友圈 wx.onmenusharetimeline({ title: dataforweixin.title, // 分享标题 link: dataforweixin.url, // 分享链接 imgurl: dataforweixin.msgimg, // 分享图标 success: function () { // 用户确认分享后执行的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 } }); //分享给朋友 wx.onmenushareappmessage({ title: dataforweixin.title, // 分享标题 desc: dataforweixin.desc, // 分享描述 link: dataforweixin.url, // 分享链接 imgurl: dataforweixin.tlimg, // 分享图标 type: '', // 分享类型,music、video或link,不填默认为link dataurl: '', // 如果type是music或video,则要提供数据链接,默认为空 success: function () { // 用户确认分享后执行的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 } }); //qq wx.onmenushareqq({ title: dataforweixin.title, // 分享标题 desc: dataforweixin.desc, // 分享描述 link: dataforweixin.url, // 分享链接 imgurl: dataforweixin.msgimg,// 分享图标 success: function () { // 用户确认分享后执行的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 } }); //qq微博 wx.onmenushareweibo({ title: dataforweixin.title, // 分享标题 desc: dataforweixin.desc, // 分享描述 link: dataforweixin.url, // 分享链接 imgurl: dataforweixin.tlimg, // 分享图标 success: function () { // 用户确认分享后执行的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 } }); // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作, //所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 }); wx.error(function (res) { //alert(res); // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于spa可以在这里更新签名。 }); </script>
更多微信开发-jssdk调用分享实例 。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product