首页 > 技术文章 > 微信小程序踩坑

vanuan 2018-08-24 16:59 原文

小程序

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

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

2.openid和userInfo获取

userInfo信息获取基本按文档wx.getUserInfo()可以拿到。

注意的是把用户信息缓存起来吧,不然开发时工具老刷新老是要授权获取。


openId获取就比较麻烦了。

a)先要通过wx.login()获取用户登录凭证。

b)通过访问接口,获取session_key和openid

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

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

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

因为第二步已经获取了openId,就不需要第三步了,没深究了。

但是,小程序的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;
        }
    }
}

推荐阅读