企业微信 bash 命令行发送消息

github 上提交了算是自己原生写的脚本,虽然也参考了别人的一部分,但是自己添加了 检查 token 文件,以及读取管道的新功能。

配置文件示例:

#
企业微信配置
Key 大小写无关
#
Corp_id=
Secret=
AgentId=
ToUser 每个 UserID 之间用 | 隔开
ToUser “@all” 时,发送给企业内所有人
官方 API 解释: https://work.weixin.qq.com/api/doc#90000/90135/90236
ToUser=
配置文件结束

用 ngrok 透明代理在公网上访问防火墙后面的Web 服务器

ngrok 是一个使用go语言编写的反向代理软件,通过在公网和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。

我们都知道在微信开发的时候,微信服务器只认80端口,这样导致我们哪怕修改一行代码都得把代码上传到服务器上面,如果我们把ngrok用上的话就可以节省很多时间,因为外网完全可以访问到内网的web服务器上。

以下是 CentOS 7  为服务器端和 Winows 7 客户端 为例子的编译,安装,配置过程:

服务器端:

0. 安装 Go 语言:#yum -y install golang

  1. 下载 ngrok

cd /usr/local/
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=/usr/local/ngrok/
export NGROK_DOMAIN=”ngrok.yj777.cn”

2.生成证书

mkdir /usr/local/ngrok/tls

cd /usr/local/ngrok/tls

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj “/CN=ngrok.yj777.cn” -days 5000 -out rootCA.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj “/CN=ngrok.yj777.cn” -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

cp rootCA.pem ../assets/client/tls/ngrokroot.crt
cp server.crt ../assets/server/tls/snakeoil.crt
cp server.key ../assets/server/tls/snakeoil.key

3. 编译 ngrok(必须先有以上的证书才可以做编译,否则会报告“Failed to read message: remote error: bad certificate ”),在编译之前,用 “go env”命令确定正确设置 GOOS 和  GOARCH 的值。

  • cd /usr/local/ngrok/
  • GOOS=linux GOARCH=amd64 make releaseserver

4. 启动服务器端,把下面这行添加到: /etc/rc.d/rc.local,并确定 /etc/rc.d/rc.local 文件可执行。

nohup /usr/local/ngrok/bin/ngrokd -domain=ngrok.yj777.cn -httpAddr=:8080 -httpsAddr=:8081 &

并运行 /etc/rc.d/rc.local。

5. 编译客户端程序:

  • cd /usr/local/ngrok/
  • GOOS=windows GOARCH=amd64 make releaseclient
  • 在 Windows 客户端把生成的 /usr/local/ngrok/bin/windows_amd64/ngrok.exe 拷贝到客户端 c:\ngrok(目录可任意指定) 目录下。

客户端:

6. 在客户端生成配置文件 ngrok.cfg 内容如下:

server_addr: “ngrok.yj777.cn:4443”
trust_host_root_certs: false

7. 创建 ngrok.cmd 文件:

@echo off
c:
cd \ngrok
set domain=xu
ngrok -config=c:\ngrok\ngrok.cfg -subdomain %domain% 80

8. 运行ngrok.cmd 即可通过

http://xu.ngrok.yj777.cn:8080/ 访问本机上的 Web 服务器了。

如果要求对所有的 ngrok.yj777.cn 下的域名都能使用以上的服务,  可添加一条 CNAME 记录,即 *.ngrok 指向 ngrok.yj777.cn 。

微信小程序支付总结

该文章纪录了我在开发小程序支付过程中的具体流程

1. 申请微信支付

小程序认证后进入微信支付申请小程序的微信支付

2.配置商户信息

申请微信支付成功后,登陆商户平台(pay.weixin.qq.com)进入账户中心,设置微信商户的API Key与下载证书

3.配置Https服务器

小程序的前端是使用微信提供的框架开发,但是后台依然是开发者自己的服务器。小程序发起的是 https 请求,意味着小程序开发者必须配置 https 服务器。

4.服务端准备

获取openID

我们需要在小程序的客户端js中获取当前用户的openid,通过调用wx.login方法可以得到用户的code,然后开发者服务器使用登录凭证 code 获取 openid。

获取prepay_id和支付签名验证paySign

下载微信支付sdk,配置微信小程序信息与商户信息,放置证书到对应目录。调用微信申请支付JSAPI的方式生成一串验证信息如下:

appId:"wx3*******6"//小程序id
nonceStr:"qdpys6rdizbnpj12ahwvkf568a6c1sr9" //随机字符串
package:"prepay_id=wx2017***********3" //wx的预支付交易单
paySign:"8A7DC1A560B3B6DB0C656AC382D3E6F1"//微信签名
signType:"MD5"//签名加密
timeStamp:"1481167418"//时间戳,自1970年以来的秒数

5.小程序端发起微信支付

这里直接调用wx.requestPayment方法:

wx.requestPayment({
‘timeStamp’: timeStamp,
‘nonceStr’: nonceStr,
‘package’: package,
‘signType’: ‘MD5’,
‘paySign’: paySign,
‘success’: function (res) {
console.log(‘success’);
console.log(res);
}
});

OK,微信小程序支付完成。