300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > c# 文章分享微信朋友圈自定义标题 摘要 缩略图

c# 文章分享微信朋友圈自定义标题 摘要 缩略图

时间:2022-09-01 22:27:13

相关推荐

c# 文章分享微信朋友圈自定义标题 摘要 缩略图

微信升级后需要通过接入微信公众号才行,记录下。

一、登录微信公众号设置-功能设置-JS接口安全域名,设置网站的域名,可以多个

二、前端配置:测试阶段将wx.config中的debug设置为true,页面会弹出提示,

var url = window.location.href;//取当前路径

var title = $(".newsTitle").val();//分享标题

var desc = $(".newsKeyword").val();//分享摘要

var imgUrl = $(".newsImgUrl ").val();//缩略图地址,最好300x300以上;

$.ajax({

type: 'post',

data: { 'url': url },

url: '/ajax/WeChatShare.ashx',

success: function (data) {

var obj = JSON.parse(data);

wx.config({

debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来。

appId: obj.appId, // 必填,公众号的唯一标识

timestamp: obj.timestamp, // 必填,生成签名的时间戳

nonceStr: obj.nonceStr, // 必填,生成签名的随机串

signature: obj.signature,// 必填,签名

jsApiList: [

"checkJsApi",

"onMenuShareTimeline", //分享给好友

"onMenuShareAppMessage", //分享到朋友圈

"onMenuShareQQ", //分享到QQ

"onMenuShareWeibo" //分享到微博

] // 必填,需要使用的JS接口列表

});

}

})

wx.ready(function () {

var shareData = {

title: title,

desc: desc,

link: url,

imgUrl: imgUrl

};

wx.onMenuShareAppMessage(shareData);

wx.onMenuShareTimeline(shareData);

wx.onMenuShareQQ(shareData);

wx.onMenuShareWeibo(shareData);

});

三、后端配置:1.获取tichet。2.生成随机数。3.获取时间戳。4.sha1加密,可以参考,未做token过期处理和请求失败处理

/// <summary>

/// 签名

/// </summary>

/// <returns></returns>

private string GetSign( )

{

string tichet = GetJsApiTicket();

string nonceStr = GetRandomString(20);

string timestamp = GetTimeStamp();

string str= "jsapi_ticket="+ tichet + "&noncestr="+ nonceStr + "&timestamp="+ timestamp + "&url="+url;

WxShare model = new WxShare();

model.appId = IDCCIPKeys.Hyw_AppId;

model.nonceStr = nonceStr;

model.timestamp = timestamp;

model.signature = Sha1(str);

return model.ToJson();

}

/// <summary>

/// 获取tichet,注意这种

/// </summary>

/// <param name="access_token"></param>

/// <returns></returns>

private string GetJsApiTicket()

{

string ticket = Utils.GetCookie("ticketShare");

if (Utils.StrIsNullOrEmpty(ticket))

{

string access_token = GetAccessToken();

string url = "https://api./cgi-bin/ticket/getticket?access_token=" + access_token + "&type=jsapi";

string result = Utils.HttpGet(url);

var jo = (JObject)JsonConvert.DeserializeObject(result);

ticket = Utils.ObjectToStr(jo["ticket"]);

Utils.WriteCookie("ticketShare", ticket, 7200);

}

return ticket;

}

/// <summary>

/// 生成len位随机数

/// </summary>

/// <param name="length"></param>

/// <returns></returns>

static public string GetRandomString(int len)

{

string s = "0123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";

string reValue = string.Empty;

Random rnd = new Random(getNewSeed());

while (reValue.Length < len)

{

string s1 = s[rnd.Next(0, s.Length)].ToString();

if (reValue.IndexOf(s1) == -1) reValue += s1;

}

return reValue;

}

/// <summary>

/// 生成随机数的种子

/// </summary>

/// <returns></returns>

private static int getNewSeed()

{

byte[] rndBytes = new byte[4];

RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();

rng.GetBytes(rndBytes);

return BitConverter.ToInt32(rndBytes, 0);

}

/// <summary>

/// 获取时间戳

/// </summary>

/// <returns></returns>

public static string GetTimeStamp()

{

TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);

return Convert.ToInt64(ts.TotalSeconds).ToString();

}

/// <summary>

/// 基于Sha1的自定义加密字符串,注意是小写。

/// </summary>

/// <param name="str">要加密的字符串</param>

/// <returns>加密后的十六进制的哈希散列(字符串)</returns>

public static string Sha1(string str)

{

var buffer = Encoding.UTF8.GetBytes(str);

var data = SHA1.Create().ComputeHash(buffer);

var sb = new StringBuilder();

foreach (var t in data)

{

sb.Append(t.ToString("x2"));

}

return sb.ToString();

}

自己调试可以在:https://mp./debug/cgi-bin/sandbox?t=jsapisign上测试签名,注意签名是小写。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。