微信jssdk ajax 获取签名,Net获取微信JS-SDK的signature签名

我没做任何封装,功能是实现了。

页面引用jweixin

页面ajax获取签名url = location.href.split('#')[0];

//alert(url);

$.ajax({

type: "post",

url: "weixininterface.ashx?url=" + url,

dataType: "json",

async: false,

success: function (data, textStatus) {

//salert(data.timestamp);

wx.config({

// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

debug: false,

// 必填,公众号的唯一标识

appId: data.appId,

// 必填,生成签名的时间戳

timestamp: data.timestamp,

// 必填,生成签名的随机串

nonceStr: data.noncestr,

// 必填,签名

signature: data.signature,

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

jsApiList: ['scanQRCode']

});

wx.error(function (res) {

alert("出错了:" + res.errMsg);//这个地方的好处就是wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。

});

wx.ready(function () {

wx.checkJsApi({

jsApiList: ['scanQRCode', 'chooseImage', 'uploadImage', 'downloadImage'],

success: function (res) {

}

});

});

}

});

weixininterface.ashx代码public class weixininterface : IHttpHandler

{

public void ProcessRequest(HttpContext context)

{

context.Response.ContentType = "text/plain";

context.Response.Write(GetWeiXinJSApiConfig(context));

context.Response.End();

}

/// 

/// 取得JSApi配置

/// 

/// 

protected string GetWeiXinJSApiConfig(HttpContext context)

{

object result;

string url = context.Request["url"].ToString();

int lastIndexOfSharpChar = url.LastIndexOf('#');

if (lastIndexOfSharpChar >= 0)

url = url.Remove(lastIndexOfSharpChar);

BLL.weixin_account bll = new BLL.weixin_account();

Model.weixin_account model = bll.GetModel(1);

string appId = model.appid;

string appSecret = model.appsecret;

if (string.IsNullOrEmpty(appId) || string.IsNullOrEmpty(appSecret))

{

result = new

{

IsSuccess = false,

Message = "未录入开发者信息!",

};

}

else

{

long timestamp = ConvertDateTimeToInt(DateTime.Now);

string noncestr = GetNonceStr();

string signature = "";

if (!string.IsNullOrEmpty(appId) && !string.IsNullOrEmpty(appSecret))

{

signature = GetJSApiTicketSignature(appId, appSecret, noncestr, timestamp, url);//获取签名

result = new

{

IsSuccess = true,

Message = "",

appId = appId,

appSecret = appSecret,

timestamp = timestamp,

noncestr = noncestr,

signature = signature

};

}

else

{

result = new

{

IsSuccess = false,

Message = "未取得微信配置信息!",

};

}

}

return JsonConvert.SerializeObject(result);

}

/// 

/// 取得微信JSApi签名

/// 

/// 

public static string GetJSApiTicketSignature(string appId, string appSecret, string noncestr, long timesStamp, string url)

{

BLL.weixin_account bll = new BLL.weixin_account();

Model.weixin_account model = bll.GetModel(1);

string jsApiTicket = model.js_api_ticket;

string hashSource = string.Format("jsapi_ticket={0}&noncestr={1}&timestamp={2}&url={3}",jsApiTicket, noncestr, timesStamp, url);

System.Security.Cryptography.SHA1 sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider();

byte[] bytes_sha1_in = System.Text.UTF8Encoding.Default.GetBytes(hashSource);

byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in);

string str_sha1_out = BitConverter.ToString(bytes_sha1_out);

str_sha1_out = str_sha1_out.Replace("-", "");

return str_sha1_out;

}

/// 

/// 取得nonceStr

/// 

/// 

public string GetNonceStr()

{

string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

StringBuilder sbResult = new StringBuilder();

Random random = new Random(chars.Length);

for (int i = 0; i 

{

sbResult.Append(chars[random.Next(chars.Length)]);

}

return sbResult.ToString();

}

/// 

/// 将c# DateTime时间格式转换为Unix时间戳格式

/// 

/// 时间

/// long

public static long ConvertDateTimeToInt(System.DateTime time)

{

System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));

long t = (time.Ticks - startTime.Ticks) / 10000;   //除10000调整为13位

return t;

}

public bool IsReusable

{

get

{

return false;

}

}

}

另外获取token、js api ticket可以看这篇文章:Java获取微信JS-SDK的signature签名。

因为老是开发类似的接口,我用java的quartz框架写了个平台专门执行定时任务的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值