今天做一个项目,是在微信上用的,微信WEB APP,里面用到了调用手机摄像头扫一扫二维码的功能,记得以前某个项目里写有的,但是找不到之前那个项目源码了,想复制粘贴也复制不了了,只好对着微信的那个开发文档重新再写过 ,顺便写个博客,以后碰到相同的问题直接复制博客里的代码就行了
以下是显示在微信上的页面:
以下是页面的代码,(用到了MUI):
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<header class="mui-bar mui-bar-nav">
<h1 class="mui-title">扫码认证</h1>
</header>
<div class="mui-content">
<div style="text-align: center; padding:0.5rem; background: white;">
<img id="img_shaoma" src="/content/images/shaoma.png" style="width:100px;" />
</div>
<div style="margin-top:0.5rem;padding:2rem; text-align: center; background:white;">
<input id="txtyzm" type="text" placeholder="输入认证码验证产品" />
<button type="button" class="mui-btn mui-btn-success">点击认证</button>
</div>
</div>
@section script{
<script src="/content/js/mui.min.js"></script>
<script type="text/javascript">
mui.init();
</script>
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script>
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: "@ViewBag.appid", // 必填,企业号的唯一标识,此处填写企业号corpid
timestamp: @ViewBag.timestamp, // 必填,生成签名的时间戳
nonceStr: "@ViewBag.noncestr", // 必填,生成签名的随机串
signature: "@ViewBag.signature",// 必填,签名,见附录1
jsApiList: ['scanQRCode'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
wx.ready(function () {
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
document.getElementById('img_shaoma').addEventListener('tap', function () {
wx.scanQRCode({
needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
success: function (res) {
var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
// mui.alert("扫码结果:" + result);
document.getElementById("txtyzm").value = result;
}
});
})
});
</script>
}
以下是对应的控制器后台代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Niunan.NiaoRen.Web.Areas.Seller.Controllers
{
public class ShaoMaController : Controller
{
//卖家中心-扫码页面
public ActionResult Index()
{
#region 用到微信扫一扫接口需要用的东西
WxPayAPI.NiunanWXHelper wxhelper = new WxPayAPI.NiunanWXHelper();
WxPayAPI.WxPayData config_data = wxhelper.GetJSSDKConfig();
ViewBag.appid = config_data.GetValue("appId");
ViewBag.timestamp = config_data.GetValue("timestamp");
ViewBag.noncestr = config_data.GetValue("nonceStr");
ViewBag.signature = config_data.GetValue("signature");
#endregion
return View();
}
}
}
以下是NiunanWXHelper 的代码,用到了一些原来微信官方DEMO里的一些方法,所以创建在了微信官方DEMO的那个项目中:
using LitJson;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Security;
/// <summary>
/// 牛腩自己写的微信helper
/// https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
/// </summary>
namespace WxPayAPI
{
public class NiunanWXHelper
{
/// <summary>
/// 返回使用微信JS-SDK接口的配置
// appId: @ViewBag.wx_appid, // 必填,企业号的唯一标识,此处填写企业号corpid
// timestamp: @ViewBag.wx_timestamp, // 必填,生成签名的时间戳
// nonceStr: @ViewBag.wx_noncestr, // 必填,生成签名的随机串
// signature: @ViewBag.wx_signature,// 必填,签名,见附录1
/// </summary>
/// <returns></returns>
public WxPayData GetJSSDKConfig()
{
string appid = WxPayConfig.APPID;
string secret = WxPayConfig.APPSECRET;
string timestamp = WxPayApi.GenerateTimeStamp();
string noncestr = WxPayApi.GenerateNonceStr();
string signature = "";
//签名算法 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
//1. 获取AccessToken(有效期7200秒,开发者必须在自己的服务全局缓存access_token)
string url1 = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}";
string result = HttpService.Get(url1);
JsonData jd = JsonMapper.ToObject(result);
string access_token = (string)jd["access_token"];
//2. 用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket)
string url2 = $"https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={access_token}&type=jsapi";
string result2 = HttpService.Get(url2);
JsonData jd2 = JsonMapper.ToObject(result2);
string ticket = (string)jd2["ticket"];
//3. 开始签名
string now_url = HttpContext.Current.Request.Url.AbsoluteUri;
string no_jiami = $"jsapi_ticket={ticket}&noncestr={noncestr}×tamp={timestamp}&url={now_url}";
//SHA1加密
signature = FormsAuthentication.HashPasswordForStoringInConfigFile(no_jiami, "SHA1");
WxPayData data = new WxPayData();
data.SetValue("appId", appid);
data.SetValue("timestamp", timestamp);
data.SetValue("nonceStr", noncestr);
data.SetValue("signature", signature);
Log.Debug(this.GetType().ToString(), "使用微信JS-SDK接口的配置 : " + data.ToPrintStr());
return data;
}
}
}
从官网下载的DEMO是ASPX的,我把里面的lib文件夹和business文件夹抽出来放到WXPAYAPI项目中了
相关推荐
《Asp.net MVC3 + NHibernate + Spring.NET 整合详解》 Asp.net MVC3、NHibernate 和 Spring.NET 是三个在.NET开发中至关重要的组件。Asp.net MVC3 是微软推出的模型-视图-控制器(Model-View-Controller)框架,...
一、源码特点 一款不错的移动考勤(webapp版本)源码,有需要的朋友不要错过 ... 1、开发环境为Visual Studio 2010,数据库为SQLServer2008,使用.net 4.0开发。 2、DB文件夹中是数据库文件,附加即可
作为一个asp.net 程序员,当发现Vue.js的存在时就爱上它,但是在asp.net应用中使用Vue一时让我无从上手。直到最近有了点心得。就计划把之前做的一个记账应用前端改为Vue2实现。 具体请看我博客里介绍 ...
ASP.NET是由微软开发的一种服务器端Web应用程序框架,它允许开发者使用.NET Framework来构建动态网站、Web应用程序和Web服务。ASP.NET的核心优势在于其强大的功能、高效的性能以及丰富的开发工具支持,如Visual ...
ASP.NET高校移动考勤webapp源码 源码描述:这个项目就是专为大学中 班级上课 考勤开发的,是webapp版本,适合任何手机浏览器使用 1、AppFramwork框架,针对HTML5浏览器和移动设备开发的javascript框架,是个极其...
一款基于Vue 2的仿微信Web App
每周,我都会发布有关ASP.NET MVC或ASP.NET Core的新文章。 博客链接: 如果您喜欢我的博客和Github,请捐款给我,让我有权力撰写下一篇文章。 抽象的 该存储库提供企业体系结构级别的样本项目。 该指南文章将在我...
【标题】中的“基于asp.net的mvc框架的后台管理系统(源码+数据库)”表明这是一个使用ASP.NET MVC框架构建的后台管理系统,包含了完整的源代码和配套的数据库文件。ASP.NET MVC是一个模型-视图-控制器(Model-View-...
本文将深入探讨如何利用ASP.NET MVC样板来像专业人士那样优化您的WebApp。 首先,我们要了解ASP.NET MVC的基本原理。ASP.NET MVC是一个基于模式的开源Web应用开发框架,它采用模型-视图-控制器(MVC)设计模式,...
微信-mvc-webapp 这个 mvc 应用程序由 asp.net 和微信 api 提供支持。
配置这两个地方就可以了! //1.在index.php中第3行设置JSSDK参数.......企业号填权限管理中的CorpID和Secret 订阅号和服务号填...微信webApp调用JSSDK需要设置可以可信域名,然后将这个demo上传的可信域名就可以使用了!
[其他类别]好帮手在线编辑器.net v1.0_webapp10.zip源码ASP.NET网站源码打包下载[其他类别]好帮手在线编辑器.net v1.0_webapp10.zip源码ASP.NET网站源码打包下载[其他类别]好帮手在线编辑器.net v1.0_webapp10.zip...
ASP.NET_TUTS 是一个关于使用ASP.NET进行Web应用程序开发的教学资源,主要涵盖了ASP.NET MVC框架和JavaScript技术。在这个教程中,你将学习如何利用这两种强大的工具构建动态、交互式的Web应用。 **ASP.NET MVC** ...
6. **MVC模式**:虽然题目描述中没有明确提及,但ASP.NET MVC是一个流行的模式,它将应用程序分为模型、视图和控制器三个部分,提供了更灵活的开发方式。 7. **Web服务和WCF**:ASP.NET也支持创建和消费Web服务,...
2. ASP.NET:学习ASP.NET Web Forms、MVC或Core模式,理解请求生命周期和响应生成过程。 3. C#编程:掌握C#语言基础,包括语法、面向对象编程、LINQ、异步编程等。 4. Web应用程序架构:理解客户端-服务器模型,...
它包含了主流可重用的UI组件并集成了一些...Landing page for each version (AngularJS/jQuery/ASP.NET MVC/Meteor) LESS files package SCSS files package Documentation PSD - 37 files full layered 预览地址: ...
在IT行业中,部署Web应用程序是开发过程中的关键环节,尤其是对于使用ASP.NET MVC框架构建的应用。本文将详细讲解如何将ASP.NET MVC3应用部署到IIS 6.0上,以便进行测试或生产使用。 首先,我们需要确保服务器的...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
在ASP.NET Core MVC应用程序中集成jsreport是一项常见的需求,它能帮助我们生成具有复杂布局和数据绑定的报表。jsreport是一款强大的服务器端报告解决方案,它提供了多种模板引擎,如 Handlebars、Razor 和 Liquid,...
ASP.NET MVC5是一种开源的Web应用程序框架,由微软公司提供,基于模型-视图-控制器(MVC)模式。这种框架允许开发者使用HTML、CSS和JavaScript构建动态、数据驱动的网站应用。INSPINIA IN+主题充分利用了ASP.NET MVC...