`

微信分享

阅读更多
    /// <summary>
    /// 获取微信分享接口信息
    /// </summary>
    private void GetWxApiInfo()
    {
       string appId = ""; //微信分享APPID 
       string secret = ""; //公众号的应用秘钥
       string timestamp = string.Empty; //生成签名的时间戳
       string nonceStr = string.Empty; //必填,生成签名的随机串
       string signature = string.Empty;//必填,签名
       string strImg = string.Empty; //分享图片logo
       string strDesc = string.Empty; //微信分享描述信息
       string pageurl = string.Empty; //分享链接
        

        //生成签名的时间戳  
        TimeSpan ts = DateTime.Now - DateTime.Parse("1970-01-01 00:00:00");
        timestamp = ts.TotalSeconds.ToString().Split('.')[0];

        //生成签名的随机串  
        nonceStr = GetRandomString(16, true, true, true, false, "win");

        string token = string.Empty;

        //if (string.IsNullOrWhiteSpace(token))
        //{
        //    //微信access_token,用于获取微信jsapi_ticket      
        //    token = GetAccess_token(appId, secret);

        //    ICore.ICaching.SetCaching("token", token, 60);
        //}

        //微信jsapi_ticket    
        string ticket = ICore.ICaching.GetCaching("ticket");
        //ticket = null;
        if(string.IsNullOrWhiteSpace(ticket))
        {
            //微信access_token,用于获取微信jsapi_ticket      
            token = GetAccess_token(appId, secret);

            //微信jsapi_ticket    
            ticket = GetTicket(token);

            ICore.ICaching.SetCaching("ticket", ticket, 60);
        }
       

        //对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串  
        string str = "jsapi_ticket=" + ticket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + pageurl;

        //签名,使用SHA1生成  
        signature = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "SHA1").ToLower();  

    }

    ///<summary>
    ///生成随机字符串 
    ///</summary>
    ///<param name="length">目标字符串的长度</param>
    ///<param name="useNum">是否包含数字,1=包含,默认为包含</param>
    ///<param name="useLow">是否包含小写字母,1=包含,默认为包含</param>
    ///<param name="useUpp">是否包含大写字母,1=包含,默认为包含</param>
    ///<param name="useSpe">是否包含特殊字符,1=包含,默认为不包含</param>
    ///<param name="custom">要包含的自定义字符,直接输入要包含的字符列表</param>
    ///<returns>指定长度的随机字符串</returns>
    public string GetRandomString(int length, bool useNum, bool useLow, bool useUpp, bool useSpe, string custom)
    {
        byte[] b = new byte[4];
        new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(b);
        Random r = new Random(BitConverter.ToInt32(b, 0));
        string s = null, str = custom;
        if (useNum == true) { str += "0123456789"; }
        if (useLow == true) { str += "abcdefghijklmnopqrstuvwxyz"; }
        if (useUpp == true) { str += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; }
        if (useSpe == true) { str += "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; }
        for (int i = 0; i < length; i++)
        {
            s += str.Substring(r.Next(0, str.Length - 1), 1);
        }
        return s;
    } 


    /// <summary>  
    /// 获取微信jsapi_ticket  
    /// </summary>  
    /// <param name="token">access_token</param>  
    /// <returns>jsapi_ticket</returns>  
    public string GetTicket(string token)
    {
        string ticketUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + token + "&type=jsapi";
        string jsonresult = HttpGet(ticketUrl, "UTF-8");
        WX_Ticket wxTicket = JsonDeserialize<WX_Ticket>(jsonresult);
        return wxTicket.ticket;
    }

    /// <summary>  
    /// 获取微信access_token  
    /// </summary>  
    /// <param name="appid">公众号的应用ID</param>  
    /// <param name="secret">公众号的应用密钥</param>  
    /// <returns>access_token</returns>  
    private string GetAccess_token(string appid, string secret)
    {
        string tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret;
        string jsonresult = HttpGet(tokenUrl, "UTF-8");
        WX_Token wx = JsonDeserialize<WX_Token>(jsonresult);
        return wx.access_token;
    }

    /// <summary>  
    /// JSON反序列化  
    /// </summary>  
    /// <typeparam name="T">实体类</typeparam>  
    /// <param name="jsonString">JSON</param>  
    /// <returns>实体类</returns>  
    private T JsonDeserialize<T>(string jsonString)
    {
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
        MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
        T obj = (T)ser.ReadObject(ms);
        return obj;
    }

    /// <summary>  
    /// HttpGET请求  
    /// </summary>  
    /// <param name="url">请求地址</param>  
    /// <param name="encode">编码方式:GB2312/UTF-8</param>  
    /// <returns>字符串</returns>  
    private string HttpGet(string url, string encode)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "GET";
        request.ContentType = "text/html;charset=" + encode;
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream myResponseStream = response.GetResponseStream();
        StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding(encode));
        string retString = myStreamReader.ReadToEnd();
        myStreamReader.Close();
        myResponseStream.Close();

        return retString;
    }
        /// <summary>  
    /// 通过微信API获取access_token得到的JSON反序列化后的实体  
    /// </summary>  
    public class WX_Token
    {
        public string access_token { get; set; }
        public string expires_in { get; set; }
    }

    /// <summary>  
    /// 通过微信API获取jsapi_ticket得到的JSON反序列化后的实体  
    /// </summary>  
    public class WX_Ticket
    {
        public string errcode { get; set; }
        public string errmsg { get; set; }
        public string ticket { get; set; }
        public string expires_in { get; set; }
    } 
 



前端页面:
需要引用js
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

    wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: '<%=appId%>', // 必填,公众号的唯一标识
        timestamp: '<%=timestamp%>', // 必填,生成签名的时间戳
        nonceStr: '<%=nonceStr%>', // 必填,生成签名的随机串 
        signature: '<%=signature%>', // 必填,签名
        jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo']// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    })

    wx.ready(function () {
        //分享到朋友圈
        wx.onMenuShareTimeline({
            title: '<%=title%>', // 分享标题
            link: '<%=pageurl%>', // 分享链接
            imgUrl: '<%=strImg%>', // 分享图标
            success: function () {
                
                // 用户确认分享后执行的回调函数
            },
            cancel: function () {
               
                // 用户取消分享后执行的回调函数
            }
        });
        //分享给朋友
        wx.onMenuShareAppMessage({
            title: '<%=title%>', // 分享标题
            desc: '<%=strDesc%>', // 分享描述
            link: '<%=pageurl%>', // 分享链接
            imgUrl: '<%=strImg%>', // 分享图标
            type: '', // 分享类型,music、video或link,不填默认为link
            dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
            success: function () {
                
                // 用户确认分享后执行的回调函数
            },
            cancel: function () {
                
                // 用户取消分享后执行的回调函数
            }
        });
        //分享给QQ好友
        wx.onMenuShareQQ({
            title: '<%=title%>', // 分享标题
            desc: '<%=strDesc%>', // 分享描述
            link: '<%=pageurl%>', // 分享链接
            imgUrl: '<%=strImg%>', // 分享图标
            success: function () {
               
                // 用户确认分享后执行的回调函数
            },
            cancel: function () {
               
                // 用户取消分享后执行的回调函数
            }
        });
        //分享到腾讯微博
        wx.onMenuShareWeibo({
            title: '<%=title%>', // 分享标题
            desc: '<%=strDesc%>', // 分享描述
            link: '<%=pageurl%>', // 分享链接
            imgUrl: '<%=strImg%>', // 分享图标
            success: function () {
              
                // 用户确认分享后执行的回调函数
            },
            cancel: function () {
              
                // 用户取消分享后执行的回调函数
            }
        });
    });

注意事项:前台链接地址和后台加密的链接地址必须一样



分享到:
评论

相关推荐

    vue项目中实现的微信分享功能示例

    本文实例讲述了vue项目中实现的微信分享功能。分享给大家供大家参考,具体如下: /* 微信分享 */ Vue.prototype.wechatShare = (shareData) =&gt; { let resource = { title: '随我心愿!', desc: '体验优质服务', ...

    android 微信分享小程序 图片处理

    在Android开发中,微信分享小程序是一项常见的功能,尤其在社交电商和内容分享场景下尤为重要。在实际操作中,我们可能会遇到一些图片处理方面的问题,比如图片显示不全、图片过大导致无法正常调起微信应用。本文将...

    手机浏览器唤起微信分享(JS)

    最近在做一个手机站,要求点击分享可以直接打开微信分享出去。而不是jiathis,share分享这种的点击出来二维码。在网上看了很多,都说APP能唤起微信,手机网页实现不了。也找了很多都不能直接唤起微信。 总结出来一个...

    微信分享的标题、缩略图、连接及描述设置方法

    微信分享的标题、缩略图、连接及描述该如何设置,使用微信分享过程中会遇到这个情况,无解的朋友可以看看下面的代码 [removed] var imgUrl = 'http://huoche.7234.cn/images/jb51/3flewiuwye1.jpg'; var lineLink =...

    Android实现QQ和微信分享功能

    对于微信分享,则需要集成WeChat SDK。这两个SDK可以通过腾讯开放平台下载得到,包含了必要的jar包和对应的开发者文档。 **QQ分享** 1. **注册应用**:在腾讯开放平台上注册你的应用,获取AppID和AppKey。这两个...

    Android 布局生成微信分享图片

    在Android开发中,微信分享是常见的社交功能,允许用户将应用程序内的内容,如文本、图片、链接等,分享到微信朋友圈或与微信好友互动。在这个过程中,“Android布局生成微信分享图片”是一个关键环节,它涉及到...

    php解决微信分享网页不显示缩略图和描述,对接公众号微信分享自定义缩略图和描述

    对接公众号设置自定义微信分享自定义缩略图和描述

    微信分享完整demo

    微信分享完整Demo是一款用于演示如何在移动应用中集成微信分享功能的应用示例。这个Demo包含了必要的appid(应用程序ID)和签名文件,使得开发者能够快速理解和实现微信平台的分享功能。以下将详细介绍微信分享Demo...

    微信分享(html5兼容所有的移动端浏览器)

    在移动互联网时代,微信已经成为国内最流行的社交应用之一,而微信分享功能的使用频率极高。本文将深入探讨如何使用HTML5技术实现一个兼容所有移动端浏览器的微信分享功能。 首先,我们要明白HTML5是现代网页开发的...

    微信分享后端接口

    在IT行业中,微信分享是移动应用开发者经常遇到的一项功能,特别是在构建社交互动性强的应用时。本文将详细解析“微信分享后端接口”的实现,并探讨与之相关的技术知识点,包括微信分享、微信API的使用、IO流处理...

    Flutter 截图、QQ分享、微信分享、微博分享

    本文将深入探讨如何在Flutter应用中实现截图、QQ分享、微信分享以及微博分享的功能。 **截图功能** 在Flutter中,我们可以利用`image_picker`插件来实现屏幕截图。首先,用户通过调用`ImagePicker`的`...

    微信分享获得图片和文字描述,微信分享源码.zip

    在微信平台上进行分享功能的开发是一项常见的需求,尤其对于移动端的开发者来说,微信分享能够极大地扩展应用的传播范围。本文将深入探讨“微信分享获得图片和文字描述”的技术实现,以及如何利用提供的“微信分享...

    UE4 微信分享SDK

    为了实现与社交平台的交互,如分享游戏成就、邀请好友等,开发者通常需要集成第三方SDK,例如微信分享SDK。本文将详细介绍如何在UE4中集成并使用微信分享SDK。 首先,你需要确保已经安装了UE4,并且对UE4的基本项目...

    php微信分享带图标demo.zip

    【标题】"php微信分享带图标demo.zip"是一个关于如何在PHP环境中实现微信分享功能的示例项目,其中包含了自定义分享图标的功能。这个压缩包旨在帮助开发者理解并实现微信平台上的网页分享,使得用户在浏览网页时可以...

    HTML5微信分享图标和文本设置

    ​想必大家都在自己的微信朋友圈看到过别人分享的一些网页链接消息,但是你...今天要跟大家分享的就是如何让自己的网页在微信分享朋友圈中拥有一个自己个性的图标以及自定义分享中的描述文字。---&gt;详情见我的博客哦!

    vue微信分享到朋友圈 vue微信发送给好友

    本文为大家分享了vue微信分享至朋友圈&&分享至朋友代码的封装,供大家参考,具体内容如下 1.新建share.js文件 import {shareSDK} from "../api/common";//分享api import wx from 'weixin-js-sdk' export const ...

    Android 接入第三方登录 微信登录 微信分享 demo

    3. **微信分享**:微信分享功能允许用户将应用内的内容(如文章、图片、链接等)分享给微信的好友或者朋友圈。微信SDK提供了多种分享类型,包括文本、图片、网页链接等。开发者需要设置分享的内容、目标类型(好友或...

    微信分享ASP版

    在IT行业中,微信分享功能是将网页内容或应用信息通过微信平台进行传播的一种方式,它极大地增强了用户在社交网络上的互动性。对于ASP(Active Server Pages)开发者来说,实现微信分享功能可以为他们的网站或应用...

    微信分享流程图1

    微信分享流程图1 微信分享流程图1是指在微信平台上实现分享功能的整个过程。下面将对该流程图进行详细的解读和分析: 首先,在微信分享流程图1中,首先需要判断签名是否可用。签名是微信提供的一个安全机制,用于...

Global site tag (gtag.js) - Google Analytics