微信支付时出现[交易已提交,请查询确认是否已扣款,避免重复操作]
微信支付时出现“交易已提交,请查询确认是否已扣款,避免重复操作”的奇怪Bug
在开发和测试微信支付功能的过程中,我们可能会遇到一些奇怪的Bug。其中一种常见的问题是,当用户进行微信支付时,系统提示“交易已提交,请查询确认是否已扣款,避免重复操作”。这种情况下,用户可能会感到困惑和不确定,因为他们已经完成了支付操作,但系统却提示他们需要再次确认。
原因分析
经过多次调试和排查,我们发现这个问题的原因是微信支付接口中的一个特殊字符——emoji表情。具体来说,在调用微信的统一下单接口时,attach参数中包含了emoji表情,这导致了系统出现错误提示。
解决方案
为了解决这个问题,我们需要对emoji表情进行过滤和转义。以下是加入到代码中的关键部分:
```java// 对emoji表情进行过滤和转义String attach = "";
if (attach != null && !attach.isEmpty()) {
attach = attach.replaceAll("[ud800-udfff]", "");
}
```
在这个代码片段中,我们使用正则表达式来匹配emoji表情(Unicode码点范围为U+D800到U+DFFF),并将其替换为空字符串。
完整的解决方案
以下是完整的解决方案:
```java// 对emoji表情进行过滤和转义String attach = "";
if (attach != null && !attach.isEmpty()) {
attach = attach.replaceAll("[ud800-udfff]", "");
}
// 调用微信的统一下单接口WeChatPayRequest request = new WeChatPayRequest();
request.setAttach(attach);
request.setNotifyUrl(notifyUrl);
request.setTradeType(tradeType);
request.setBody(body);
request.setTotalFee(totalFee);
// 发起支付请求WeChatPayResponse response = weChatPayService.pay(request);
```
在这个完整的解决方案中,我们首先对emoji表情进行过滤和转义,然后将其作为attach参数传递给微信的统一下单接口。最后,根据响应结果进行支付操作。
总结
通过对emoji表情进行过滤和转义,我们可以解决微信支付时出现“交易已提交,请查询确认是否已扣款,避免重复操作”的奇怪Bug。这个解决方案可以帮助我们在开发和测试微信支付功能的过程中避免类似的问题。