.NET CORE 微信分享

微信

.NET CORE 获取微信分享签名

后端准备

  1. NuGet 安装 Senparc.Weixin.MP

前端准备

  1. 如果是 vue 这种 mvvm 的前端,那就 npm install weixin-js-sdk --save 安装微信js sdk
  2. 如果是一般网页,那在官网就可以拿到
  3. 在公众号设置号JS安全域名

1,Startup

在Startup中 加入

public void Configure(IHostingEnvironment env, IOptions<SenparcSetting> senparcSetting, IOptions<SenparcWeixinSetting> senparcWeixinSetting)
        {

            IRegisterService register = RegisterService.Start(env, senparcSetting.Value).UseSenparcGlobal();// 启动 CO2NET 全局注册,必须!
            register.UseSenparcWeixin(senparcWeixinSetting.Value, senparcSetting.Value);//微信全局注册,必须!
        }

2,获取签名

先去微信拿到 appid和 appSecret,然后可以直接写在controller里,也可以写成一个类

// url是要分享的网址
public async Task<object> WechatShare(string url)
{
    //获取时间戳
    string timestamp = JSSDKHelper.GetTimestamp();
    //获取随机码
    string nonceStr = JSSDKHelper.GetNoncestr();
    string ticket = await GetTicket(await GetAccessToken(appId, appSecret));
    //获取签名
    string signature = JSSDKHelper.GetSignature(ticket, nonceStr, timestamp, url);

    return new
    {
        AppId = appId,
        NonceStr = nonceStr,
        Signature = signature,
        Timestamp = timestamp,
        Url = url,
        Ticket = ticket
    };
}
/// <summary>
/// 获取 access_token
/// </summary>
/// <param name="appId"></param>
/// <param name="appSecret"></param>
/// <returns></returns>
private async Task<string> GetAccessToken(string appId, string appSecret)
{
    return await Download(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, appSecret), "access_token");
}
/// <summary>
/// 获取时间
/// </summary>
/// <param name="access_token"></param>
/// <returns></returns>
private async Task<string> GetTicket(string access_token)
{
    return await Download(string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", access_token), "ticket");
}
/// <summary>
/// 远程下载
/// </summary>
/// <param name="url"></param>
/// <param name="key"></param>
/// <returns></returns>
private async Task<string> Download(string url, string key)
{
    try
    {
        WebClient client = new WebClient
        {
            Encoding = Encoding.UTF8
        };
        string data = await client.DownloadStringTaskAsync(url);
        Dictionary<string, object> ticketMsg = JsonConvert.DeserializeObject<Dictionary<string, object>>(data);
        string ticket = ticketMsg[key].ToString();
        return ticket;
    }
    catch (Exception)
    {
        return string.Empty;
    }
}

3,前端代码

import wx from 'weixin-js-sdk'

const url = encodeURIComponent(window.location.href)
const title = document.title;
const image =  '';
const desc =  '';

//先从后端获取签名
axios.get(`xxx/WechatShare?url=` +url).then((res)=>{
    const data = res.data.Data;
    wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: data.AppId, // 必填,公众号的唯一标识
        timestamp: data.Timestamp, // 必填,生成签名的时间戳
        nonceStr: data.NonceStr, // 必填,生成签名的随机串
        signature: data.Signature,// 必填,签名
        jsApiList: ['onMenuShareTimeline', 'checkJsApi', 'onMenuShareAppMessage','chooseImage'] // 必填,需要使用的JS接口列表
    });
    wx.ready(function () {
        wx.onMenuShareTimeline({
            title: title, // 分享标题
            link: data.Url, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
            imgUrl: image .replace('//','/'), // 分享图标
            success: function () {
            }
        });
        wx.onMenuShareAppMessage({
            title: title,// 分享标题
            desc: desc, // 分享描述
            link: data.Url, // 分享链接
            imgUrl: image, // 分享图标
            type: 'link', // 分享类型,music、video或link,不填默认为link
            dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
            success: function () {
            },
            cancel: function () {
            }
        });
        wx.error(function(res){
            // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
        });
    });
});

1
说点什么

avatar
1 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
超人下拉系统 Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
超人下拉系统
Guest

这代码是最新的吗