微信分享(网站)ASP.NET

news/2024/5/9 2:21:12/文章来源:https://blog.csdn.net/csdn_Info/article/details/75388491

实现的功能:
1、网址生成二维码
2、微信扫描二维码,打开网址
3、微信APP右上角点击弹出菜单分享
4、分享内容可自定义:标题、描述、链接、图片

普通分享显示图:

普通分享显示图

接口分享显示图

接口分享显示图

微信公众平台文档地址:

微信网页开发–>微信JS-SDK说明文档

公众平台文档

微信JS-SDK说明文档 页面最底部,有示例代码(可以直接点击以下链接下载,也可去微信分享文档底部查找)

示例代码

文档内没有 .NET 版本的分享示例代码(原因所在)

好吧,开始一段文字内容(其实在微信文档里面复制的文字):


概述

微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。
通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。
此文档面向网页开发者介绍微信JS-SDK如何使用及相关注意事项。


JSSDK使用步骤(微信文档里看吧)

大致就是说:要先配置参数,然后再使用相关接口


开始使用部分

NeedSharePage.aspx 页面

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js" type="text/javascript"></script>
<script type="text/javascript">
//配置你的微信配置信息wx.config({debug: false, // 是否开启调试模式,调试请改为trueappId: '<%=appid %>', // 必填,公众号的唯一标识timestamp: '<%=timestamp %>', // 必填,生成签名的时间戳nonceStr: '<%=nonceStr %>', // 必填,生成签名的随机串signature: '<%=signature %>', // 必填,签名,见附录1jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareQZone'] // 必填,需要使用的JS接口列表,此处定义你需要的接口,所有JS接口列表见附录2});// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。wx.ready(function(){//如果使用自定义按钮点击事件来分享,则不需要在ready内调用//这里我没有使用自定义按钮,所以需要在ready内调用//wx.checkJsApi判断当前客户端版本是否支持指定JS接口,备注:checkJsApi接口是客户端6.0.2新引入的一个预留接口,第一期开放的接口均可不使用checkJsApi来检测。wx.checkJsApi({jsApiList: ['getLocation','onMenuShareTimeline','onMenuShareAppMessage'],success: function (res) {alert(JSON.stringify(res));}});// 分享到朋友圈wx.onMenuShareTimeline({title: '<%=title %>', // 分享标题link: '<%=link %>', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: '<%=imgUrl %>', // 分享图标success: function () {// 用户确认分享后执行的回调函数(可以进行分享数+1操作)//alert('分享成功');},cancel: function () {// 用户取消分享后执行的回调函数// alert(22);}});//分享给朋友、分享给QQ、分享QQ空间等都差不多,此处不再写了。
});
</script>

签名的生成

(微信文档内,可见 :附录1-JS-SDK使用权限签名算法)

jsapi_ticket

生成签名之前必须先了解一下jsapi_ticket。
jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取

由于获取jsapi_ticket的api**调用次数非常有限**,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务
全局缓存jsapi_ticket

1.参考以下文档获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token):../15/54ce45d8d30b6bf6758f68d2e95bc627.html
官方给的这个地址,我也是忍不住吐槽,根本找不到在哪里
获取Token的地址为:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPsecret

参数:
appid=公众号的APPID
secret=公众号密钥

使用GET 请求,请求此地址。返回参数为:
{
“expires_in”:7200,
“access_token”:”xxxxxxxxxxxxxxxx”
}

2.用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket
(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

返回参数为:
{
“errcode”:0,
“errmsg”:”ok”,
“ticket”:”xxxxxxxxxxxxxx”,
“expires_in”:7200
}


3.获取到 JSAPI_TICKET 后,就可以使用签名算法进行签名了。
签名生成规则如下:参与签名的字段包括

noncestr, //随机字符串
jsapi_ticket, //有效的jspi_ticket
timestamp,//时间戳
url //当前网页的URL,不包含#及其后面部分

。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。

步骤1.
string1=jsapi_ticket=xxxxxxx&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://mp.weixin.qq.com?params=value

步骤2. 对string1进行sha1签名,得到signature:
0f9de62fce790f9a083d5c99e95740ceb90c27ed


注意事项
1.签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。
2.签名用的url必须是调用JS接口页面的完整URL。
3.出于安全考虑,开发者必须在服务器端实现签名的逻辑。
如出现invalid signature 等错误详见附录5常见错误及解决办法。


生成后的签名拿去校验:

微信 JS 接口签名校验工具


以下为自定义的分享类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WxPayAPI;
using System.Web;
using System.Web.Caching;
using Utils.Validate;namespace Utils.WxPayAPI
{public class WxShareApi{/// <summary>/// 2根据 token 获取jsapi_ticket/// </summary>/// <param name="access_token">token</param>/// <returns>jsapi_ticket</returns>private string Get_Jsapi_Ticket(){if (CacheClass.GetCache("jsapiticket") != null){return CacheClass.GetCache("jsapiticket").ToString();}StringBuilder sb = new StringBuilder();sb.Append(WxPayConfig.GetJsApiTicketUrl).Append("?").Append("access_token=").Append(Get_Token()).Append("&").Append("type=jsapi");string jsapi_ticket = HttpService.Get(sb.ToString());JsapiTicket jsapiTicketObject = LitJson.JsonMapper.ToObject<JsapiTicket>(jsapi_ticket);CacheClass.SetCache("jsapiticket", jsapiTicketObject.ticket);return jsapiTicketObject.ticket;}/// <summary>/// 1获取微信分享需要的Token/// </summary>/// <param name="APPID">公众号APPID</param>/// <param name="APPSECRET">公众号APPSECRET</param>/// <returns>token</returns>private string Get_Token(){if (CacheClass.GetCache("token") != null){return CacheClass.GetCache("token").ToString();}StringBuilder sb = new StringBuilder();sb.Append(WxPayConfig.GetTokenUrl).Append("&").Append("appid=").Append(WxPayConfig.APPID).Append("&").Append("secret=").Append(WxPayConfig.APPSECRET);string token = HttpService.Get(sb.ToString());TokenObject tokenObject = LitJson.JsonMapper.ToObject<TokenObject>(token);CacheClass.SetCache("token", tokenObject.access_token);return tokenObject.access_token;}/// <summary>/// 3生成微信分享签名/// </summary>/// <param name="ticket">jsapiticket</param>/// <param name="noncestr">随机串</param>/// <param name="timestamp">时间戳</param>/// <returns>SHA1加密签名</returns>public string GenerateJSSDKSign(string noncestr, string timestamp){StringBuilder sb = new StringBuilder();sb.Append("jsapi_ticket=").Append(Get_Jsapi_Ticket()).Append("&").Append("noncestr=").Append(noncestr).Append("&").Append("timestamp=" + timestamp).Append("&");string url = HttpContext.Current.Request.Url.AbsoluteUri;sb.Append("url=" + url);string sign = EncodeHelper.SHA1(sb.ToString(), Encoding.UTF8);Log.Info("sign" + DateTime.Now, sign);return sign;}}//jsapipublic class JsapiTicket{public int errcode { get; set; }public string errmsg { get; set; }public string ticket { get; set; }public int expires_in { get; set; }}//tokenpublic class TokenObject{public int expires_in { get; set; }public string access_token { get; set; }}
}

使用:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Share
{public partial class NeedSharePage : System.Web.UI.Page{//wx share configpublic string appid = WxPayConfig.APPID;public string timestamp = "";public string nonceStr = "";public string signature = "";public string title = "";public string description = "";public string imgUrl = "";public string link = "";protected void Page_Load(object sender, EventArgs e){//微信分享需要的数值 begin -----------------------timestamp = WxPayApi.GenerateTimeStamp();nonceStr = WxPayApi.GenerateNonceStr();title ="测试";description = "测试描述";imgUrl = "测试图片";link = HttpContext.Current.Request.Url.AbsoluteUri;//根据jsapi获取signWxShareApi share = new WxShareApi();signature = share.GenerateJSSDKSign(nonceStr, timestamp);//微信分享需要的数值 end ---------------------------}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_813557.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对《网站非法内容监听系统的构想》的回复——我谈非法内容核查方法

刚才看了谢慧琦(是个MM&#xff1f;&#xff1f;)的《网站非法内容监听系统的构想》一文&#xff0c;觉得其中所述的想法与我之前的设想非常相像&#xff0c;所以我忍不住也想说几句了&#xff0c;嘿嘿&#xff1a; 我原先的设想就是在用户提交时&#xff0c;对提交内容进行危险…

linux怎么操作mysql数据库实例_实例 - Linux下用Perl进行MySQL数据库开发_数据库技术_Linux公社-Linux系统门户网站...

四、perl进行MySQL开发实例上述都安装完后&#xff0c;就可以进行实际开发了。首先在test数据库中新建一个表mysql> create table address (-> id int(5) not null,-> name varchar(40) not null,-> email varchar(50) not null,-> telephone int(12) null);Que…

qq浏览器网页翻译_海淘网站英文页面翻译办法

很多刚刚海淘的朋友&#xff0c;遇到的第一个问题&#xff0c;往往就是&#xff0c;看懂不懂&#xff0c;面对满屏的英文&#xff0c;它认识我&#xff0c;我不认识它&#xff0c;更别提要海淘下单了。接下来&#xff0c;小编分别介绍手机端和电脑端英文页面翻译办法。1、手机端…

wordpress表单数据验证_30分钟搭一个wordpress网站

我是一个着迷于产品和运营的技术人&#xff0c;乐于跨界的终身学习者。欢迎关注我哟&#xff5e;每周五早6点 按时送达&#xff5e;我的第「88」篇原创敬上因为最近工作比较忙&#xff0c;没太多时间思考和写东西。所以今天偷个懒&#xff0c;发一篇实操类文章。这篇文章非常“…

window服务如何通过程序如何打开谷歌浏览器并登陆指定网站_亚马逊如何看listing销量,亚马逊如何看销量排名...

我做跨境电商也有六年的时间了&#xff0c;在电商这个行业也有自己的一些经验。经验也许没有其他大卖家丰富&#xff0c;但会将我知道的都进行分享。如果有不懂得亚马逊问题可以我(V&#xff1a;772024802)。我这里给大家安排一堂直播课&#xff0c;可以系统的帮你解决做亚马逊…

seo扣费系统源码_关键词按天扣费就一定靠谱吗?

最近几年&#xff0c;SEO行业的形势不断变化&#xff0c;各种新出的SEO计费方式和营销模式花样百出。现在大多数SEO公司都打着按天扣费的模式&#xff0c;吸引客户。其实按天扣费模式的猫腻也很多&#xff0c;今天优化君让你们知道一家公司的按天扣费的套路&#xff0c;希望能帮…

python爬虫反爬机制_Python3爬虫学习之应对网站反爬虫机制的方法分析

本文实例讲述了Python3爬虫学习之应对网站反爬虫机制的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 如何应对网站的反爬虫机制 在访问某些网站的时候&#xff0c;网站通常会用判断访问是否带有头文件来鉴别该访问是否为爬虫&#xff0c;用来作为反爬取的一种策…

全面进入HTTPS网站加速新时代,CDN上线免费证书

点击访问折扣活动 点击了解相关专题与HTTPS技术直播 活动推荐 【TechDay】阿里云CDN Tengine开源技术沙龙-上海站&#xff0c;将在8月29日下午阿里虹桥中心展开&#xff0c;多位专家现场探讨CDN QUIC、TLSv1.3、直播、Tengine实践等话题&#xff0c;参与活动即可赢取阿里云定制…

网站服务器停止服务,DDoS攻击是如何让网站停止服务的?

DDoS攻击&#xff0c;是一种耗尽攻击目标的系统资源&#xff0c;导致攻击目标无法响应正常的服务请求的网络攻击方式。虽然&#xff0c;大规模的DDoS攻击占据了大部分的头条新闻&#xff0c;但实际上&#xff0c;较小的DDoS攻击在网络安全环境中更为常见。在没有做好充分的防护…

php实现飘窗,JS实现网站图片飘窗效果,JavaScript悬浮广告(附详细代码)

JS实现网站图片飘窗效果&#xff0c;JavaScript悬浮广告&#xff0c;飘窗效果-丁光辉博客(www.dingguanghui.com)*{margin:0px;padding:0px}#ad{position:absolute;left:0px;top:0px;}//通过ID获取imgaddocument.getElementById("ad");//定义横纵坐标x0;y0;//设置初始…

大型网站技术架构(六)网站的伸缩性架构

2019独角兽企业重金招聘Python工程师标准>>> 网站系统的伸缩性架构最重要的技术手段就是使用服务器集群功能&#xff0c;通过不断地向集群中添加服务器来增强整个集群的处理能力。“伸”即网站的规模和服务器的规模总是在不断扩大。 1、网站架构的伸缩性设计 网站的…

Visual Studio2017 的项目发布与 IIS 网站部署

Visual Studio2017 的项目发布 1.首先打开自己的本地项目&#xff0c;重新生成解决方案必须无报错 2.然后右键选中的项目&#xff0c;点击发布 3.第一次发布需要配置发布的相关信息&#xff0c;如果第N次发布可直接跳过&#xff0c;配置信息如下 3.1 点击连接 发布方法&…

IIS网站部署后,让小伙伴也能查看网站-防火墙配置

前言 上一篇文章讲述了 Visual Studio2017 的项目发布和 IIS 网站的部署&#xff0c;但是部署之后只能在自己的电脑上浏览网站。为了让自己电脑上的网站也能被别人访问&#xff0c;可以对防火墙做一些手&#xff08;配&#xff09;脚&#xff08;置&#xff09;~ 链接&#x…

IIS网站运行报错:无法识别的属性“targetFramework”。请注意属性名称区分大小写。

报错信息如下&#xff1a; IIS网站运行报错&#xff1a;无法识别的属性“targetFramework”。请注意属性名称区分大小写。 报错原因大概是&#xff1a;程序的.netframework版本为4.8&#xff0c;应用池的版本为2.0 &#xff0c;版本不一致所以报错。 修改步骤1&#xff1a;应用…

IIS安装 部署网站

以下是操作文档&#xff0c;均已录制 点此观看bilibili操作视频 第一步&#xff1a;找到位置 控制面板->查看方式选择&#xff1a;类别->卸载程序->启用或关闭windows功能 第二步&#xff1a;勾选 勾选Internet information Services和Internet information Servic…

IIS中的网站访问excel

打开【启用32位应用程序】

IIS部署网站-网站设置起始页

选中网站->默认文档看到有index.html 可以在网站的根目录新建index.html 然后在index.html界面中 设置跳转界面即可 新建index.html 设置跳转 <meta HTTP-EQUIVREFRESH CONTENT"0; URL跳转路径">

icon制作无白色背景_这80个无版权素材网站收好,再来多少视觉XX都不怕!

一张黑洞照片让视觉中国彻底凉凉&#xff0c;虽然社会的版权意识加强是一个好现象&#xff0c;但这种漫天要价的钓鱼执法实在不可取。因此&#xff0c;就看APP为大家整理了80个无版权素材网站&#xff0c;除了图片&#xff0c;还有免费的视频、icon、配色以及矢量图&#xff0c…

到网站进过的服务器 命令,进入服务器命令

进入服务器命令 内容精选换一换如果Windows操作系统云服务器未安装密码重置插件&#xff0c;可以参见本节内容重新设置密码。本节操作介绍的方法仅适用于修改Windows本地账户密码&#xff0c;不能修改域账户密码。Linux操作系统请参见重置Linux云服务器密码(未安装重置密码插件…

帝国站长php主动推送,帝国CMS网站主动推送链接到百度的代码

使用帝国CMS网站的朋友有很多&#xff0c;但是有许多网站更新后不能及时收录&#xff0c;在百度站长平台提供了几种网站链接提交方法可以让百度蜘蛛抓取网站。分别是自动提交、主动推送、网站地图以及手动提交。其中主动推送可以最及时的让百度蜘蛛发现网站最新链接。在之前&am…