微信小程序OCR识别“errcode“:101000,“errmsg“:“invalid image url “ errcode“:41005,“errmsg“:“media data missing

微信小程序OCR识别 "errcode":101000,"errmsg":"invalid image url && "errcode":41005,"errmsg":"media data missing

这是腾讯的文档(https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/img-ocr/ocr/idCardOCR.html) 按照文档里实现你永远整不出来 腾讯文档垃圾名不虚传 现在想想还是生气
在这里插入图片描述
前端代码

uploadIdcard: function (){
    wx.chooseMedia({
      count:1,
      mediaType:['image'],
      sourceType:['camera'],
      sizeType: ['original', 'compressed'],
      camera:'back',
      success:(res) => {
        if(res.tempFiles[0].size > 2048000 ){
          wx.showToast({
            title: '图片大小超过2M',
            icon:'error'
          })
        }else{
          wx.uploadFile({
            filePath: res.tempFiles[0].tempFilePath,
            name: 'OCRCard',
            url: app.globalData.baseURL+'/admin/wxuser/OCRIdCard',
            success:(res1) => {
              //获取的返回值
              
            },
            fail:(err) => {
              console.log(err,"err");
            }
          })
        }
      }
    })
  },

后端代码,坑的地方来了,

img_url 也! 不! 是! body参数 也就说这玩意不能放在map里 人话就是你只能使用&img_url 拼接才行 就不能和access_token似的标注一下 非Body参数

你翻翻他们那个文档 OCR里哪有41005的错误码!!!

这里报41005(img参数我没试)
在这里插入图片描述url我最开始的端口是9001但是一直报错 但80端口就不报错了其他的端口可以试试 我只试了80,改成80端口就不会再报101000错误了

public synchronized String OCRIdCard(@RequestParam("OCRCard") MultipartFile OCRCard,HttpServletRequest request) throws IOException {
        System.out.println("-----------------------");
        //上传图片并返回图片地址
        String data = icommissionService.upPicture(OCRCard).getData();
        System.out.println(data+"图片上传的返回值");
        //端口我试了80是成功的
        String url = "https://api.weixin.qq.com/cv/ocr/idcard?access_token="+getToken(request)+"&img_url="+"http://xxxx:80/xxxx.jpg";
        String post = sendGetOrPost.doGetPost(url, "POST",null);
        System.out.println("请求结果");
        System.out.println(post+"0000000000000000000000000");
        JSONObject jsonObject = JSONObject.parseObject(post);
        Integer errcode = Integer.valueOf(jsonObject.getString("errcode"));
        if (errcode == 0){
            System.out.println("识别成功");
            System.out.println(jsonObject.toJSONString()+"9999999999999999999999");
        }
        System.out.println("-----------------------");
        return null;
    }

请求成功在这里插入图片描述

### 微信API调用中错误码40029的解决方案 #### 错误码40029的具体含义 当接收到`{'errcode': 40029, 'errmsg': 'invalid code'}`这样的响应时,意味着所提供的登录凭证(即`code`)被微信服务器判定为无效[^1]。 #### 可能原因分析 - **临时登录凭证失效**:`code`的有效时间非常短暂,在用户授权成功后仅能在短时间内换取`session_key`和`openid`。如果网络延迟或其他因素导致处理过程超过了这个时限,则会触发此错误。 - **前后端配置不匹配**:确保前端应用(如微信小程序)与后台服务之间使用的应用程序标识符(AppID)完全相同非常重要。任何差异都可能导致认证失败并返回上述错误消息[^4]。 - **重复使用同一份授权码**:每次成功的OAuth流程都会生成一个新的唯一性的`code`值;一旦它被用来交换访问令牌之后就不能再次利用来获取新的token了——这同样会造成同样的问题发生[^3]。 #### 解决策略建议 为了有效地克服这个问题,可以采取以下几个措施: 1. 验证当前环境下的AppID是否正确无误,并确认其状态正常(未处于封禁等情况)。同时也要核对好对应的密钥(AppSecret),因为二者共同决定了能否顺利地完成身份验证的过程。 2. 对于基于Node.js构建的服务端逻辑而言,应当仔细检查所部署的应用实例里设置好的参数是不是跟实际注册的小程序账号相吻合。此外还需留意不同版本间的兼容性问题以免造成不必要的麻烦。 3. 如果是在调试阶段频繁遭遇此类状况的话,不妨尝试清除本地缓存数据后再重新发起请求试试看效果如何。有时候旧有的残留记录也可能干扰到新一次的身份校验环节从而引发异常情况的发生。 4. 当涉及到跨平台或多客户端共享同一个用户的场景下工作时,请务必遵循最佳实践指南中的指导方针来进行设计规划。特别是关于单点登录(SSO)机制部分的内容更值得深入研究学习一番以便更好地理解和规避潜在风险点所在之处。 ```javascript // Node.js 后端示例代码片段展示如何正确传递 AppID 和 AppSecret 参数给微信 API 接口 const axios = require('axios'); async function getAccessToken(code) { const appId = process.env.WECHAT_APP_ID; const secret = process.env.WECHAT_SECRET; try { let response = await axios.get(`https://api.weixin.qq.com/sns/jscode2session`, { params: { appid: appId, secret: secret, js_code: code, grant_type: 'authorization_code'} }); console.log(response.data); return response.data; // 返回包含 openid 等信息的对象 } catch (error) { throw new Error(`Failed to fetch access token: ${JSON.stringify(error.response?.data || error.message)}`); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值