using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Security;
using System.Web.Script.Serialization;
using sohovan.com.wxapi;
namespace WXKF
{
public class JsApi
{
JavaScriptSerializer Jss = new JavaScriptSerializer();
public JsApi() { }
#region 验证JsApi权限配置
/// <summary>
/// 获取JsApi权限配置的数组/四个参数
/// </summary>
/// <param name="Appid">应用id</param>
/// <param name="Appsecret">密钥</param>
/// <returns>json格式的四个参数</returns>
public string GetJsApiInfo(string Appid, string Appsecret)
{
string timestamp = CommonMethod.CommonMethod.ConvertDateTimeInt(DateTime.Now).ToString();//生成签名的时间戳
string nonceStr = CommonMethod.CommonMethod.GetRandCode(16);//生成签名的随机串
string url = System.Web.HttpContext.Current.Request.Url.AbsoluteUri.ToString();//当前的地址
string jsapi_ticket = "";
//ticket 缓存7200秒
if (System.Web.HttpContext.Current.Session["jsapi_ticket"] == null)
{
jsapi_ticket = CommonMethod.CommonMethod.WebRequestPostOrGet("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + BasicApi.GetTokenSession(Appid, Appsecret) + "&type=jsapi", "");
System.Web.HttpContext.Current.Session["jsapi_ticket"] = jsapi_ticket;
System.Web.HttpContext.Current.Session.Timeout = 7200;
}
else
{
jsapi_ticket = System.Web.HttpContext.Current.Session["jsapi_ticket"].ToString();
}
Dictionary<string, object> respDic = (Dictionary<string, object>)Jss.DeserializeObject(jsapi_ticket);
jsapi_ticket = respDic["ticket"].ToString();//获取ticket
string[] ArrayList = { "jsapi_ticket=" + jsapi_ticket, "timestamp=" + timestamp, "noncestr=" + nonceStr, "url=" + url };
Array.Sort(ArrayList);
string signature = string.Join("&", ArrayList);
signature = FormsAuthentication.HashPasswordForStoringInConfigFile(signature, "SHA1").ToLower();
return "{\"appId\":\"" + Appid + "\", \"timestamp\":" + timestamp + ",\"nonceStr\":\"" + nonceStr + "\",\"signature\":\"" + signature + "\"}";
}
#endregion
}
}
public string appId;
public string timestamp;
public string nonceStr;
public string signature;
protected void Page_Load(object sender, EventArgs e)
{
JsApi jsapi = new JsApi();
string data = jsapi.GetJsApiInfo("***", "***");
JObject jo = (JObject)JsonConvert.DeserializeObject(data);
appId = jo["appId"].ToString();
timestamp = jo["timestamp"].ToString();
nonceStr = jo["nonceStr"].ToString();
signature = jo["signature"].ToString();
//Response.Write("<script type=‘text/javascript‘>btn();</script>");
// ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>btn();</script>");
}
<title>请稍等,定位中。。。</title>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script src="Scripts/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=IWf1r4wh9pdpXUPOwGvkLxYW"></script>
<script src="Scripts/cvi_busy_lib.js"></script>
<script>
function wxconfig() {
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: ‘<% =appId%>‘, // 必填,公众号的唯一标识
timestamp: ‘<% =timestamp%>‘, // 必填,生成签名的时间戳
nonceStr: ‘<% =nonceStr%>‘, // 必填,生成签名的随机串
signature: ‘<% =signature%>‘,// 必填,签名,见附录1
jsApiList: [
‘onMenuShareTimeline‘,
‘onMenuShareAppMessage‘,
‘onMenuShareQQ‘,
‘onMenuShareWeibo‘,
‘getLocation‘,
‘openLocation‘
] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
}
var getParam = function (name) {
var search = document.location.search;
var pattern = new RegExp("[?&]" + name + "\=([^&]+)", "g");
var matcher = pattern.exec(search);
var items = null;
if (null != matcher) {
try {
items = decodeURIComponent(decodeURIComponent(matcher[1]));
} catch (e) {
try {
items = decodeURIComponent(matcher[1]);
} catch (e) {
items = matcher[1];
}
}
}
return items;
};
wx.ready(function () {
wx.getLocation({
type: ‘wgs84‘, // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入‘gcj02‘
success: function (res) {
var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
var speed = res.speed; // 速度,以米/每秒计
var accuracy = res.accuracy; // 位置精度
alert("维度:" + latitude + " 经度:" + longitude);
},
cancel: function (res) {
alert(res);
alert(‘用户拒绝授权获取地理位置‘);
}
});
});
wxconfig();
</script>
原文:http://www.cnblogs.com/mchuang/p/5156946.html