赞
踩
微信小程序跟后端的通信必须要HTTPS,总结开发中遇到的问题。
以下是微信开放文档中的要求:
每个微信小程序需要事先设置通讯域名,小程序只可以跟指定的域名与进行网络通信。包括普通 HTTPS 请求(wx.request)、上传文件(wx.uploadFile)、下载文件(wx.downloadFile) 和 WebSocket 通信(wx.connectSocket)。
配置流程
服务器域名请在 「小程序后台-开发-开发设置-服务器域名」 中进行配置,配置时需要注意:
https
(wx.request、wx.uploadFile、wx.downloadFile) 和 wss
(wx.connectSocket) 协议;api.weixin.qq.com
不能被配置为服务器域名,相关API也不能在小程序内调用。 开发者应将 AppSecret 保存到后台服务器中,通过服务器使用 getAccessToken
接口获取 access_token
,并调用相关 API;小程序必须使用 HTTPS/WSS 发起网络请求。请求时系统会对服务器域名使用的 HTTPS 证书进行校验,如果校验失败,则请求不能成功发起。由于系统限制,不同平台对于证书要求的严格程度不同。为了保证小程序的兼容性,建议开发者按照最高标准进行证书配置,并使用相关工具检查现有证书是否符合要求。
对证书要求如下:
iOS
不支持自签名证书;iOS
下证书必须满足苹果 App Transport Security (ATS) 的要求;Android
机型还未支持 TLS 1.2,请确保 HTTPS 服务器的 TLS 版本支持 1.2 及以下版本;除了网络请求 API 外,小程序中其他 HTTPS
请求如果出现异常,也请按上述流程进行检查。如 https 的图片无法加载、音视频无法播放等。
跳过域名校验
在微信开发者工具中,可以临时开启 开发环境不校验请求域名、TLS版本及HTTPS证书
选项,跳过服务器域名的校验。此时,在微信开发者工具中及手机开启调试模式时,不会进行服务器域名的校验。
——————————————————————————————————————————————————
申请免费SSL
我选择腾讯云(因为其他我都申请了,但最后腾讯成功了,而且腾讯云的文档很全)
https://buy.cloud.tencent.com/ssl
填写域名相关,完成证书申请。
https://cloud.tencent.com/document/product/400/4142#ManualVerification
根据操作手册完成证书验证。我选择手动 DNS 验证
因为我的域名在华为云,所以(这一步很关键):
下载下来,我是在spring boot 中使用,其他的也可以照文档部署。
https://cloud.tencent.com/document/product/400/4143
application.yml添加证书信息,选择对应证书,spring boot 使用Tomcat,自定义自选。
- server:
- port: 443
- ssl:
- key-store: classpath:hg.gxxxx.com.jks
- key-store-password: gxxxx
- key-store-type: JKS
代码添加(这里是spring boot 2.2.2的环境,2.1以下自行百度):
- @SpringBootApplication
- public class GuestBookApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(GuestBookApplication.class, args);
- }
-
- @Bean
- public TomcatServletWebServerFactory servletContainer() {
- TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
- @Override
- protected void postProcessContext(Context context) {
- SecurityConstraint constraint = new SecurityConstraint();
- constraint.setUserConstraint("CONFIDENTIAL");
- SecurityCollection collection = new SecurityCollection();
- collection.addPattern("/*");
- constraint.addCollection(collection);
- context.addConstraint(constraint);
- }
- };
- tomcat.addAdditionalTomcatConnectors(createHTTPConnector());
- return tomcat;
- }
-
- private Connector createHTTPConnector() {
- Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
- connector.setScheme("http");
- connector.setSecure(false);
- connector.setPort(80);
- connector.setRedirectPort(443);
- return connector;
- }
- }
到这里就完成了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。