之前写过步骤 但是代码很少 这里奉献上我自己写的代码
我是用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(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
function GetDate() {
$.ajax({
type: 'POST',
url: 'handler.ashx?url=' + encodeURIComponent(location.href.split('#')[0]),
dataType: "text",
data: {
"dynamicUrl": encodeURIComponent(location.href.split('#')[0])
},
complete: function (XMLHttpRequest, textStatus) {
},
success: function (data) {
var a = data.split(',');
var timestamp = a[1];
var nonceStr = a[2];
var jsapi_ticket = a[3];
var sigu = a[4];
var url = a[5];
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: '1'
}, 600);
}, function () {
$(this).stop().animate({
opacity: '1'
}, 1000);
}).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: '1'
}, 600);
}, function () {
$(this).stop().animate({
opacity: '1'
}, 1000);
}).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 = /^1\d{10}$/;
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(1).match(reg);
if (r != null) return unescape(r[2]); 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) - 300) + "\"}", 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(1000).ToString(), "GBK").ToUpper().Replace("s", "S");
}
/// <summary>
/// 时间截,自1970年以来的秒数
/// </summary>
public static string getTimestamp()
{
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
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 "错误";
}
}
}
来源:https://www.cnblogs.com/taotaoyangyan/p/4819765.html