笔记

微信开发unionid详解

unionid概况

微信开发过程中,经常会遇到,一个企业有多个小程序和公众号,在不同的小程序和公众号中,会有不同的openid。如果想要确定是同一个人,就需要用到unionid机制。

官方关于unionid的说明是这样的

公众号文档的描述

开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。

小程序文档的描述

如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,UnionID是相同的。

python捕获异常堆栈信息

python的异常对称相比java或php简单了很多,对象中的信息很少,只有简单的错误输出。这在开发过程中是无法满足使用需求的。我们还需要更多的错误信息,比如错误发生在哪一行,具体的错误信息是什么。这就需要获取错误堆栈信息。下面简单记录一下常用的集中异常处理。

nginx配置中root alias的区别

alias用法

  • alias只能用在location块中
  • 可以配置文件
  • 可以配置目录

代理特定文件

1
2
3
location = /market-api/bm/44O1jrDWhJ.txt {
alias /var/www/wechat/44O1jrDWhJ.txt;
}

让nginx支持flv文件播放

起因

最近做小程序直播,为了简单测试需要用到live-player播放一个flv文件。服务器上用的nginx。把flv文件放到目录下访问,居然无法播放。查看了一下配置才发现,nginx不支持flv,需要响应的插件。

初次安装

如果是编译安装的非常简单,只需要在configure时添加--with-http_flv_module就可以了。

1
2
$ ./configure  --with-http_flv_module 
$ make && make install

专业就安装完成了。

对已安装的nginx,添加模块

如果已经安装过nginx,比如使用apt或yum安装过了。该怎么办呢?

openresty+lua+kafka部署

背景

  1. 使用kafka作为消息队列,将信息收集起来
  2. 已有程序无需修改,改起来成本太高了
    满足这两个条件,首先想到的就是用nginx把数据转发出去,这样程序不用改动,只改变运维环境就可以了。

python mysql-connector简要说明

安装插件

1
python -m pip install mysql-connector

建立链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import mysql.connector

# 接收参数:user, password, host, port=3306, unix_socket and database
# 返回一个MySQLConnection Object
config = {
'host': '127.0.0.1',
'user': 'root',
'password': 'root',
'port': 3306,
'database': 'test',
'charset': 'utf8'
}
try:
cnn = mysql.connector.connect(**config)
except mysql.connector.Error as e:
print('connect fails!{}'.format(e))

conn就是mysql的链接对象,它可以提交开启事务、提交、回滚,也可以关闭来mysql断开链接

查询操作

执行查询,需要经过以下几个过程:

  1. 获取一个游标,数据操作都是基于游标来处理。链接的cursor方法会返回一个游标,如上面conn.cursor()就会返回游标。
  2. 调用游标的execute方法,执行sql。
  3. 获取执行结果,我们可以用fetchone()一次获取一条记录,也可以用fetchall(),一次性获取所有记录。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cursor = cnn.cursor()
    try:
    sql_query = 'select name,age from stu ;'
    cursor.execute(sql_query)
    for name, age in cursor:
    print (name, age)
    except mysql.connector.Error as e:
    print('query error!{}'.format(e))
    finally:
    cursor.close()
    cnn.close()

解决深度终端链接远程后假死问题

起因

这是最近才出现的问题,忽然发现,深度终端链接远程服务器后,过一会就假死了。还以为是不小心安了ctrl+s,于是用ctrl+q也无法解开。依然不能输入任何内容。链接状态是保持的,但就是假死了。

在网上搜索了一下找到了解决办法。

解决方法

可以修改配置文件, 在~/.bash_profile 或者~/.bashrc的配置文件里面加上下面的参数了:

1
stty -ixon

保持退出,执行下面的命令让配置生效

1
source  .bashrc

这样就不会出现假死了。

还有一种方式,链接ssh之前增加一个-o ServerAliveInterval=60参数

1
ssh -o ServerAliveInterval=60 root@192.168.0.2