腾讯企业邮箱API开发问题
一个是http://openapiexmailqqcom:12211/openapi/mail/newcount,一个是http://openapiexmailqqcom:12211/openapi/mail/authkey
ripquery 命令用途 查询 RIP 网关。语法 ripquery [ -1 ] [ -2 ] [ -[a5] authkey ] [ -n ] [ -N dest[/mask] [ -p ] [ -r ] [ -v ] [ -w time ] gateway描述 ripquery 命令是用来请求 RIP 网关知道的所有路由器,通过发送一个 RIP 请求或轮询命令。返回的所有路由包中的路径选择信息以数字的或符号的形式显示。ripquery 命令的目的是用作调试网关的工具,而不是用作网络管理。SNMP 是网络管理的首选协议。标志 -1以版本 1 数据包发送查询。-2以版本 2 数据包发送查询(缺省)。-[a5] authkey指定用来查询的认证密码。如果指定了 -a,将使用 SIMPLE 认证类型,如果指定了 -5,将使用 MD5 认证类型,否则缺省的认证类型为 NONE。显示引入的数据包中的认证字段,但未验证。-n禁止查找响应主机的地址来确定符号的名称。-N dest[/mask]指定查询应该是指定的 dest/mask 而不是完整的路由表。可选掩码的规范暗指版本 2 查询。最多 23 个有关指定目的地的请求可被一个数据包包含。-p使用 RIP 轮询命令来请求路由表的信息。这是缺省情况。如果没有 RIP 轮询命令的响应,尝试 RIP 请求 命令。gated 使用通过 RIP 获得的所有路由响应轮询 命令。-r使用 RIP 请求命令来请求来自网关路由表的信息。跟 RIP 轮询命令不同,所有网关都应该支持 RIP 请求。如果没有对 RIP 请求命令的响应,尝试 RIP 轮询命令。gated 响应具有所有路由(它在其上申明指定的接口)的请求命令。-v在查询网关前显示有关 ripquery 的版本信息。-w time指定以秒计的等待网关初始响应的时间。缺省值为 5 秒。
1.启动读写器
启动电脑,打开RFID实验箱,取出高频读写器用USB连接线连接电脑。在电脑上打开读写器演示软件YX7036DemoCNexe,进入主界面,打开端口。
2.读取lSO14443A协议卡片信息
1)将读写器演示软件选项切换到lSO14443A协议(图2-1中1),点击“切换到lSO14443A模式”(图2-1中2),点击“打开射频”(图2-1中3),此时高频读写器正式进入lSO14443A读写准备状态。
2)点击“Request”(图2-1中4),此时卡类型即显示在右边(图2-1中12),执行Request命令后,若射频场中有ISO14443A标签存在,“卡类型”文本框将会显示该标签的类型代码;否则,状态栏提示“无ISO14443A电子标签可操作”。由于该命令执行的是Request(All),处于任何状态的标签均会应答;如果调用Request(Idle),则只有处于Halt状态之外的标签才能应答。
3)点击“Anticoll”(图2-1中5),Mifare One 防冲突获取射频场中一张Mifare One标签的UID,如果防冲突执行成功,“卡号”文本框将会显示获取到的4字节标签UID(图2-1中13);否则状态栏显示“防冲突失败”。ULAnticoll: UltraLight 防冲突:获取射频场中一张UltraLight标签的UID,如果防冲突执行成功,“卡号”文本框将会显示获取到的7字节标签UID;否则状态栏显示防冲突失败。
4)点击“Select”(图2-1中6),选择指定UID的标签,以后的所有操作均针对该标签。如果选择成功,“卡容量大小”文本框会显示标签存储区的大小(图2-1中14)。注意:UltraLight标签无需执行该命令,在ULAnticoll过程中已经进行了Select操作。
图2-1
3.读写lSO14443A协议卡片数据
对lSO14443A协议卡片数据进行读写之前先要对电子标签进行证实操作,点击“AuthKey”(图2-1中8)操作会读取“读写”框中的密钥,用指定的密钥类型证实所选的扇区。如果填写的密钥与标签扇区上的密钥匹配,则证实成功,状态栏显示“AuthKey:执行成功”。认证成功后,就可以对数据区的内容进行读取或修改了。选择扇区号(图2-1中15),选择块号(图2-1中16),点击“Read”(图2-1中17),成功则在数控块中看到所操作的数据块数据(图2-1中19)。在数据块框中(图2-1中19)输入需要写入数据块的数据,点击“Write”(图2-1中18),成功即在左下角显示“Write执行成功”。
注意:
1 Mifare one S50(共16个扇区)
块0~块2为数据块;块3为密钥块
Mifare one S70(共40个扇区)
当扇区号<=31时,块0~块2为数据块;块3为密钥块;
当扇区号>31时,块0~块14为数据块;块15为密钥块
2要写入数据时,数据的长度必须为16个字节
3读UltraLight标签时,请将扇区号设为0,块号即为UltraLight标签对应的页号读取的内容是从选择的页号开始的连续4个页
4写UltraLight标签时,只有低四个字节能被写入标签,余下的12个字节为0;
另外,有专用于UltraLight标签的写命令ULWrite,
知识学习
S50卡有lk bytes共16个扇区,每个扇区有4个块,其中第1扇区第块是卡序列号,是只读的,不能写。密钥存放在每个扇区的块3。算存储密钥块的算法是:x=s4+3:其中s表示扇区号(0-15)。
1、Ml卡分为16个扇区,每个扇区由4块(块O、块l、块2、块3)组成,(也将16个扇区的64个块按绝对地址编号为0-63)。
2、第0扇区的块0(即绝对地址0块),它用于存放厂商代码,已经固化,不可更改。
3、每个扇区的块0、块1、块2为数据块,可用于存贮数据。
数据块可作两种应用:
★用作一般的数据保存,可以进行读、写操作。
★用作数据值,可以进行初始化值、加值、减值、读值操作。
4、每个扇区的块3为控制块,包括了密钥A、存取控制、密钥B。具体结构为:密钥A(6字节) 存取控制(4字节)密钥B(6字节)
1.启动读写器
启动电脑,打开RFID实验箱,取出高频读写器用USB连接线连接电脑。在电脑上打开读写器演示软件YX7036DemoCNexe,进入主界面,打开端口。
2.读取lSO14443A协议卡片密匙
依次点击图3-1中1-7(具体见实验二),选择块号3(图3-1中8),点击“Read”(图3-1中9),就会看见下面密匙块显示框中显示密匙为:000000000000 FF078069 FFFFFFFFFFFF(图3-1中10)。其中密码A(6字节) 存取控制(4字节) 密码B(6字节)。密匙相关知识见后资料。
图3-1
3.修改lSO14443A协议卡片密匙
依次点击图3-1中1-7(具体见实验二),选择块号3(图3-1中8),点击“Read”(图3-1中9),就会看见下面密匙块显示框中显示密匙为:000000000000 FF078069 FFFFFFFFFFFF(图3-1中10)。在修改密匙中选择新密匙B(图3-2中1),在新密匙输入框中输入新密匙“222222222222”(图3-2中2),点击“修改密匙”(图3-2中3),修改成功可以在左下角看到“修改密匙”执行成功,选择密匙所在的块号3(图3-2中4),点击“Read”(图3-2中5)。可以看到新密匙已经修改成功(图3- 3)
4MF1卡修改各区块控制位值和数据
(一),以常用设置"08 77 8F 69"控制条件为例,先搞清楚它――具有的访问权限。
1、对"08 77 8F 69"值进行计算,该值定位于各区块3的6,7,8,9四个字节内,字节6=08,字节7=77,
字节8=8F,字节9=69(默认值,不予计算)。
2、例如:字节6=08,对应其二进制值=00001000, 则对6,7,8这三个字节进行二进制转换结果见下表:
4、对以上6,7,8字节的存取/控制二进制已取反值,依照表2,表4块位转换为各块控制值,如下表:
注意: 高4位的各块值=低4位的各块值时,其值可用。高4位值≠低4位值时,其值不可用!
5、查对访问权限(数据存取控制依照表3,块3存取控制依照表5),该例"08 77 8F 69"的访问权限为:
◆ 块3 = 011:权限为:KeyA,KeyB均不可读,验证KeyB正确后可改写KeyA和KeyB,验证KeyA或KeyB正确后可读"控制位"。在此可见密钥KeyB的重要性,KeyB不正确是无法看到块3控制值,更无法修改密钥。
◆ 块2 = 块1 = 块0 = 110:权限为:验证KeyA或KeyB后可读该块数据,减值以及初始化值,只有验证KeyB 正确后才可改写该块数据,在此可以看到密钥KeyB对改写数据块也起着关键性作用。
(二)、"08 77 8F 69" 控制条件设置步骤:
由(一)可知:KeyB设置后为不可读,并且改写数据和改写控制位都需要正确验证它,故KeyB设置后程序
操作员必须妥善保管KeyB值,否则以后改写数据和控制位时,不正确的KeyB值将无法实现卡的任何操作!!!
1、修改块3控制位的值:最初的各区块3内的KeyA,KeyB都是厂商12个"F"默认值(KeyA在任何条件下均为不可读,大部分读写机程序表现KeyA为未知的12个"0" ),在修改控制值时,先不要修改默认密码KeyA和KeyB,在控制位修改成功后,再去更改新密码值。即先对块3的控制位进行修改(默认值FF 07 80 69改为新值08 77 8F69)并执行写操作。控制位写成功后,KeyB亦为12个"0"不可读了,但仍是隐藏的12个"f"默认值。
2、修改块3的KeyA和KeyB值:控制位08 77 8F 69值写成功后,验证KeyB正确后方可改写KeyA和KeyB新密码。在密码操作模式键入要改写区块之先前密码B(先前密码为默认值时,则不需改动和加载),加载后反回数据操作模式,再进行读值,KeyA和KeyB值的改写。
3、修改块0~块2中数据:由新的控制条件08778F69可知,要修改数据,必须先验证KeyB,故先设置密码操作为KeyB认证方式,加载后再返回数据操作模式,对要修改的数据块进行值的改写操作。
4、上例中分析了"08 77 8F 69"的访问条件及其改写步骤,对用户的其它控制条件亦可参照应用。
MF1卡常见问题及处理建议
① 盲目操作:造成某些区块误操作被锁死不能再使用。应当仔细参考表3表5的控制权限后,予先得出操作后的结果是否适合使用要求,并且列出操作顺序表单再操作。最好授权程序员对块3的设置作专人操作。
② 丢失密码:再读写时造成密码认证出错而不能访问卡。特别要求在对MF卡进行块3编程操作时,必须及时记录相关卡号的控制值,KeyA,KeyB等,而且应当有专人管理密码档案。
③错误设置:对MF1卡的块3控制块了解不透彻,错误的理解造成设置造成错误的设置。依照表2可知,目前Mf1卡的控制块仅只有8种数据块访问控制权限和8种控制块设置权限,超出这16种权限的其他代码组合,将直接引起错误设置而使卡片报废!
④ 极端权限:当块3的存取控制位C13C23 C33 = 110或者111时,称为极端权限。除特殊应用外一般不被使用!启用前认真权衡对密码读写,存取控制的锁死是否必要,否则,数据加密后即使有密码也无法读取被锁死的数据区块(看不见)!
⑤ 设备低劣:低劣的设备将直接影响卡的读写性能。对MF卡进行块3编程操作的设备,特别要求其性能必须十分可靠,运行十分稳定!建议选用由飞利浦公司原装读写模块构建的知名读写机具!
⑥编程干扰:在对块3进行编程操作时,不可以有任何的"IO"中断或打扰!包括同时运行两个以上程序干扰甚至PC机不良的开关电源纹波干扰等,否则,不成功的写操作将造成某个扇区被锁死的现象,致使该扇区再次访问时出错而报废。
⑦ 数据出错:在临界距离点上读卡和写卡造成的。通常的读卡,特别是写卡,应该避免在临界状态(刚能读卡的距离)读卡。因为临界状态下的数据传送是很不稳定的!容易引起读写出错!
⑧ 人为失误:例如,密码加载操作失误,误将KeyA加载为KeyB;或者是误将其他制卡厂约定的初始密码值如a0a1a2a3a4a5,b0b1b2b3b4b5加载到本公司生产的MF1卡内;或者在初始状态下(密码A=000000000000隐藏状态,实际为ffffffffffff,控制位=FF 07 80 69,密码B=ffffffffffff可见)若不经意地将KeyA=000000000000 删除后又重新输入12个"0",并加载了它!这时无意中已将KeyA原来12个隐藏的"f",修改成了12个"0",其后果可想而知!
⑨ 卡片失效:读写均无数据传送,读写器报告"寻卡错误"!卡片被超标扭曲,弯曲而造成内电路断裂。
⑩ 读写距离过近:与用户使用的读写器性能有关。标准型MF1卡的读写距离可达250px(在飞利浦公司的标准读写机具上测试的最大距离),国产知名品牌读写器一般可达5-250px。尺寸较小的匙扣卡,其读写距离当然比标准卡近许多,但只要可靠的读写距离≥5~10mm以上,一般不会影响正常使用!
>>>>要完整的实在太多了 还不明白找我
小程序所有新进用户的昵称全部变成了“微信昵称”,当时我就
吓得我赶紧爬起来翻文档(需要代码直接往后翻)
原因就像微信所说的,很多开发者在打开小程序时就通过组件方式唤起getUserInfo弹窗,如果用户点击拒绝,无法使用小程序,这种做法打断了用户正常使用小程序的流程,同时也不利于小程序获取新用户。
这里我会给出Uni-app的适配代码,针对CRMEB系统进行修复,各位同学举一反三(413号之前发布的正式包暂不影响)
1修改pages/users/wechat_login/indexvue中关于微信登录的按钮
<button span=""
class="bg-green btn1">微信登录
<button span=""
class="bg-green btn1">微信登录
2默认data中添加canUseGetUserProfile: false,然后在加载页面调用的方法里面增加unigetUserProfile的判断,是否显示新的按钮。
canUseGetUserProfile: false
if (unigetUserProfile) {
thiscanUseGetUserProfile = true
}
3方法中新增getUserProfile方法用户获取用户信息
//小程序授权api替换 getUserInfo
getUserProfile() {
unishowLoading({
title: '正在登录中'
});
let self = this;
RoutinegetUserProfile()
then(res => {
let userInfo = resuserInfo;
userInfocode = thiscode;
userInfospread_spid = appglobalDataspid; //获取推广人ID
userInfospread_code = appglobalDatacode; //获取推广人分享二维码ID
RoutineauthUserInfo(userInfo)
then(res => {
if (resdatakey !== undefined && resdatakey) {
unihideLoading();
selfauthKey = resdatakey;
selfisPhoneBox = true;
} else {
unihideLoading();
let time = resdataexpires_time - self$Cachetime();
self$storecommit('LOGIN', {
token: resdatatoken,
time: time
});
thisgetUserInfo()
}
})
catch(res => {
unihideLoading();
unishowToast({
title: resmsg,
icon: 'none',
duration: 2000
});
});
})
catch(res => {
unihideLoading();
});
},
4然后在libs/routinejs中增加getUserProfile方法
/
新版小程序获取用户信息 2021 413微信小程序开始正式启用
/
getUserProfile(code) {
return new Promise((resolve, reject) => {
unigetUserProfile({
lang: 'zh_CN',
success(user) {
if (code) usercode = code;
resolve({
userInfo: user,
islogin: false
});
},
fail(res) {
reject(res);
}
})
})
}
这里要注意
if (!isset($userInfoCong['openid'])) {
throw new ValidateException('openid获取失败');
}
if (!isset($userInfoCong['openid'])) {
throw new ValidateException('openid获取失败');
}
userInfo['unionId'] = isset( userInfo [′ unionId ′]= isset (userInfoCong['unionid']) $userInfoCong['unionid'] : '';
userInfo['openId'] = userInfo [′ openId ′]=openid = $userInfoCong['openid'];
修复完成之后重新编译小程序就可以解决授权之后微信用户的问题啦。
Linux上的heartbeat双机热备服务架设
一 安装前环境设定
两台主机硬件环境(不必完全一致):
CPU: Xeon 3G 2 (EM64T)
MEM: 2G
NIC: Intel 1G 2
eth0: 对外IP
eth1: 对内IP(HA专用)
两台主机的eth1使用双机对联线直接连接。
分区方式:
Filesystem 容量 挂载点
/dev/sda2 97G /
/dev/sda6 45G /Datas
/dev/sda1 99M /boot
none20G /dev/shm
/dev/sda3 97G /opt
另外每台主机应预留500M的raw空间或者更多来作为共用空间被HA使用。
操作系统:
RedHat Enterprise 4 Update2 (269-22 EL)
预安装软件:
@ X Window System
@ GNOME Desktop Environment
@ KDE Desktop Environment
@ Editors
@ Engineering and Scientific
@ Graphical Internet
@ Text-based Internet
@ Authoring and Publishing
@ Server Configuration Tools
@ Development Tools
@ Kernel Development
@ X Software Development
@ GNOME Software Development
@ KDE Software Development
@ Administration Tools
@ System Tools
二安装前网络环境设定:
node1: 主机名:servers201 ( HA01 )
eth0: 19216810201 //对外IP地址
eth1: 1000201 //HA心跳使用地址
node2: 主机名:servers202 ( HA02 )
eth0: 19216810202 //对外IP地址
eth1: 1000202 //HA心跳使用地址
特别注意要检查以下几个文件:
/etc/hosts
/etc/hostconf
/etc/resolvconf
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/nsswitchconf
#vi /etc/hosts
node1的hosts内容如下:
127001 localhostlocaldomain localhost
19216810201 servers201 HA01
1000201 HA01
1000202 HA02
19216810202 server202
node2的hosts内容如下:
127001 localhostlocaldomain localhost
19216810202 servers202 HA02
1000202 HA02
1000201 HA01
19216810201 server201
#cat /etc/hostconf
order hosts,bind
#cat /etc/resolvconf
nameserver 61139269 //DNS地址
#cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=servers201 //主机名
GATEWAY="192168101" //网关
GATEWAY="eth0" //网关使用网卡
ONBOOT=YES //启动时加载
FORWARD_IPV4="yes" //只允许IPV4
#cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=19216810201
NETMASK=2552552550
GATEWAY=192168101
TYPE=Ethernet
IPV6INIT=no
#cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
IPADDR=1000201
NETMASK=2552552550
TYPE=Ethernet
[node1] 与 [node2] 在上面的配置中,除了
/etc/hosts
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
要各自修改外,其他一致。
配置完成后,试试在各自主机上ping对方的主机名,应该可以ping通:
/root#ping HA02
PING HA02 (1000202) 56(84) bytes of data
64 bytes from HA02 (1000202): icmp_seq=0 ttl=64 time=0198 ms
64 bytes from HA02 (1000202): icmp_seq=1 ttl=64 time=0266 ms
64 bytes from HA02 (1000202): icmp_seq=2 ttl=64 time=0148 ms
--- HA02 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0148/0204/0266/0048 ms, pipe 2
三安装HA 与HA依赖包
rpm -Uvh libnet-1121-1rhelum1i386rpm //可以不装
rpm -Uvh heartbeat-pils-204-1el4i386rpm
rpm -Uvh heartbeat-stonith-204-1el4i386rpm
rpm -Uvh heartbeat-204-1el4i386rpm
rpm -Uvh ipvsadm-124-5i386rpm
四 配置 HA的各配置文件
配置心跳的加密方式:authkeys
#vi /etc/had/authkeys
如果使用双机对联线(双绞线),可以配置如下:
#vi /etc/hcd/authkeys
auth 1
1 crc
存盘退出,然后
#chmod 600 authkeys
配置心跳的监控:haresources
#vi /etc/had/haresources
各主机这部分应完全相同。
server201 IPaddr::19216810200 ipvsadm httpd
指定 server201调用ipvsadm启动http服务,系统附加一个虚拟IP 19216810200 给eth0:0
这里如果server201宕机后,server202可以自动启动http服务,并新分配IP 19216810200给server202的eth0:0
配置心跳的配置文件:hacf
#vi /etc/had/hacf
logfile /var/log/ha_log/ha-loglog ## ha的日志文件记录位置。如没有该目录,则需要手动添加
bcast eth1 ##使用eth1做心跳监测
keepalive 2 ##设定心跳(监测)时间时间为2秒
warntime 10
deadtime 30
initdead 120
hopfudge 1
udpport 694 ##使用udp端口694 进行心跳监测
auto_failback on
node server201 ##节点1,必须要与 uname -n 指令得到的结果一致。
node server202 ##节点2
ping 192168101 ##通过ping 网关来监测心跳是否正常。
respawn hacluster /usr/lib64/heartbeat/ipfail
apiauth ipfail gid=root uid=root
debugfile /Datas/logs/ha_log/ha-debuglog
设置ipvsadm的巡回监测
ipvsadm -A -t 19216810200:80 -s rr
ipvsadm -a -t 19216810200:80 -r 19216810201:80 -m
ipvsadm -a -t 19216810200:80 -r 19216810202:80 -m
执行后进行监测:
#ipvsadm --list
如果返回结果与下相同,则设置正确。
IP Virtual Server version 120 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 19216810200:http rr
-> server202:http Local 1 0 0
-> server201:http Masq 1 0 0
五 HA服务的启动、关闭以及测试
启动HA: service heartbeat start
关闭HA; service heartbeat stop
系统在启动时已经自动把heartbeat 加载了。
使用http服务测试 heartbeat
首先启动httpd服务
#service httpd start
编辑各自主机的测试用html文件,放到/var/www/html/目录下。
启动node1的heartbeat,并执行这个指令进行监控: heartbeat status
六 防火墙设置
heartbeat 默认使用udp 694端口进行心跳监测。如果系统有使用iptables 做防火墙,应记住把这个端口打开。
#vi /etc/sysconfig/iptables
加入以下内容
-A RH-Firewall-1-INPUT -p udp -m udp --dport 694 -d 1000201 -j ACCEPT
意思是udp 694端口对 对方的心跳网卡地址 1000201 开放。
#service iptables restart
重新加载iptables。
0条评论