微信jssdk配置的问题,使用MVC制作的demo
一,view代码
<script src="~/Scripts/jquery-3.3.1.js"></script>
<script src="~/Scripts/jweixin-1.4.0.js"></script>
@*<script src="~/Scripts/jweixin-1.0.0.js"></script>*@
<script>
wx.config({
debug: true,
appId: "@ViewBag.AppId",
timestamp: "@ViewBag.timestamp",
nonceStr: "@ViewBag.nonceStr",
signature: "@ViewBag.signature", jsApiList: [
"checkJsApi",
"onMenuShareAppMessage",
]
});
wx.ready(function () {
wx.checkJsApi({
jsApiList: ['onMenuShareAppMessage'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
success: function (res) {
// 以键值对的形式返回,可用的api值true,不可用为false
// 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
}
}); wx.error(function (res) {
//alert(res);
});
wx.onMenuShareAppMessage({
title: '测试', // 分享标题
desc: '测试', // 分享描述
link: 'http://chwmay.51mypc.cn/Home/Index', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: 'https://i.vzan.cc/image/liveimg/jpeg/2018/4/13/185209cf7bdd0050fd4ced84b0a64aded068ef.jpeg', // 分享图标
type: 'link',
dataUrl: '',
success: function () {
alert();
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
})
</script>
二,控制器代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebTestDemo.Code; namespace WebTestDemo.Controllers
{
/// <summary>
/// 微信JSSDK的使用
/// </summary>
public class JssdkController : BaseController
{
public static string AppId = "";
public static string timestamp = "";
public static string nonceStr = "";
public static string signature = ""; public ActionResult Index()
{
timestamp = JssdkHelper.ConvertDateTimeInt(DateTime.Now).ToString(); //时间戳获取当前时间
nonceStr = "Test" + new Random().Next(, ) + "Demo"; //随机字符串没有固定的字符和没有特定的格式
string url = HttpContext.Request.Url.ToString(); // url(当前网页的URL,不包含#及其后面部分)
url = url.Substring(, url.IndexOf('#') == - ? url.Length : url.IndexOf('#'));
signature = JssdkHelper.ReturnSignature(timestamp, nonceStr, url);
ViewBag.AppId = JssdkHelper.appid;
ViewBag.timestamp = timestamp;
ViewBag.nonceStr = nonceStr;
ViewBag.signature = signature;
return View();
}
}
}
三,JSSDK帮助类代码
public static class JssdkHelper
{ public const string appid = "你的appid";
public const string appsecret = "你的appsecret ";
public const string baseurl = "https://api.weixin.qq.com/";
public const string openurl = "https://open.weixin.qq.com/";
public const string token = "test"; public static int ConvertDateTimeInt(DateTime time)
{
DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(, , ));
return (int)(time - startTime).TotalSeconds;
} /// <summary>
/// 返回签名
/// </summary>
/// <param name="signature"></param>
/// <param name="timestamp"></param>
/// <param name="nonce"></param>
/// <returns></returns>
public static string ReturnSignature(string timestamp, string nonce, string url)
{
string tmpStr = string.Empty;
string jsapi_ticket = Getjsapi_ticket();
SortedList<string, string> SLString = new SortedList<string, string>(); SLString.Add("jsapi_ticket", jsapi_ticket);
SLString.Add("noncestr", nonce);
SLString.Add("timestamp", timestamp);
SLString.Add("url", url);
foreach (KeyValuePair<string, string> des in SLString) //返回的是KeyValuePair,在学习的时候尽量少用var,起码要知道返回的是什么
{
tmpStr += des.Key + "=" + des.Value + "&";
}
if (tmpStr.Length > )
tmpStr = tmpStr.Substring(, tmpStr.Length - );
return Utils.SHA1Encrypt(tmpStr);
} /// <summary>
/// 获取Token
/// </summary>
/// <returns></returns>
public static string GetToken()
{
string token = CookieHelper.GetCookie(CookieHelper.StrWXTokenCookieName);
if (string.IsNullOrEmpty(token))
{
string url = string.Format("{0}cgi-bin/token?grant_type=client_credential&appid={1}&secret={2}", baseurl, appid, appsecret);
string str = Utils.HttpGet(url);
JObject j = JObject.Parse(str);
token = j.Value<string>("access_token");
} return token;
}
public static string Getjsapi_ticket()
{
string access_token = GetToken();
string url = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", access_token);
string backStr = HttpClientHelper.GetResponse(url);
//string backStr = "{ \"errcode\":0,\"errmsg\":\"ok\",\"ticket\":\"kgt8ON7yVITDhtdwci0qeZWDYY9llY5RrKsWxKD--zOUIRYqJ1XwMo305bwZhG22b5hOl-TZ-gZAXCbMMHwvCw\",\"expires_in\":7200}";
string str_ticket = backStr.Split(',')[].Split(':')[];
string Jsapi_ticket = str_ticket.Substring(, str_ticket.Length - );
return Jsapi_ticket;
} }
四,invalid url domain出现后的解决方法
在微信开发文档中有一个这样的解决方法,当前页面所在域名与使用的appid没有绑定,请确认正确填写绑定的域名,仅支持80(http)和443(https)两个端口,因此不需要填写端口号,但这个是什么意思呢?
1,建议在IIS部署的网站是80端口,如果是还出现问题就看2,就是JS接口安全域名这里的配置有问题,js安全域名怎么配置呢?
2,先去掉http,比如我们的域名是www,xxx.com,我们不能配置成http://www,xxx.com/Jssdk/Index,要去掉http://以及后面的文件目录(/Jssdk/Index),写成www,xxx.com即可
微信jssdk配置的问题,使用MVC制作的demo的更多相关文章
- 调用微信JS-SDK配置签名
前后端进行分开开发: 1:后端实现获取 +++接口凭证:access_token (公众号的全局唯一接口调用凭据) ** GET 获取:https://api.weixin.qq.com/cgi-bi ...
- web环境中微信JS-SDK配置
一.公众号相关设置 首先,在公众号中进行JS安全域名的设置,在公众号设置-功能设置中选择JS接口安全域名,点击设置进入设置对话框.按照要求逐步进行,完成设置. 二.页面请求发送与处理 引入所需js: ...
- 前端工程师如何快速的开发一个微信JSSDK应用
亲们,订阅号出来已经很久了,作为一个前端工程师或者全栈工程师,你是不是错过了什么?大概许多攻城狮同砚还没有反应过来订阅号怎么回事,就马上要被微信的应用号秀一脸了.在应用号还没有正式出来之前,我们赶紧一 ...
- 微信jssdk,实现多图上传的一点心得
一.首先在common.js里封装一个函数,在需要调用jsSDK的页面引用此方法即可实现微信的信息配置function signatureJSSDK() { var url = window.loca ...
- 微信JS-SDK分享功能的.Net实现代码
JS-SDK接口是什么? 为了方便开发者实现微信内的网页(基于微信浏览器访问的网页)功能,比如拍照.选图.语音.位置等手机系统的能力,并方便开发者直接使用微信分享.扫一扫等微信特有的能力,微信推出了J ...
- ASP.NET MVC做的微信WEBAPP中调用微信JSSDK扫一扫
今天做一个项目,是在微信上用的,微信WEB APP,里面用到了调用手机摄像头扫一扫二维码的功能,记得以前某个项目里写有的,但是找不到之前那个项目源码了,想复制粘贴也复制不了了,只好对着微信的那个开发文 ...
- ASP.NET MVC 微信JS-SDK认证
layout: post title: ASP.NET MVC 微信JS-SDK认证 category: .net date: 2016-11-01 00:00:00 tags: .net javas ...
- 【原创】.Net 微信 JS-SDK图片、语音上传接口的实现(MVC)-(一 、上传图片)
前段时间在做一个微信的项目,遇到了一个上传图片的问题,花了一下午,解决了这个问题,然后把总结出来的代码,分享了出来. 最近又有一个图片+语音的功能, 更是蛋疼, 本次采用的不是File文件上传,然后转 ...
- C#微信开发-微信JS-SDK(1)之通过config接口注入权限验证配置
官方文档是微信JS-SDK的使用步骤http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#JSSDK.E4.BD.B ...
随机推荐
- vue中的v-model原理,与组件自定义v-model
VUE中的v-model可以实现双向绑定,但是原理是什么呢?往下看看吧 根据官方文档的解释,v-model其实是一个语法糖,它会自动的在元素或者组件上面解析为 :value="" ...
- Linux学习-samba服务
一.Samba介绍 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成. SMB (Server Messages Block,信息服务块) 是一种在局域网 ...
- 如何生成各种mif文件,绝对经典!!!
mif文件生成模板,只需要5步,很简单!!!!! 先说明如何操作,1-2-3-4-5步,后面附上模板!!! 下面以汉字去模演示过程: 1.取模软件设置:注意这里是设置的输出数据的格式!!!!!!!!! ...
- luogu P1428 小鱼比可爱 x
P1428 小鱼比可爱 题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度.参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示 ...
- R 大小写转换
>x = "CAGTTTCTTGAGTCTGATTAATTCAGGTTTCGGGGT"#定义字符串变量x>tolower(x)[1] "cagtttcttga ...
- Oracle--利用监听器日志监控访问该数据库的客户端IP
服务器10.10.10.168 数据库seineebs 客户端 10.10.10.14 用户guipeng.zhang 查看监听器状态: 在本机利用PL/SQL工具连接该数据库 查看监听器日志:一 ...
- Activity和Fragment生命周期对比
版权声明:本文为博主原创文章,未经博主允许不得转载.
- 含有对象的List集合实现字母数字混合排序
List<PageData> varList = [{BOMCode=10A, mantotal=4}, {BOMCode=10B, mantotal=1}, {BOMCode=11A, ...
- Linux新增用户,并设置Root(管理员)权限
在使用Linux过程中,Root账号拥有最大的操作权限.为保证Root账号安全,一般不直接使用Root账号,而是直接创建一个拥有Root权限的其它账号来使用.详细操作步骤如下 第一步,创建用户,如下图 ...
- 十一、python函数学习
1. 定义函数 def 函数名(形参): 函数体 return xxx--------其下面的内容不再执行 ---------------------------------------- ...