微信应用js-sdk自定义分享图文
之前写过步骤 但是代码很少 这里奉献上我自己写的代码
我是用js做的 先奉上js部分的代码
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>众悦学车无忧险 免费申领</title>
<meta name="description" content="李才桃">
<meta name="keywords" content="李才桃">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta name="renderer" content="webkit">
<meta http-equiv="Cache-Control" content="no-siteapp" />
<link rel="icon" type="image/png" href="assets/i/favicon.png">
<link rel="stylesheet" href="assets/css/amazeui.min.css">
<link href="css/app.css" rel="stylesheet" type="text/css" />
<script src="assets/js/jquery-1.8.3.min.js" type="text/javascript"></script>
<script src="assets/js/amazeui.min.js" type="text/javascript"></script>
<script src="assets/js/jquery.min.js" type="text/javascript"></script>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () { GetDate(); })
function getcanshu(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr().match(reg);
if (r != null) return unescape(r[]); return null;
}
function GetDate() {
$.ajax({
type: 'POST',
url: 'handler.ashx?url=' + encodeURIComponent(location.href.split('#')[]),
dataType: "text",
data: {
"dynamicUrl": encodeURIComponent(location.href.split('#')[])
},
complete: function (XMLHttpRequest, textStatus) {
},
success: function (data) {
var a = data.split(',');
var timestamp = a[];
var nonceStr = a[];
var jsapi_ticket = a[];
var sigu = a[];
var url = a[];
wx.config({
debug: false,
appId: '你的微信公众号',
timestamp: timestamp,
nonceStr: nonceStr,
signature: sigu,
jsApiList: [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareWeibo'
]
});
wx.checkJsApi({
jsApiList: ['checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareWeibo'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
success: function (res) {
$("#TextBox1").val(res);
// 以键值对的形式返回,可用的api值true,不可用为false
// 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
// alert('wx.error: ' + JSON.stringify(res));
}
});
wx.ready(function () {
var title = "众悦学车无忧险 免费申领";
var wxname = $("#hidd_wxname").val();
var content = wxname + "喊你免费来领\"众悦考试险\",驾考不过赔学费,众悦携手中国平安为您全程护航!";
var img = "http://m.zyue.com/wxtest/assets/gaoxiaoimages/gxwxads.png";
//var link = encodeURIComponent(location.href.split('#')[0]);
var link = "http://m.zyue.com/wxtest/gaoxiaoindex.aspx"; //分享到朋友圈
wx.onMenuShareTimeline({
title: title, // 分享标题
link: link, // 分享链接
imgUrl: img, // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
// 获取“分享给朋友”按钮点击状态及自定义分享内容接口
wx.onMenuShareAppMessage({
title: title, // 分享标题
desc: content, // 分享描述
link: link, // 分享链接
imgUrl: img, // 分享图标
type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
//获取“分享到QQ”按钮点击状态及自定义分享内容接口
wx.onMenuShareQQ({
title: title, // 分享标题
desc: content, // 分享描述
link: link, // 分享链接
imgUrl: img, // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
//获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口
wx.onMenuShareWeibo({
title: title, // 分享标题
desc: content, // 分享描述
link: link, // 分享链接
imgUrl: img, // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
//获取“分享到QQ空间”按钮点击状态及自定义分享内容接口
wx.onMenuShareQZone({
title: title, // 分享标题
desc: content, // 分享描述
link: link, // 分享链接
imgUrl: img, // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
});
wx.error(function (res) {
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
}); }
});
}
</script>
<script type="text/javascript">
$(function ($) { //提交申请页面
$("#example").hover(function () {
$(this).stop().animate({
opacity: ''
}, );
}, function () {
$(this).stop().animate({
opacity: ''
}, );
}).on('click', function () {
$("body").append("<div id='mask'></div>");
$("#mask").addClass("mask").fadeIn("slow");
$("#LoginBox").fadeIn("slow");
});
//
//关闭
$(".close_btn").hover(function () { $(this).css({ color: 'black' }) }, function () { $(this).css({ color: '#999' }) }).on('click', function () {
$("#LoginBox").fadeOut("fast");
$("#mask").css({ display: 'none' });
}); //申请成功页面
//弹出登录
$("#example_successful").hover(function () {
$(this).stop().animate({
opacity: ''
}, );
}, function () {
$(this).stop().animate({
opacity: ''
}, );
}).on('click', function () {
$("body").append("<div id='mask_successful'></div>");
$("#mask_successful").addClass("mask_successful").fadeIn("slow");
$("#LoginBox_successful").fadeIn("slow");
var canshu = getcanshu("z_openid");
$.ajax({
type: 'POST',
url: 'ashx/addoneclick.ashx',
dataType: "text",
data: {
"openid": canshu
}
});
});
});
function UserAddVerfy() {
var addName = document.getElementById("input_name").value;
var addTel = document.getElementById("input_photo").value;
var addCity = document.getElementById("input_city").value;
var addschool = document.getElementById("input_school").value;
var addTelReg = /^\d{}$/;
if (addName == "" || addName == null) {
alert("请输入用户名");
return false;
}
else if (addTel == "" || addTel == null || !addTelReg.test(addTel)) {
alert("请输入手机号码");
return false;
}
else if (addCity == "" || addCity == null) {
alert("请输入城市");
return false;
}
else if (addschool == "" || addschool == null) {
alert("请输入学校");
return false;
}
return true;
}
function getcanshu(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr().match(reg);
if (r != null) return unescape(r[]); return null;
} </script>
</head>
异步操作的代码
<%@ WebHandler Language="C#" Class="handler" %> using System;
using System.Web;
using System.IO;
using System.Data;
using System.Text;
using System.Web.UI;
using System.Threading;
using System.Xml; public class handler : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string timeStamp = TenpayUtil.getTimestamp();
string nonceStr = TenpayUtil.getNoncestr();
string appid = "你的微信公众号";
////获取公众号的access_token
string gongzhong = GetPage("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的微信公众号&secret=dc29b4e4f0c0827b19315e8c3068ca94");
gongzhonghao hao = JsonDeserialize<gongzhonghao>(gongzhong);
string token = hao.access_token;
string ticket = GetPage("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=FaQRGJggiL4cbyi3YpDKY6RZMltz2MZXfGZbJLpse5MKn4EsxHyA7VbfarQ76kVN9OgtzUuLIxxRdHRroRa0TqXxbtN1EgAvDBvM0FVgcmU&type=jsapi");
string jstik = Getjsapi_tiket(token);
string url = context.Request.QueryString["url"].ToString();
string singture = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile("jsapi_ticket=" + jstik + "&noncestr=" + nonceStr + "×tamp=" + timeStamp + "&url=" + url + "", "SHA1");
context.Response.Write(appid + "," + timeStamp + "," + nonceStr + "," + jstik + "," + singture.ToLower() + "," + url);
}
public bool IsReusable
{
get
{
return false;
}
}
/// <summary>
/// 获取微信令牌
/// </summary>
/// <returns></returns>
public string Getjsapi_tiket(string token)
{
FileStream fs1 = new FileStream("d:/webwz/m/wxtest/jsapi_tiket.txt", FileMode.Open);
StreamReader sr = new StreamReader(fs1, Encoding.GetEncoding("GBK"));
string AccToken = sr.ReadToEnd();
sr.Close();
fs1.Close();
getqianming at = JsonDeserialize<getqianming>(AccToken);
if (DateTime.Now > Convert.ToDateTime(at.expires_in))
{
//当前时间大于过期时间就重新获取jsapi_tiket令牌
//获取到微信返回的json数据
string ticket = GetPage("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+token+"&type=jsapi");
getqianming jstiket = JsonDeserialize<getqianming>(ticket);
string jstik = jstiket.ticket;
//将返回的数据写入到文件内
//{"errcode":0,"errmsg":"ok","ticket":"bxLdikRXVbTPdHSM05e5u6THi9cRoPFeaORrzm-Klx3NMKJVnp0u-oa3DL920A6AsEBxM2DZTRCAkXlS5yoIkg","expires_in":7200}
//E:/work1/wxtest/jsapi_tiket.txt
WriteToFile("d:/webwz/m/wxtest/jsapi_tiket.txt", "{\"errcode\":" + jstiket.errcode + ",\"errmsg\":\"" + jstiket.errmsg + "\",\"ticket\":\"" + jstik + "\",\"expires_in\":\"" + DateTime.Now.AddSeconds(Convert.ToInt32(jstiket.expires_in) - ) + "\"}", false);
return jstik;
}
else
{ //未过期就继续使用从文档中获取的AccessToken令牌
return at.ticket;
}
}
/// <summary>
/// 写入文件
/// </summary>
/// <param name="dizhi">写入地址</param>
/// <param name="content">写入内容</param>
public string WriteToFile(string dizhi, string content, bool isfugai)
{
string message = string.Empty;
try
{
System.IO.FileInfo file = new System.IO.FileInfo(dizhi);
//独占方式,因为文件只能由一个进程写入.
System.IO.StreamWriter writer1 = null;
writer1 = new System.IO.StreamWriter(file.FullName, isfugai);//文件不存在就创建
writer1.WriteLine(content);
writer1.Close();
}
catch
{
message = "已有人在同步数据请稍后同步";
}
return message;
} /// <summary>
/// 获取gongzhonghao 公众号的access_token
/// </summary>
public class gongzhonghao
{
/// <summary>
/// 网页授权接口调用凭证
/// </summary>
public string access_token { get; set; }
/// <summary>
/// access_token接口调用凭证超时时间
/// </summary>
public string expires_in { get; set; }
}
/// <summary>
/// 获取jsapi_ticket
/// </summary>
public class getqianming
{
public string errcode { get; set; }
public string errmsg { get; set; }
public string ticket { get; set; }
public string expires_in { get; set; }
}
public class TenpayUtil
{
/// <summary>
/// 统一支付接口
/// </summary>
const string UnifiedPayUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder"; /// <summary>
/// 网页授权接口
/// </summary>
const string access_tokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token"; /// <summary>
/// 微信订单查询接口
/// </summary>
const string OrderQueryUrl = "https://api.mch.weixin.qq.com/pay/orderquery"; /// <summary>
/// 随机串
/// </summary>
public static string getNoncestr()
{
Random random = new Random();
return MD5Util.GetMD5(random.Next().ToString(), "GBK").ToUpper().Replace("s", "S");
} /// <summary>
/// 时间截,自1970年以来的秒数
/// </summary>
public static string getTimestamp()
{
TimeSpan ts = DateTime.UtcNow - new DateTime(, , , , , , );
return Convert.ToInt64(ts.TotalSeconds).ToString();
}
/// <summary>
/// 获取签名
/// </summary>
public class Jsapiticket
{
public string errcode { get; set; }
public string errmsg { get; set; }
public string ticket { get; set; }
public string expires_in { get; set; }
} }
public class MD5Util
{
public MD5Util()
{
//
// TODO: 在此处添加构造函数逻辑
//
} /** 获取大写的MD5签名结果 */
public static string GetMD5(string encypStr, string charset)
{
string retStr;
System.Security.Cryptography.MD5CryptoServiceProvider m5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); //创建md5对象
byte[] inputBye;
byte[] outputBye; //使用GB2312编码方式把字符串转化为字节数组.
try
{
inputBye = System.Text.Encoding.GetEncoding(charset).GetBytes(encypStr);
}
catch (Exception ex)
{
inputBye = System.Text.Encoding.GetEncoding("GB2312").GetBytes(encypStr);
}
outputBye = m5.ComputeHash(inputBye); retStr = System.BitConverter.ToString(outputBye);
retStr = retStr.Replace("-", "").ToUpper();
return retStr;
}
}
/// <summary>
/// json格式转化
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonString"></param>
/// <returns></returns>
public T JsonDeserialize<T>(string jsonString)
{
System.Runtime.Serialization.Json.DataContractJsonSerializer ser = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T));
System.IO.MemoryStream ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(jsonString));
T obj = (T)ser.ReadObject(ms);
return obj;
}
public string GetPage(string posturl)
{
System.IO.Stream instream = null;
System.IO.StreamReader sr = null;
System.Net.HttpWebResponse response = null;
System.Net.HttpWebRequest request = null;
System.Text.Encoding encoding = System.Text.Encoding.UTF8;
// 准备请求...
try
{
// 设置参数
request = System.Net.WebRequest.Create(posturl) as System.Net.HttpWebRequest;
System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = true;
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
//发送请求并获取相应回应数据
response = request.GetResponse() as System.Net.HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
instream = response.GetResponseStream();
sr = new System.IO.StreamReader(instream, encoding);
//返回结果网页(html)代码
string content = sr.ReadToEnd();
string err = string.Empty;
return content;
}
catch (Exception ex)
{
string err = ex.Message;
return "错误";
}
} }
微信应用js-sdk自定义分享图文的更多相关文章
- 微信企业号JS SDK
微信企业号JS SDK <?php define('CorpID', "wx82e2c31215d9a5a7"); define('CorpSecret', "&q ...
- 微信js接口自定义分享内容
最近客户有个要求,需要给网页添加微信分享功能,当然指的是用微信自带浏览器的时候,希望用户在最后一页点击分享的时候是分享的首页.曾经无意中看到过微信公众开发者平台提供了js接口,所以试着做了做,果然,跌 ...
- 微信内 H5 页面自定义分享
起源: 最近公司在做一个活动的h5页面,在微信内打开时需要进行微信授权,然后后端会重定向到这个页面并且携带了一些参数(openid等).问题是点击微信的原生分享时,会把携带的这些参数一起分享出去,等于 ...
- 微信公众号jssdk自定义分享,二次分享自定义失败解决技巧
百度上自定义微信分享标题以及描述的解决方法有很多,基本上都能实现一次分享:流程基本上是这样的 1.首先引入微信jssdk =><script src="http://res.wx ...
- .netcore2.1 JS-SDK 从后台获取微信签名,实现自定义分享标题、描述、图片
最近项目移动端需要实现微信自定义分享功能,包含分享自定义标题.描述等. 首先到公众号的后台,功能设置里面,添加将要被分享的域名,如图 后端签名算法实现 ,参考腾讯开发者文档https://mp.wei ...
- Android应用之——微信微博第三方sdk登录分享使用过程中的一些常见问题
前言 近期在使用第三方登录和分享的过程中遇到了非常多问题,一方面能够归结为自己经验的不足,还有一方面事实上也说明了官方文档的含糊不清.这篇博文不会写关于怎样使用第三方登录分享,由于官方文档已经写明了步 ...
- 微信前端js sdk以外的开发
此时页面中就会出现刚才我画红圈部分的工具条. 这个工具条再加上上面的标题栏工具条. 极大的降低了可视区域的面积. 是否能将它去掉呢?答案是能够的.增加以下代码就能够去掉微信中以下的工具条: docum ...
- 调用微信js sdk
场景:需要调用微信获取当前位置的借口. 途径:查看微信 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 .后 ...
- 微信开发(2):微信js sdk分享朋友圈,朋友,获取config接口注入权限验证(转)
进行微信开发已经一阵子了,从最初的什么也不懂,到微信授权登录,分享,更改底部菜单,素材管理,等. 今天记录一下微信jssdk 的分享给朋友的功能,获取config接口注入. 官方文档走一下简单说:四步 ...
随机推荐
- ReactNative 环境配置
一直是从事iOS的开发,现在研究下mac环境下reatNative的环境配置: 1. 安装HomeBlew(OS系统上的一个安装包管理器,安装后可以方便后续安装包的安装.) 终端命令: ruby -e ...
- SEO笔记:Anatomy of a URL
Dr. Peter J. Meyers 原文链接:https://moz.com/blog/seo-cheat-sheet-anatomy-of-a-url 原文主要通过对比讲解 SEO优化后的URL ...
- samba创建权限(复制)
1.今天发现用samba挂载开发过程中,发现别人的权限和我的经常不一致,导致提交git的时候都被提交了,心想应该有哪里有一个统一设置的可以设置用户的默认权限,后来百度之后找到下面的文章,以后创建文件和 ...
- PostgreSQL 9.3:在windows(包括win7)下的安装与正确配置
首先,以下是常用命令: ③ initdb 初始化 数据库. ④ pg_ctl start 启动数据库 ⑤ pg_ctl stop 停止数据库 ⑥ post_svc -install 建立windows ...
- Aliexpress API 授权流程整理(转载)
前言 我零零总总用了好几个月的时间,写了一个自用的小程序,从 Aliexpress 上抓取订单的小程序.刚开始写的时候,该API还没有开放,而且没有订单相关的功能.我完全是通过模拟用户在网页上的操作来 ...
- 辅助模块应用(auxiliary/scanner/portscan/tcp)
实验步骤 创建msf所需的数据库 之前我们开启msf时下面总会出现一个红色的小减号,原来是因为没有和数据库键连接,于是首先我们要手动建立一个数据库... 使用命令来实现: service postgr ...
- linux查看tftp服务是否启动
netstat -a |grep tftp 若输出以下信息说明tftp服务已启动: udp 0 0 *:tftp *:*
- hdu 6430 线段树 暴力维护
Problem E. TeaTree Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Oth ...
- 《重构网络-SDN架构与实现》阅读随笔
<重构网络-SDN架构与实现>: SDNLAB <重构网络-SDN架构与实现>新书有奖试读活动 资源下载 随笔 有幸拜读了李呈前辈和杨泽卫杨老师的作品<重构网络-SDN架 ...
- python 输出所有列表元素的乘积
def multiply_list(items): tot = 1 for x in items: tot *= x return tot print(multiply_list([1,2,-8]))