当前位置: 首页 > news >正文

微信钱包入口开发笔记

原文: 微信钱包入口开发笔记

 

之所以要写这篇文章,主要是最近一段时间在负责做微信方面的开发工作,领导对系统有两个基本的要求

1.只能在微信环境下打开;

2.自适应微信客户端的语言设置,呈现对应语言的界面及内容;

作为一名攻城狮,经过简单的分析,可以从这两个需求中提取出两个技术点

1.如何判定当前系统是在微信环境中运行;

2.如何获取微信客户端的语言设置信息;


如果我们能通过某种手段解决了两个技术点,也就可以大胆的向领导立军令状了。

 

好了,闲话少说,我们进入正题。先说一下我们要做的这个项目是H5项目,讲到H5相信部分小伙伴已经知道怎么玩了,不过我还是继续往下说,既然是H5,那么我们首先会想到的是什么?没错,是浏览器。那么我们怎么通过抓取浏览器的信息来判定是在微信中打开的呢?我们接下来就看下如果一个页面是使用微信内置浏览器打开的会有什么特殊的标识。

微信客户端内置浏览器HTTP报文

 

普通浏览器HTTP报文

 

相信眼疾手快的小伙伴已经发现了,没错就是User-Agent,通过上面两张图我们不难发现,如果是使用微信内置浏览器打开的网页User-Agent中都会包含一个关键词MicroMessenger/6.6.6 其中6.6.6是微信客户端版本呢,我们这里用不到,我们只需要获取当前User-Agent的值并判定是否包含MicroMessenger即可判定,当前H5是否运行在微信内置浏览器中。

 

好了,解决了判定H5是否运行在微信内置浏览器的问题,接下来要做的事情就是就如何获取微信客户端的语言设置,这里可能有的小伙伴要问了,User-Agent里面有一段文案Language/en会不会就是当前微信客户端的语言设置,哈哈,我们来验证下,方法同上上,通过不断修改微信客户端的语言和抓包可以发现,User-Agent中的Language/en果然会跟着微信客户端的语言设置变化做相应的变化,换句话说我们可以通过Language/en来得到微信客户端的语言设置。

 

手痒了,下面我们来看下怎么通过代码获取到User-Agent的数据并判定是否运行在微信客户端内(获取并判定微信客户端语言设置同理),对于User-Agent的数据,可以通过前端获取也可以通过服务器端获取,我们下面分别展示下:

前端以Javascript为例:

1 function runInWeChat(){
2   var userAgent = window.navigator.userAgent.toLowerCase();
3   if(ua.match(/MicroMessenger/i)=="micromessenger") {
4     return true;
5   } else {
6     return false;
7   }
8 }

 

服务器端获取以.NET为例:

1 string micMessage = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_USER_AGENT"];
2 if (micMessage.ToStringEx().ToLower().Contains("micromessenger"))
3 {
4   //当前运行在微信客户端内置浏览器中
5 }

 

写到这里,相信聪明的小伙伴也已经知道如何获取判定当前微信客户端语言设置了,祝各位好运。

相关文章:

  • 编程是一个没有前途的工作
  • 32位系统(软件)和64位系统(软件)的区别(跑的快,内存支持多)
  • SQL点滴34—SQL中的大小写
  • Windows 10下安装配置Caffe并支持GPU加速(修改版)
  • mac homebrew安装
  • 每天10道编程题-第四天
  • 【连载】物联网全栈教程-从云端到设备(十二)---最简单的单片机上云方法!...
  • Tomcat源码分析之—具体启动流程分析
  • 集合,映射,流程控制, 知识点。
  • java7 concurrency cookbook(第三章)
  • jquery获取表单数据方法$.serializeArray()获取不到disabled的值
  • Apache RewriteCond RewriteRule
  • 手摸手,带你用 vue 动画实现原生 app 切换效果,丝滑般的体验
  • @font-face 用字体画图标
  • DOM笔记(四):HTML 5 DOM复杂数据类型
  • 2017届校招提前批面试回顾
  • ES6简单总结(搭配简单的讲解和小案例)
  • leetcode-27. Remove Element
  • node学习系列之简单文件上传
  • ReactNativeweexDeviceOne对比
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • vue.js框架原理浅析
  • 诡异!React stopPropagation失灵
  • 码农张的Bug人生 - 初来乍到
  • 异步
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #QT项目实战(天气预报)
  • (9)目标检测_SSD的原理
  • (bean配置类的注解开发)学习Spring的第十三天
  • (Matlab)使用竞争神经网络实现数据聚类
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)计算机毕业设计ssm电影分享网站
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (十一)手动添加用户和文件的特殊权限
  • .net 4.0发布后不能正常显示图片问题
  • .NET 表达式计算:Expression Evaluator
  • .NET 反射的使用
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET和.COM和.CN域名区别
  • .NET性能优化(文摘)
  • :如何用SQL脚本保存存储过程返回的结果集
  • @31省区市高考时间表来了,祝考试成功
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [] 与 [[]], -gt 与 > 的比较
  • []error LNK2001: unresolved external symbol _m
  • [acwing周赛复盘] 第 69 场周赛20220917
  • [Angular 基础] - 数据绑定(databinding)
  • [C#]获取指定文件夹下的所有文件名(递归)
  • [C++]命名空间等——喵喵要吃C嘎嘎
  • [Electron] 将应用打包成供Ubuntu、Debian平台下安装的deb包
  • [linux] 创建用户