2020-10-10 乐帮网
c# 企业微信
微信公众平台面(包含企业微信)JSSDK使用步骤主要包含以下几项:
(1)绑定域名
进入微信平台“公众号设置”的“功能设置”里填写“JS接口安全域名”。
(2)引入JS文件
(https):http://res.wx.qq.com/open/js/jweixin-1.6.0.js
(3)使用config接口注入权限验证配置。
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名
jsApiList: [] // 必填,需要使用的JS接口列表
});
(4)使用ready接口处理成功验证
wx.error(function(res){
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});
其中C#版的生成权限验证配置的代码封装如下:
public class SignHelper
{
public static string GetSha1(string str)
{
#if NET45
SHA1 sha = new SHA1CryptoServiceProvider();
#else
SHA1 sha = SHA1.Create();
#endif
ASCIIEncoding encode = new ASCIIEncoding();
byte[] dataToHash = encode.GetBytes(str);
byte[] dataHashed = sha.ComputeHash(dataToHash);
string hash = BitConverter.ToString(dataHashed).Replace("-", "");
return hash;
}
}
public class JsSDKHelper
{
private static DateTime utc = new DateTime(1970, 1, 1, 0, 0, 0, 0);
public static string GetNoncestr()
{
return Guid.NewGuid().ToString("N");
}
public static long GetTimestamp()
{
TimeSpan ts = DateTime.UtcNow - utc;
return Convert.ToInt64(ts.TotalSeconds);
}
public static string GetSignature(string jsapi_ticket, string noncestr, long timestamp, string url)
{
StringBuilder sb = new StringBuilder();
sb.Append("jsapi_ticket=").Append(jsapi_ticket).Append("&")
.Append("noncestr=").Append(noncestr).Append("&")
.Append("timestamp=").Append(timestamp).Append("&")
.Append("url=").Append(url.IndexOf("#") >= 0 ? url.Substring(0, url.IndexOf("#")) : url);
return SignHelper.GetSha1(sb.ToString()).ToLower();
}
public static string GetJsToken()
{
WxCache cache = new WxCache();
return cache.GetJsToken();
}
public static string Replace(string source, string pattern, string replacement)
{
return Regex.Replace(source, "^" + pattern, replacement, RegexOptions.IgnoreCase);
}
使用方法,在页面后台代码中调用:
@{
long timestamp = JsSDKHelper.GetTimestamp();
string nonceStr = JsSDKHelper.GetNoncestr();
string url = Request.Url.ToString().ToLower();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
System.Collections.Generic.Dictionary<string, string> HeaderList = new System.Collections.Generic.Dictionary<string, string>();
foreach (string headerKey in Request.Headers)
{
HeaderList.Add(headerKey.ToLower(), Request.Headers[headerKey]);
}
if (HeaderList.ContainsKey("x-forwarded-proto"))
{
if (HeaderList["x-forwarded-proto"].ToLower() == "https")
{
url = url.Replace("http:", "https:");
}
}
string signature = JsSDKHelper.GetSignature(JsSDKHelper.GetJsToken(WxConfig.MainSecret), nonceStr, timestamp, url);
}
在页面JS中直接注入权限验证:
<script type="text/javascript">
wx.config({
beta: true,
debug: true,
appId: '@WxConfig.CropID',
timestamp: @timestamp,
nonceStr: '@nonceStr',
signature: '@signature',
jsApiList: ['closeWindow']
});
wx.ready(function () {
});
wx.error(function (res) {
layer.info('Error wx:' + JSON.stringify(res));
});
wx.checkJsApi({
jsApiList: ['chooseImage'],
success: function (res) {
}
});
</script>
以上就是全部代码,欢迎指正,有问题可以在公众号留言。
欢迎查看我的作品:项目营销管理系统
关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com
庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。
如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力