微信小程序开发前期储备

微信小程序开发前期储备

前言

  • 微信小程序开发需要域名和https,在此记录下前期准备工作。

接入指南

  • 建议先看看官方小程序接入指南,虽然看完还是有一大堆疑惑。
  • 官方文档微信认证验证方式
  • 特别提醒,企业注册小程序,如果已有企业公众号,并且已经认证过的,可以重复使用微信公众号认证过的资质。建议满足条件的走第一条途径,速度很快,大概不到1分钟就可以完成注册,也不用花一分钱。如果是企业无微信公众号的,或者是未认证过的,可以选择第二种方式:小额打款或认证。认证需要审核300费用/年,而且交钱不一定就能认证通过,就是说即使审核不通过300块还是要交的。
  • 选择微信认证需企业提交法人身份证、营业执照、税务登记证、银行开户许可证、组织机构代码证、申请公函,需要开具增值税发票的客户,还需提供纳税人认定书、两个月内的增票等
  • 复用公众号资质关联注册小程序,1个月只能复用5次,最多能用10次,想要多点就下个月再来一次咯。同一主体下的小程序,只能关联10个。想要更多?那就换个公众号再来咯。
  • 小程序管理员和微信公众号管理员一样,都是可以修改的。修改的时候,需要原管理员的姓名、手机号码、身份证号、然后让他用手机短信的验证码输入、还有用他的手机扫一扫之后确定后,就可以换成新的管理员啦!而且不受次数限制。因此,小程序管理员离职之前要做好交接工作

操作环境

  • windows10

域名注册

  • 域名可以到阿里云购买一个,购买之后提交实名认,一般两三天审核通过便可正常使用了。

  • 此时可以配置域名解析,主要是解析到真是ip地址,按提示操作即会明白。

  • 这里写图片描述

  • 如果想查看是否映射成功,可以在cmd下输入“nslookup www.domain.com(改为自己注册的域名,下面以此为例)”即可看到解析到的IP地址。

证书申请

  • 有了域名还需要证书,否则无法升级到https,这里推荐一个免费证书生成网站freessl ,同时还有一个离线的证书管理工具keymanager
  • 按照提示操作即可生成pem格式的证书
  • 其中需要注意的是在生成完毕的时候需要下载证书压缩包(包含full_chain.pem和private.key两个文件),如果此时没保存也没下载,那么后面只能下载到pem证书,无法得到私钥private.key。
  • 至此免费证书已经到手了。
  • 另外阿里云似乎也能免费申请到证书,本人没实践过,在此贴下教程链接 https://ninghao.net/blog/4449

SpringBoot开发

  • 生成的免费证书无法直接用在springboot上,由于tomcat只支持PKCS12和JKS,因此需要利用openssl转换一下,openssl暂时没有windows版,大伙可以在此处下载Win32OpenSSLwindows版本
  • 下载完记得配置环境变量,同时也记得配置jdk的环境变量,因为后面需要用到keytool命令
  • 第一步,生成pfx,先切换到pem同级目录下,然后执行cmd命令:

openssl pkcs12 -export -out server.pfx -inkey private.key -in full_chain.pem

  • 执行成功会看到生成了server.pfx文件
  • 如果拿到的是其他格式的文件,比如aaa.crt和aaa.key,那么也可以执行如下命令生成pfx文件

openssl pkcs12 -export -out server.pfx -inkey aaa.key -in aaa.pem

  • 第二步,根据第一步得到的pfx文件再生成jks文件

keytool -importkeystore -srckeystore server.pfx -destkeystore server.jks -srcstoretype PKCS12 -deststoretype JKS

  • 期间会让输入密码,输入你想要的密码即可,假如这里输入的是123456。

  • 经过上面两个命令的执行已经可以得到server.jks了

  • 在springboot工程resources下放置server.jks,即与application.yml同级目录

  • 之后在application.yml中添加如下:

    server:
      ssl:
        key-store: classpath:server.jks
        key-password: 123456
    
  • 这样就支持https了。

  • 如果还想继续使用http,那么就将http重定向到https即可(http和https端口不可以一致哦),在application下添加如下bean:

    @Bean
    	public EmbeddedServletContainerFactory servletContainer() {
    
    		TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
    
    			@Override
    			protected void postProcessContext(Context context) {
    
    				SecurityConstraint securityConstraint = new SecurityConstraint();
    				securityConstraint.setUserConstraint("CONFIDENTIAL");
    				SecurityCollection collection = new SecurityCollection();
    				collection.addMethod("post");   //添加post方法,否则http的post方法无法转化为https的post
    				collection.addPattern("/*");
    				securityConstraint.addCollection(collection);
    				context.addConstraint(securityConstraint);
    			}
    		};
    		tomcat.addAdditionalTomcatConnectors(httpConnector());
    		return tomcat;
    	}
    
    	@Bean
    	public Connector httpConnector() {
    
    		Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    		//将http接口重定向到https
    		connector.setScheme("http");
    		connector.setPort(port);//http端口
    		connector.setSecure(false);
    		connector.setRedirectPort(portHttps);//https端口
    		return connector;
    	}
    
  • 上面还有一句必不可少collection.addMethod(“post”);,如果少了那么http的post请求无法转发到https。

nginx配置

  • 如果不想通过改造项目支持https,也可以通过nginx代理实现接口升级。
  • 先到官网下载nginx,由于是windows服务器,这里就下载windows版了
  • 下载完配置一下环境变量,注意不要点击nginx.exe,否则会导致后面的命令执行失败
  • 配置完环境变量后可以用‘nginx -v’查看下版本号
  • cmd中切换到nginx安装目录(一定要这么做,同时cmd要用管理员身份运行,否则可能出错,错误可以到logs文件夹下查看日志),执行"start nginx",什么都没提示表示成功启动。
  • 或者可以输入IP地址和端口(默认80,下图由于我80端口被占用,不得已修改为8012)进行网页访问,显示如下也表示成功
  • 这里写图片描述
  • 接下来可以修改conf/nginx.conf,配置https
# HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  www.domain.com;

        ssl_certificate      ssl/full_chain.pem;
        ssl_certificate_key  ssl/private.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
		
		
        location /one {
			proxy_pass http://127.0.0.1:8061/;# 注意尾部的斜杠必须加
            root   html;
            index  index.html index.htm;
        }
		location /two {
			proxy_pass http://127.0.0.1:8062/;
            root   html;
            index  index.html index.htm;
        }
		location /three {
			proxy_pass http://127.0.0.1:8063/;
            root   html;
            index  index.html index.htm;
        }
    }
  • 其中先将HTTPS server模块的注释打开,然后根据实际情况配置server_name,ssl_certificate,ssl_certificate_key,location这四处就可以了。
  • 这里的ssl_certificat由于我把pem文件放在了ssl文件夹里,因此路径才写成ssl/full_chain.pem,请根据自己实际情况修改哦。
  • 这里写图片描述
  • 最后一步就是更新配置文件,输入命令“nginx -s reload”即可,正常的话也是什么都没提示。
  • 这样子你就可以直接访问https://www.domain.com/one/或https://www.domain.com/two/或https://www.domain.com/three/了 ,实际上就会访问到proxy_pass配置的https://127.0.0.1:xxxx/去了。这样对外统一443端口,却可以分别请求到不同服务。
  • 需要注意的是由于误操作可能会导致生成多个nginx,当你发现修改配置reload无效后应该到任务管理查看是否有多个nginx。
  • 关于nginx的更多命令可以去官网查看,或者查看这个https://www.cnblogs.com/zoro-zero/p/6590503.html

注意

  • 在申请子域名时请不要用下划线,比如有些人喜欢用a_1.aa.bb.com,这样虽然在解析上没什么问题,但如果放在浏览器上就会直接得到400错误,因此建议改成 a-1.aa.bb.com
  • 如果要获取微信的手机号则必须要经过企业认证:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html
  • 微信小程序请慎用缓存接口wx.setStorageSync,之前测试时发现前一个页面保存完,进入下一个页面取出来的值就是空的。
  • 微信生成分享二维码的base64需要程序已发布才可以正确解析为图片,因此测试期间(程序还未发布)看不到分享二维码很正常
  • 到201904为止,目前图片的url还是可以使用http进行加载的,后期会不会要求为https就看官方了
  • 小程序对用户信息或手机号是加密的,官方虽然提供了demo,可是没有java版,需要java版的可以看看这个链接(本人测试可用,至于密文可以从官方的demo中获得):微信小程序Java解密AES加密数据 - wenyx博客 - CSDN博客
  • 小程序有服务域名和业务域名之分,业务域名即在小程序中的网页跳转,而服务域名则是用来请求接口的
    在这里插入图片描述
  • 由于微信小程序需要调用https://api.weixin.qq.com相关的接口,而相关的接口调用需要先获取access_token,但access_token是用appid和secret换来的,故appid和secret一旦在线上使用,线下的测试就不能再使用,否则线下获取access_token时就会把线上的access_token置为失效,影响线上的功能。因此,小程序提供了申请测试号的功能,可以在以下网址申请到测试号,线下测试则使用测试号
    https://developers.weixin.qq.com/miniprogram/dev/devtools/sandbox.html
    另外,我发现有个bug,就是你登录扫码进去后可能看到的appid是空的,此时再怎么刷再怎么重新登也是没用的,解决的办法就是点击右上角的社区,先在社区登录,再回来刷新那个页面,就可以看到appid了

小程序微信登录流程

在这里插入图片描述
教程 | 《小程序开发指南》
https://developers.weixin.qq.com/ebook?action=get_post_info&docid=000cc48f96c5989b0086ddc7e56c0a

参考

https://www.cnblogs.com/zoro-zero/p/6590503.html
http://www.sohu.com/a/154857637_264810
https://www.jianshu.com/p/64172ccfb73b

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值