C# 点击按钮分享公众号给好友
时间:2021-08-02
本文章向大家介绍C# 点击按钮分享公众号给好友,主要包括C# 点击按钮分享公众号给好友使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最近客户提了个需求,在移动端首页加一个按钮,点击按钮实现分享给好友。
啥也没说,先看了一篇微信开发文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html
接着配置了微信公众号开发平台域名和黑白名单,引用微信js:http://res.wx.qq.com/open/js/jweixin-1.6.0.js,获取参数,调用wx接口。
前端代码:
//分享公众号 function wx_fx() { wx.config({ debug: true, // 是否开启调试模式 appId: "{$:#.appid}", timestamp: '{$:#.timestamp}', //时间戳 nonceStr: '{$:#.nonceStr}', // 随机字符串 signature: "{$:#.signature}",//签名 jsApiList: [ 'onMenuShareAppMessage' ] // 需要使用的JS接口列表 }) wx.ready(function(){ //分享给朋友 wx.onMenuShareAppMessage({ title:'分享测试', // 分享标题 desc:'测试分享', // 分享描述 link: 'http://xxxx.com', // 分享链接 imgUrl: 'http://xxxx.com/templets/mobile/images/index_101.png', // 分享图标 type:'link', // 分享类型,music、video或link,不填默认为link dataUrl:'', // 如果type是music或video,则要提供数据链接,默认为空 success: function () { // 用户确认分享后执行的回调函数 alert('分享成功'); }, cancel: function () { // 用户取消分享后执行的回调函数 alert('取消了分享'); } }); }); } </script>
后台第一步:根据Appid和秘钥appSecret获取ticket令牌
//获取ticket public string getJsApiTicket(string appid, string appSecret) { string ticket = string.Empty; if (!string.IsNullOrEmpty(appid) && !string.IsNullOrEmpty(appSecret)) { //这里开始从微信API获取ticket string token = GetToken(appid, appSecret); string url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=wx_card&access_token=" + token + ""; Jsapi api = JsonConvert.DeserializeObject<Jsapi>(httpGet(url)); //FsLog.CreateLog("api:" + api, true); ticket = api.ticket; //FsLog.CreateLog("api.ticket:" + api.ticket, true); } return ticket; } // 获取access_token public string GetToken(string appid, string secret) { string strJson = RequestUrl(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, secret), "post"); return GetJsonValue(strJson, "access_token"); }
第二步:生成时间戳获取随机字符串
// 返回时间戳 string timestamp = Convert.ToString(ConvertDateTimeInt(DateTime.Now)); // 返回创建随机字符串 string nonceStr = createNonceStr(); //创建随机字符串 public 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; }
第三步:获取签名signature,可以写错误日志在ftp上查看问题,微信js接口签名效验:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
// 返回签名signature string rawstring = "jsapi_ticket=" + jsapiTicket + "&noncestr=" + nonceStr + "×tamp=" + timestamp + "&url=" + pathurl + ""; string signature = SHA1_Hash(rawstring); 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; }
public string Keyword(string Appid, string appSecret) { string json = ""; if (!string.IsNullOrEmpty(Appid)&&!string.IsNullOrEmpty(appSecret)) { //获取ticket string jsapiTicket = getJsApiTicket(Appid, appSecret); //FsLog.CreateLog("jsapiTicket:" + jsapiTicket, true); // 返回时间戳 string timestamp = Convert.ToString(ConvertDateTimeInt(DateTime.Now)); //FsLog.CreateLog("timestamp:" + timestamp, true); // 返回创建随机字符串 string nonceStr = createNonceStr(); //FsLog.CreateLog("nonceStr:" + nonceStr, true); // 返回签名signature string rawstring = "jsapi_ticket=" + jsapiTicket + "&noncestr=" + nonceStr + "×tamp=" + timestamp + "&url=" + pathurl + ""; string signature = SHA1_Hash(rawstring); //FsLog.CreateLog("signature:" + signature, true); json = timestamp + "," + nonceStr + "," + signature + "," + jsapiTicket; } return json; }
祝各位能用着开心
原文地址:https://www.cnblogs.com/jstblog/p/15090827.html
- python-IDLE清屏和标记行数,其他推荐
- 从0到1:PostCSS 插件开发最佳实践
- VUE 入门基础(4)
- 实例演示Android异步加载图片
- 使用OData协议查询Windows日志
- Android之Notification介绍
- postcss-lazysprite: 一种生成CSS 雪碧图的懒惰姿势
- Activity间中使用Intent传值
- VUE 入门基础(3)
- ASP.NET MVC 2 转换工具
- 使用Sysinternals工具定时休眠Windows Server 2008 R2
- Android中BroadcastReceiver广播
- 启用Windows 7/2008 R2 XPS Viewer
- Spring历史版本变迁和如今的生态帝国
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 当你在百度搜索关键字的时候,哪个网站会排在最前面?今天给大家科普一下“网站SEO”
- Mysql系列第十九讲 异常捕获及处理详解
- 【原创】经验分享:一个小小emoji尽然牵扯出来这么多东西?
- jQuery 事件对象,拷贝对象,多库共存
- jQuery 事件注册与事件处理
- v-charts 修改文本颜色
- 使用 jsDelivr 免费加速 GitHub Pages 博客的静态资源(二)
- 竞赛比完,代码、模型怎么处理?Kaggle大神:别删,这都是宝藏
- 显示DataGrid序号的一个适用的方法
- SAP Spartacus cms-components.service.ts里的config.cmsComponents
- ng-template和ng-container的嵌套使用
- SAP Spartacus pageSlot一览
- Angular @Hostbinding工作原理
- Python干货 | 遥感影像拼接
- SAP Spartacus 自定义指令的实现以及通过@HostBinding实现属性绑定