短信发送失败走过的坑

  1. 短信内容要求GBK编码的坑
    一般编码都是使用的utf-8编码,但是第三方短信接口方要求发送的短信内容必须为GBK编码格式的。这就有一个问题了,将需要发送的短信内容进行编码之后,因为采用的是GBK编码,编码的短信内容内带有“%”,而底层框架又会将所有的“%”,再次进行编码。如此发送给第三方平台的编码就是乱码了,则会发送失败。

解决办法:因为路径最后的内容是进行了编码的,所以不能直接传url路径,框架会将字符串再次进行处理,不论是直接传url,还是用map都不行,因为两个构造方法最后都是走的同一个方法,那个方法都要进行一次再编码。
所以:把路径用URI类进行包装一哈就行了,restTemplate.getForObject(new URI(url), String.class);

  1. 微服务中发送短信的小坑
    新项目中,采用同样的方法进行发送短信,所有的代码和配置都是一样的,但是此时发送短信的时候,就会报错说,会报一个java.lang.IllegalArgumentException:URI is not absolute。此时依旧短信是发送失败的状态。因为代码是直接复制的,所以在代码肯定是没有问题,能走通,新项目唯一变的就是采用的微服务,而微服务中的调用方式和单体项目中是差不多的。于是,我想到的可能是配置的问题,因为新项目中采用的是nacos,而之前在nacos上面配置了个人空间,并且本地的启动服务类也配置了环境变量,具体配置见之前写的“nacos负载均衡相关知识”文章。
    当时在让配置个人空间的时候,我就提出了一个疑问,本地服务采用带有local后缀的配置文件启动,那本地带有dev的yml配置文件是否还可以支持使用,当时他们说的是能够支持,但是这次,我将发现并没有使用本地的dev的配置文件,于是,我将关于短信的配置信息重新复制到nacos的个人空间的merchant-management-server.yaml配置文件上,发布之后,再进行短信发送接口的测试,此时,短信就可以成功发送了!!!!!
    果然就是这里的坑。还是对nacos的启动加载配置不熟悉,后面找技术经理咨询一下。

你可能感兴趣的:(支付项目,错误积累)