微信小程序报 47001 - data format error hint

微信小程序报 47001 - data format error hint

首先分两个重要点

①:请求 url 要携带 access_token (文档并未提醒)
②:要以 raw 方式提交

下面我们以 微信小程序开发工具 和s pring boot 的两个例子进行演示。

1:微信小程序开发工具例子

如果使用微信小程序开发工具,请首先选择 不校验合法域名

在这里插入图片描述

此功能仅限于本地测试,并且在在线发布时仍需要进行验证。 (这仅是为了测试的理解,后台将在下面介绍)

错误请求(仅仅相对于某些特定问题来说;如:47001)

wx.request({
      url: "https://api.weixin.qq.com/wxa/msg_sec_check",
      data: {
     	access_token:"XXXXXX"
        content:"文本审核",
      },
      method: 'POST',
      //请求头
      header: { 'content-type': 'application/x-www-form-urlencoded' },
      success: function (res) {
        console.log(res)
      },
    })

正确请求(仅仅相对于某些特定问题来说;如:47001)

wx.request({
      url: "https://api.weixin.qq.com/wxa/msg_sec_check?access_token=xxxxx",
      data: {
        content:"文本审核"
      },
      method: 'POST',
      success: function (res) {
        console.log(res)
      },
    })

仔细对比一下他们两个写法的不同点。

2:Spring boot 例子

在这里,我们使用Spring Boot的RestTemplate测试。

这是 RestTemplate发送请求教程

错误写法(仅仅相对于某些特定问题来说;如:47001)

public SecCheck get_msgSecCheck(String access_token,String content ){
        String url = "https://api.weixin.qq.com/wxa/msg_sec_check";
        Map<String, String> paramMap = new HashMap<>();
        paramMap.put("access_token",content);
        paramMap.put("content",content);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(paramMap,headers);
        System.out.println(httpEntity);
        ResponseEntity<SecCheck> response = this.restTemplate.postForEntity(url, httpEntity, SecCheck.class);
        return response.getBody();
   }

正确写法(仅仅相对于某些特定问题来说;如:47001)

public SecCheck get_msgSecCheck(String access_token,String content ){
        String url = "https://api.weixin.qq.com/wxa/msg_sec_check?access_token="+access_token;
        Map<String, String> paramMap = new HashMap<>();
        paramMap.put("content",content);
        HttpHeaders headers = new HttpHeaders();
        HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(paramMap,headers);
        System.out.println(httpEntity);
        ResponseEntity<SecCheck> response = this.restTemplate.postForEntity(url, httpEntity, SecCheck.class);
        return response.getBody();
   }

3:原因

第一个原因自然是文档 通(sang)俗(xin)易(bing)懂(kuang)

第二个原因是 请求头

我们看一下 post 常用请求 Content-Type 类型

①:application/x-www-form-urlencoded

最常见的 POST 提交数据的方式,表单内的数据将会被转换为键值对方式提交,如 name=anny&age = 20。

②:multipart/form-data

它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。

③:raw

可以上传任意格式的文本,可以上传text、json、xml、html等。

或许你需要使用postman生成二维码

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一拖再拖 一拖再拖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值