支付宝RiskGo


记录一下我司项目中接入支付宝RiskGo,奇葩异常竟然是支付宝乌龙

1.关于RiskGo

我司接入支付宝RiskGo,主要是用来监控与收集用户对我司支付宝账号主体投诉信息,便于运营在第一时间知道与处理用户投诉等。具体关于支付宝RiskGo,可以查看官方文档。
RiskGo接入文档

2.接入RiskGo通知回调

  • 项目中接收回调通知伪代码,具体实现参考官方文档

    @ApiOperationSupport(order = 4)
    @ApiOperation(value = "接收支付宝RiskGo回调推送")
    @RequestMapping(value = "/data", method = RequestMethod.POST, produces = "application/x-www-form-urlencoded; charset=GBK")
    public String alipayRiskGoByCallBack(AliPayRiskGoDataRequestDTO request) {
    	log.info("riskGo,投诉类型:{},投诉等级:{},投诉内容:{}", request.getRisktype(), request.getRisklevel(), request.getComplainText());
    	return alipayComplainService.alipayRiskGoByCallBack(request);
    }
  • 支付宝开放平台配置

3.RiskGo 编码转换异常

  • 编码异常现象

  • GBK强转成UTF-8
    出现乱码现象,对已经出现乱码的中文进行编码还原,都无法进行还原。对接收回调接口(上述接口)进行验证,均正常。对中文字符串(尚未强转前),GBK编码转换UTF-8,是正常的。下图是支付宝技术客服中获取的推送记录的数据,这个去RiskGo后台也可以看到对应的数据。手动触发推送,正常接收,无乱码现象。

          1).正常接收时:
                    

           2)被强转后接收:
                    

  • 反馈至支付宝技术

  • 如何GBK正确转码到UTF-8
    上述乱码,是支付宝RiskGo内部推送过来,涉及面较多,实际推送过来的数据,中文字符有GBK被强转成UTF-8,而在支付宝RiskGo官方后台推送列表是正常。GBK强转成UTF-8会丢失其中字节,再次转回成GBK,依旧乱码。GBK转UTF-8会通过ISO-8859-1进行过度,伪代码如下

   public static void test() throws UnsupportedEncodingException {

//        String chinese = "����ͨappΥ����ȡ��Ա���ṩ���\uE8EC������ȡ���ã�������Ա�ͽ�\uECBB��������Ҫ����Ա�����á�Υ����ȡ����";

        //java内部编码
        String chinese = "投诉";
        //转换成gbk编码
        String gbkChinese = new String(chinese.getBytes("GBK"), "ISO-8859-1");
        System.out.println("gbk:" + gbkChinese);
        //java内部编码
        String unicodeChinese = new String(gbkChinese.getBytes("ISO-8859-1"), "GBK");
        //中文
        System.out.println(unicodeChinese);
        //utf--8编码
        String utf8Chinese = new String(unicodeChinese.getBytes("UTF-8"), "ISO-8859-1");
        //乱码
        System.out.println(utf8Chinese);
        //java内部编码
        unicodeChinese = new String(utf8Chinese.getBytes("ISO-8859-1"), "UTF-8");
        //中文
        System.out.println(unicodeChinese);
    }

运行结果:

4.归纳

出现中文字符串编码,一直在排查项目中的转码是否正常,转码工具类,过滤器等。当从支付宝技术拿到推送记录数据(无任何转码),才发现被支付宝坑惨了,是支付宝内部问题。已经被强转的中文字符串也还原成正常中文,支付宝到现在也没有给出统一的转码方式与解决方案


文章作者: coderpwh
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 coderpwh !
  目录