H5应用调用企业微信扫一扫API扫码方法

场景:自行开发的企微应用例如扫码入库、二维码资产盘点等等

官网地址:使用说明 - 接口文档 - 企业微信开发者中心

扫一扫接口说明:企业微信扫一扫 - 接口文档 - 企业微信开发者中心

使用Js版本: http://res.wx.qq.com/open/js/jweixin-1.2.0.js

前端JS代码:

 wx.config({
     beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
     debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
     appId: '@Model.appId', // 必填,企业微信的corpID,必须是本企业的corpID,不允许跨企业使用
     timestamp: '@Model.timestamp', // 必填,生成签名的时间戳
     nonceStr: '@Model.nonceStr', // 必填,生成签名的随机串
     signature: '@Model.signature',// 必填,签名,见 附录-JS-SDK使用权限签名算法
     jsApiList: ['scanQRCode'] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
 });
 wx.ready(function () {
     // 下面是扫描后返回结果 结果在res里
     $('#scanQRCode1').click(function () {
         wx.scanQRCode({
             desc: 'scanQRCode desc',
             needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
             scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有
             success: function (res) {
                 //IOS里面不加延时alert不执行不知道为嘛
                 //setTimeout(() => {
                     //$('#scrV').val(res.resultStr)//res.resultStr 二维码返回值
                 //}, 500)
                 $('#scrV').val(res.resultStr)
             },
             error: function (res) {
                 if (res.errMsg.indexOf('function_not_exist') > 0) {
                     alert('版本过低请升级')
                 }
             }
         });
     });

 });

后端获取wx.config配置参数方法

定义返回类:

 public class WxJsApiConfig
 {
     public string appId {  get; set; }

     public string timestamp {  get; set; }

     public string nonceStr {  get; set; }

     public string signature {  get; set; }

 }

 public class WXJsapiticket
 {
     public int errcode {  get; set; }

     public string errmsg { get; set; }  

     public string ticket {  get; set; }

     public int expires_in {  get; set; }
 }

配置参数获取方法:

 private readonly string _JsApiTicket = "WeChatJsApiTicket";
 private readonly string _CorpID;
 public WXFunction(){
      _CorpID="自己的corpID"
 }

internal string GetJsapiticketInfo()
{
            lock (this)
            {
                return _cache.GetOrCreate(_JsApiTicket, token =>
                {
                    string url = $@"https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token={AuthToken()}";
                    //请求获取
                    var client = new RestClient(url);
                    client.Timeout = -1;
                    var request = new RestRequest(Method.GET);
                    IRestResponse response = client.Execute(request);
                    if (response.IsSuccessful)
                    {
                        //AuthDataModel
                        WXJsapiticket jsapiticket = JsonConvert.DeserializeObject<WXJsapiticket>(response.Content);
                        if (jsapiticket.errmsg == "ok")
                        {
                            //凭证有效期为7200秒
                            //这里设置提前20分钟过期
                            _cache.Set(_JsApiTicket, jsapiticket.ticket, DateTimeOffset.Now.AddSeconds(jsapiticket.expires_in - 600));
                            return jsapiticket.ticket;
                        }
                        else
                        {
                            return @$"Ticket获取异常{response.Content}";
                        }
                    }
                    else
                    {
                        return "Ticket请求失败";
                    }
                });
            }
}

public void ClearTicketCache()
{
    _cache.Remove(_JsApiTicket);
}

internal string JsApiTicket()
{
     if (_cache.Get(_JsApiTicket) == null)
     {
          ClearTicketCache();
          GetJsapiticketInfo();
     }
     return _cache.Get(_JsApiTicket)?.ToString();
}
 


/// <summary>
 /// 获取JS-SDK配置信息
 /// </summary>
 /// <param name="url"></param>
 /// <returns></returns>
 public WxJsApiConfig GetJsApiInfo(string url)
 {
     WxJsApiConfig jsinfo = new WxJsApiConfig();
     int timestamp = 1644481645;// 获取时间戳 
     string noncestr = "Wx45f84q984as4fq89";//随机字符串 
     string string1 = "jsapi_ticket=" + JsApiTicket() + "&noncestr=" + noncestr + "&timestamp=" + timestamp + "&url=" + url;//拼接连接字符串
     string signature = SHA1(string1, Encoding.UTF8);//SHA-1加密过程 
     signature = signature.ToLower(); // 生成后转换小写
     jsinfo.appId = _CorpID;
     jsinfo.timestamp= timestamp.ToString();
     jsinfo.nonceStr = noncestr;
     jsinfo.signature = signature;
     return jsinfo;

 }


 /// <summary>
 /// sha-1加密算法
 /// </summary>
 /// <param name="content"></param>
 /// <param name="encode"></param>
 /// <returns></returns>
 public  string SHA1(string content, Encoding encode)
 {
     try
     {
         SHA1 sha1 = new SHA1CryptoServiceProvider();
         byte[] bytes_in = encode.GetBytes(content);
         byte[] bytes_out = sha1.ComputeHash(bytes_in);
         sha1.Dispose();
         string result = BitConverter.ToString(bytes_out);
         result = result.Replace("-", "");
         return result;
     }
     catch (Exception ex)
     {
         throw new Exception("SHA1加密出错:" + ex.Message);
     }
 }

控制器:

 public IActionResult SCRCode()
 {
     string url = "http://你的域名:5441/Home/SCRCode";
     WxJsApiConfig js =  _wxf.GetJsApiInfo(url);
     return View(js);
 }

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值