微信JS-SDK分享功能的.Net实现代码

发布时间 - 2026-01-11 03:15:22    点击率:

JS-SDK接口是什么?

为了方便开发者实现微信内的网页(基于微信浏览器访问的网页)功能,比如拍照、选图、语音、位置等手机系统的能力,并方便开发者直接使用微信分享、扫一扫等微信特有的能力,微信推出了JS-SDK的整体开发包,供开发者方便使用。

分享功能

官方文档里提供了php、java、node.js以及python的示例代码,唯独没有c#版的,为了弥补广大.net用户的需求,我把php版本的示例代码逻辑照搬成了.net版,并在网页前端中加入了分享功能,希望对大家有用。

程序实现

流程图

程序里关键的类是JSSDK,里面包含服务端请求认证的所有逻辑过程,下面是过程的流程图:

关键代码分析

为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,所以.net里引用了比较高版本(.Net 4.5+)的网络包进行http请求。

private string httpGet(string url)
{
  if (url.StartsWith("https"))
    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

  HttpClient httpClient = new HttpClient();
  httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
  HttpResponseMessage response = httpClient.GetAsync(url).Result;

  if (response.IsSuccessStatusCode)
  {
    string result = response.Content.ReadAsStringAsync().Result;
    return result;
  }
  return null;
}

获取access_token,先从本地的access_token.aspx里找,如果没有或者过期(7000秒),则重新到微信服务器获取。

private string getAccessToken()
{
  string accessToken = string.Empty;
  var data = JObject.Parse(getAspxFile("access_token.aspx", ASPX_HEAD[1]));
  if (data != null && long.Parse(data["expire_time"].ToString()) < Utils.ConvertTimeStamp(DateTime.Now))
  {
    string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
      + this.appId + "&secret=" + this.appSecret;
    var jRes = JObject.Parse(httpGet(url));
    accessToken = jRes["access_token"].ToString();
    if (!string.IsNullOrEmpty(accessToken))
    {
      data["expire_time"] = Utils.ConvertTimeStamp(new DateTime()) + 7000;
      data["access_token"] = accessToken;
      setAspxFile("access_token.aspx", data.ToString(), ASPX_HEAD[1]);
    }
  }
  else
    accessToken = data["access_token"].ToString();
  return accessToken;
}

获取jsapi_ticket,原理与access_token一样。

private string getJsApiTicket()
{
  string ticket = string.Empty;
  var data = JObject.Parse(getAspxFile("jsapi_ticket.aspx", ASPX_HEAD[0]));
  if (data != null && long.Parse(data["expire_time"].ToString()) < Utils.ConvertTimeStamp(DateTime.Now))
  {
    string accessToken = getAccessToken();
    string url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token="
      + accessToken;
    var jRes = JObject.Parse(httpGet(url));
    ticket = jRes["ticket"].ToString();
    if (!string.IsNullOrEmpty(ticket))
    {
      data["expire_time"] = Utils.ConvertTimeStamp(new DateTime()) + 7000;
      data["jsapi_ticket"] = ticket;
      setAspxFile("jsapi_ticket.aspx", data.ToString(), ASPX_HEAD[0]);
    }
  }
  else
    ticket = data["jsapi_ticket"].ToString();
  return ticket;
}

完整代码

https://github.com/stozen/jssdk-wxshare

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# .Net  # 微信JS-SDK分享  # 微信JS-SDK  # JS-SDK  # 解析微信JS-SDK配置授权  # 实现分享接口  # 微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】  # 关于微信jssdk实现多图片上传的一点心得分享  # 微信js-sdk+JAVA实现“分享到朋友圈”和“发送给朋友”功能详解  # 微信分享调用jssdk实例  # 浅谈微信JS-SDK 微信分享接口开发(介绍版)  # 微信js-sdk分享功能接口常用逻辑封装示例  # thinkPHP微信分享接口JSSDK用法实例  # 微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解  # 微信JSSDK分享功能图文实例详解  # 成了  # 并在  # 较高  # 我把  # 如果没有  # 特有的  # 第三方  # 一扫  # 服务端  # 大家多多  # 新到  # 推出了  # 开发包  # 文档  # 为保证  # application  # httpGet  # StartsWith  # url  # private 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: JavaScript如何实现音频处理_Web Audio API如何工作?  千库网官网入口推荐 千库网设计创意平台入口  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  简单实现Android验证码  微信小程序 配置文件详细介绍  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  如何在宝塔面板创建新站点?  如何解决hover在ie6中的兼容性问题  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  如何在云主机上快速搭建多站点网站?  C++时间戳转换成日期时间的步骤和示例代码  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何在阿里云通过域名搭建网站?  网页设计与网站制作内容,怎样注册网站?  android nfc常用标签读取总结  Java遍历集合的三种方式  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  Laravel如何实现API版本控制_Laravel版本化API设计方案  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  三星、SK海力士获美批准:可向中国出口芯片制造设备  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  如何构建满足综合性能需求的优质建站方案?  如何选择可靠的免备案建站服务器?  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  音乐网站服务器如何优化API响应速度?  如何制作一个表白网站视频,关于勇敢表白的小标题?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  Laravel如何使用Blade组件和插槽?(Component代码示例)  活动邀请函制作网站有哪些,活动邀请函文案?  JavaScript如何实现错误处理_try...catch如何捕获异常?  北京企业网站设计制作公司,北京铁路集团官方网站?  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  Laravel如何为API编写文档_Laravel API文档生成与维护方法  Python面向对象测试方法_mock解析【教程】  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  如何快速生成专业多端适配建站电话?  Laravel如何记录自定义日志?(Log频道配置)  如何在自有机房高效搭建专业网站?  如何快速搭建安全的FTP站点?  Internet Explorer官网直接进入 IE浏览器在线体验版网址  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  做企业网站制作流程,企业网站制作基本流程有哪些?