微信小程序踩坑

小程序html

基本开发参考官方手册 没得说。

1.关于网络请求的充要条件参考上篇文章解决。vue

2.openid和userInfo获取

userInfo信息获取基本按文档wx.getUserInfo()能够拿到。java

注意的是把用户信息缓存起来吧,否则开发时工具老刷新总是要受权获取。
linux


openId获取就比较麻烦了。nginx

a)先要经过wx.login()获取用户登陆凭证。git

b)经过访问接口,获取session_key和openidgithub

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

由于这个url直接带了appId和secert,因此不推荐在小程序里直接写入,而是应该调用服务层,由服务层访问接口获取。spring

c)获取session_key后就能够对userInfo里rawData进行解密获取一些重要信息了。可是官方的解密方法竟然没有java版本的。网上找了java版本的会出现“javax.crypto.BadPaddingException: pad block corrupted ”异常。小程序

由于第二步已经获取了openId,就不须要第三步了,没深究了。api

可是,小程序的API都是异步的。因此采用promise来获取

最后把openId也缓存起来吧。


3.文件服务器
 主要经过nginx配置实现。
 注意下目录权限。
 403 Forbidden错误,须要在配置文件增长user root;


服务
springboot+jpa 没得说


后台系统
vue-manager-system 这个Vue+Element UI框架比较简单干净,开发仍是比较容易的。

而后经过nginx配置提供服务。

405 Method Not Allowed错误,须要增长以下配置:

        error_page    405 =200 @405;
        location @405
        {
            root  /opt/htdocs;
         


项目代码:GitHub

完整的nginx配置

user root;
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include        mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush      on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
     
    server {
        listen 80;
        server_name law.loadpeople.com;
        rewrite ^(.*)$ https://$host$1 permanent;
         
        location / {
            root    html;
            index  index.html index.htm;
        }
    }
 

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
      listen        8000;
      listen        somename:8080;
      server_name  somename  alias  another.alias;

      location / {
          root    html;
          index  index.html index.htm;
      }
    #}


    # HTTPS server
    #
    server {
        listen 443;
        server_name law.loadpeople.com;
        ssl on;
        root html;
        index index.html index.htm;
        ssl_certificate    cert/214897222470878.pem;
        ssl_certificate_key  cert/214897222470878.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        client_max_body_size 100M;
        location / {
            proxy_pass http://127.0.0.1:8082;
            root html;
            index index.html index.htm;
        }
         
        location /files/ {
            root  /home/law/upload/;
            autoindex on;
       
       
        location /admin {
            alias    /home/law/.jenkins/workspace/law/admin/dist;
            try_files $uri $uri/ /index.html last;
            index  index.html;
            add_header Access-Control-Allow-Origin *;
        }
         
        location /api/ {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Nginx-Proxy true;
            proxy_set_header Connection "";
            proxy_pass https://law.loadpeople.com/;
        }
        error_page    405 =200 @405;
        location @405
        {
            root  /opt/htdocs;
        }
    }
}