微信公众号官方文档地址:点击打开链接
微信sdk :微信官方sdk (微信支付的sdk,包含下列代码中的HttpService,WxPayData类,可以酌情引用或copy出需要的类)
微信公众号网页分享到朋友圈带图标需要进行jssdk注册,
在需要调用JS接口的页面引入如下JS文件http://res.wx.qq.com/open/js/jweixin-1.2.0.js
js前台代码,通过code得到AccessToken>AccessToken与页面地址获取jsapi_ticket>jsconfig初始化>调用分享接口
$(function () {
getloaca();
})
function getloaca() {
var JSAccessToken = localStorage.getItem("JSAccessToken");
if (JSAccessToken == null || JSAccessToken == "") {
$.ajax({
url: "/Home/getAccessGetJs",
type: 'post',
dataType: 'json',
async: false,
success: function (data) {
console.log(data);
var JsonData = JSON.parse(data);
getjsApi(JsonData.access_token);
localStorage.setItem("JSAccessToken", JsonData.access_token);
},
error: function (msg) {
console.log(msg);
}
})
}
else {
getjsApi(JSAccessToken);
}
}
function getjsApi(AccessToken) {
var jsticket = localStorage.getItem("jsapi_ticket")
if (jsticket == null || jsticket == "") {
$.ajax({
url: "/Home/AccessGetJs",
type: 'post',
dataType: 'json',
data: { access_token: AccessToken, signurl: window.location.href.split('#')[0] },
async: false,
success: function (data) {
if (typeof (data) == "object") {
if (data.errcode = 42001) {
localStorage.setItem("JSAccessToken", "");
localStorage.setItem("jsapi_ticket", "");
getloaca();
}
}
var JsonData = JSON.parse(data);
if (JsonData.errmsg == "ok") {
localStorage.setItem("jsapi_ticket", JsonData.jsapi_ticket);
SetUserLoad(JsonData);
}
else {
getloaca();
}
},
error: function (msg) {
getloaca();
console.log(msg);
}
})
}
else {
$.ajax({
url: "/Home/AccessGetJs",
type: 'post',
dataType: 'json',
data: { access_token: AccessToken, signurl: window.location.href.split('#')[0], jsticket: jsticket },
async: false,
success: function (data) {
var JsonData = JSON.parse(data);
if (JsonData.errmsg == "ok") {
SetUserLoad(JsonData);
}
else {
localStorage.setItem("JSAccessToken", "");
localStorage.setItem("jsapi_ticket", "");
getloaca();
}
},
error: function (msg) {
getloaca();
console.log(msg);
}
})
}
}
function SetUserLoad(JsonData) {
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: JsonData.appId, // 必填,公众号的唯一标识
timestamp: JsonData.timestamp, // 必填,生成签名的时间戳
nonceStr: JsonData.noncestr, // 必填,生成签名的随机串
signature: JsonData.signature,// 必填,签名,见附录1
jsApiList: ['checkJsApi', 'openLocation', 'getLocation', 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
wx.ready(function () {
getjsJW();
});
wx.error(function (res) {
console.log(res);
localStorage.setItem("JSAccessToken", "");
localStorage.setItem("jsapi_ticket", "");
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});
}
function getjsJW() {
wx.onMenuShareTimeline({
title: document.title, // 分享标题
link: window.location.href.split('#')[0], // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: document.images[0].getAttribute("src"), // 分享图标
success: function () {
// alert("分享成功")
},
cancel: function () {
// alert("分享取消")
}
});
wx.onMenuShareAppMessage({
title: document.title, // 分享标题
desc: 'Hibody 想把你的“运动技能和空闲时间”约出去,让运动不止好玩,还能变现!', // 分享描述
link: window.location.href.split('#')[0], // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: document.images[0].getAttribute("src"), // 分享图标
success: function () {
//alert("分享成功")
},
cancel: function () {
// alert("分享取消")
}
});
//分享qq好友
wx.onMenuShareQQ({
title: document.title, // 分享标题
desc: 'Hibody 想把你的“运动技能和空闲时间”约出去,让运动不止好玩,还能变现!', // 分享描述
link: window.location.href.split('#')[0], // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: document.images[0].getAttribute("src"), // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
// 获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口
wx.onMenuShareWeibo({
title: document.title, // 分享标题
desc: 'Hibody 想把你的“运动技能和空闲时间”约出去,让运动不止好玩,还能变现!', // 分享描述
link: window.location.href.split('#')[0], // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: document.images[0].getAttribute("src"), // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
// 获取“分享到QQ空间”按钮点击状态及自定义分享内容接口
wx.onMenuShareQZone({
title: document.title, // 分享标题
desc: 'Hibody 想把你的“运动技能和空闲时间”约出去,让运动不止好玩,还能变现!', // 分享描述
link: window.location.href.split('#')[0], // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: document.images[0].getAttribute("src"), // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
}
c# Vs后台代码:
///
/// 得到初始化参数
///
///
///
public ActionResult AccessGetJs(string access_token, string signurl, string jsticket)
{
AccessJs data = new AccessJs();
if (string.IsNullOrWhiteSpace(jsticket))
{
string url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + access_token + "&type=jsapi";
string response = HttpService.Get(url);
data = JsonHelper.JSONToObject(response);
}
else
{
data.errcode = 0; data.errmsg = "ok"; data.ticket = jsticket;
}
if (data.errmsg == "ok")
{
WxPayData model = new WxPayData();
//调App接口参数
string noncestr = WxPayApi.GenerateNonceStr();
string timestamp = WxPayApi.GenerateTimeStamp();
model.SetValue("jsapi_ticket", data.ticket);//jsapi
model.SetValue("noncestr", noncestr);//随机字符串
model.SetValue("timestamp", timestamp);//时间戳
model.SetValue("url", "http://soidoo.com");//url
String string1 = "jsapi_ticket=" + data.ticket + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + signurl;
//6、将字符串进行sha1加密
//String signature = SHA1(string1);
string signature = Sha1Sign(string1);
model.SetValue("signature", signature);//签名
model.SetValue("appId", WxPayConfig.APPID);//appId
model.SetValue("errmsg", "ok");//返回值
model.SetValue("errurl", string1);//返回值
var datamodel = model.ToJson().Replace("\\", "");
return Json(datamodel);
}
return Json(data);
}
///
/// 获取access_token
///
///
///
public ActionResult getAccessGetJs(string JSAccessToken)
{
string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + WxPayConfig.APPID + "&secret=" + WxPayConfig.APPSECRET;
string response = HttpService.Get(url);
return Json(response);
}
#region SHA1加密
public string Sha1Sign(string str)
{
SHA1 sha1 = new SHA1CryptoServiceProvider();
byte[] bytes_sha1_in = System.Text.UTF8Encoding.Default.GetBytes(str);
byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in);
string signature = BitConverter.ToString(bytes_sha1_out);
signature = signature.Replace("-", "").ToLower();
return signature;
}
#endregion }
public class AccessJs { public int errcode { get; set; } public string errmsg { get; set; } public string ticket { get; set; } public int expires_in { get; set; } }
就是如此简单就成功了,同志们要好好学习呀!
it技术交流群,群文件中分享书籍,群里可讨论it技术,群号681169497