微信小程序踩坑

小程序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;
        }
    }
}