微信小程序,安卓可以调接口,苹果调不了的解决方案

微信小程序,安卓可以调接口,苹果调不了的解决方案

今天跟前端进行联调,遇到一个奇怪的问题,做个记录。

问题描述:在微信小程序上面,同一个接口调用,在安卓可以正常访问,但是在苹果缺报错了。如下图:

请求头提示:Provisional headers are shown

微信小程序,安卓可以调接口,苹果调不了的解决方案

解决:

1:跨域

首先第一个想法就是跨域了,不过很快就否决掉了。

原因:安卓和我们自己的后台都可以正常访问

2:tls问题

tls版本正常。

下面附上查看tls版本的方法:

1、打开浏览器(谷歌、火狐、360极速版)都可以,在地址栏中输入域名(一定要包含https的域名)
以谷歌为例:

在这里插入图片描述

打开域名以后,点击F12或右键检查,找到‘Security’,即可查看对应TLS版本

在这里插入图片描述

 附:WIndows系统对TLS的支持

 

在这里插入图片描述

 Tips:这里强调一下,tls版本必须大于或者等于1.2才可以,否则的话也会出现开头那个问题

3:SSL证书

1:重新检查了,ssl证书正常,没有过期。

2:检测证书

微信小程序,安卓可以调接口,苹果调不了的解决方案

输入该输入的信息,读取证书。看到以下内容,说明缺少ssl证书。

微信小程序,安卓可以调接口,苹果调不了的解决方案

网址:SSL服务器证书安装检查器_OPENSSL工具包_迅通诚信微信小程序,安卓可以调接口,苹果调不了的解决方案https://www.myssl.cn/tools/check-server-cert.html

情况1:

我这次遇到的情况查询到最后,发现是证书pem复制少了一段,

因为Apache下载下来有三个文件,一个是根证书pem,一个是中间证书pem,一个是秘钥

而Nginx证书下载下来是只有两个文件,一个fullchain.pem,一个是key

fullchain.pem一般会包含根证书+中间证书,所以会存在两段如下:

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

但是我这次这有一段,也许是其他同事复制少了,重新下载证书内容上去,问题解决!

微信小程序,安卓可以调接口,苹果调不了的解决方案

 中间证书显示正常!

另外,查阅资料的时候,还有另外一种方案可以重新生成中间件证书,记录一下:

首先先找到 Let's Encrypt 生成出证书的4个文件

  1. cert.pem
  2. chain.pem
  3. fullchain.pem
  4. privkey.pem

将 cert.pem 内容复制到这个地址解析 

https://www.myssl.cn/tools/downloadchain.html

微信小程序,安卓可以调接口,苹果调不了的解决方案

解析成功可以获得2个下载按钮
使用 [点击下载中间证书文件]

将下载到的文件中的 内容 复制到 fullchain.pem 的 两段内容的中间 ,保存即可。

(需要注意 fullchain.pem 格式要求极为严格 不能存在空行 空格等)

最后重启nginx 问题解决

  1. # 测试配置是否正常
  2. nginx -t
  3. # 重新加载配置文件
  4. nginx -s reload

结论

原因找到,是服务器缺少中间证书导致的。

问题解决!

                       

点击阅读全文

上一篇 2023年 5月 28日 am10:29
下一篇 2023年 5月 28日 am10:30