收藏
回答

救命:已认证服务号发消息接口始终返回:40003, invalid openid rid?


如图一:能获取到access_token,说明appid和appsecret都是正确的,然后对已关注用户的提问进行回复,调用的接口是:https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN,返回40003错误,提示openid不对。但是同样的接口,同样的参数,我在postman和调试工具(https://mp.weixin.qq.com/debug/)都可以正常测试ok,见图二、图三。

麻烦问下该怎么处理,我已经试了在网上找到的所有办法,包括注意顺序,注意格式,重新关注之类的,都不行。救命啊。

图一:(errmsg:'invalid openid rid: 635985d9-3360cafe-7a783cfa')

图二:用postman调用是成功的,在公众号可以收到发送的消息。

图三:用调试工具调用也是成功的,在公众号也能收到发回的消息。

图四:关注服务号的微信也能收到从postman和调试工具发的消息。

回答关注问题邀请回答
收藏

4 个回答

  • 社区技术运营专员--许涛
    社区技术运营专员--许涛
    2022-10-27

    你好,麻烦提供下openID,请勿提供打码截图

    2022-10-27
    有用
    回复 11
    • 白菜
      白菜
      2022-10-27
      这个是关注这个服务号的用户的openID:oJv0u5rvPwXZfGDzvFUquo_N30ZM
      2022-10-27
      回复
    • 白菜
      白菜
      2022-10-27回复白菜
      我把我的完整代码贴在下面了,麻烦帮忙看下。
      2022-10-27
      回复
    • 社区技术运营专员--许涛
      社区技术运营专员--许涛
      2022-10-27回复白菜
      是不是用了不同服务号的openid,不同服务号openid不互通
      2022-10-27
      回复
    • 白菜
      白菜
      发表于移动端
      2022-10-27回复社区技术运营专员--许涛
      不是不是,都是同一个
      2022-10-27
      回复
    • 白菜
      白菜
      发表于移动端
      2022-10-27回复社区技术运营专员--许涛
      不是不是,都是同一个
      2022-10-27
      回复
    查看更多(6)
  • Ryan
    Ryan
    2023-08-28

    蹲个后续,请问一下楼主后面怎么解决的?遇到了同样的问题

    2023-08-28
    有用
    回复
  • 白菜
    白菜
    2022-10-27

    测试脚本:

    const talkControllor = require('./wxControllor');
    
    
    console.log('测试通过公众号给用户发消息');
    
    
    // 测试发送消息给微信
    const _mockData={
        userOpenId:'oJv0u5rvPwXZfGDzvFUquo_N30ZM',
        content:'您的申请已收到,感谢提交!'
    }
    
    
    talkControllor.reply(_mockData);
    


    wxControllor.js完整代码如下:

    // wxControllor.js
    const axios = require('axios');
    
    
    class TalkControllor {
    
    
        // 回复用户消息
        static reply(data) {
    
    
            // 转换数据格式
            const _body = WeiXinHelper.toText(data);
            // 发送消息
            TalkControllor.Send(_body);
        }
    
    
    
        // 发消息给用户
        static async Send(msg) {
            // TODO:test
            const apiPre='https://api.weixin.qq.com/cgi-bin/'; 
            //const _accessToken = await this.GetAccessToken(); // 获取accesstoken        
            const _accessToken= '62_3ttn31TLHSpOdb-PwugmDsTTKtGyzlqCRb3KEUwt_KtpKMIS7IsHmgj7chgJwTpy6Yizv5kfpdh306pxXrS_iXHQTNVjuNOZIiAFAZKT';
            const _json = JSON.parse(msg);
    
    
            //发送
            axios.post(apiPre + 'message/custom/send?access_token=' + _accessToken, {
                //data:JSON.parse(msg)
                data: {
                    "touser": _json.touser,
                    "msgtype": _json.msgtype,
                    "text": {
                        "content": _json.text.content
                    }
                },
                responseType: 'json',
                responseEncoding: 'utf8'
            })
                .then(function (response) {
                    console.log('发消息后,微信回复:');
                    console.log(response.data);
                })
                .catch(function (error) {
                    console.log(error);
                })
                .then(function () {
                    // TODO:记录发送日志
                });
        }
    
    
    }
    
    
    class WeiXinHelper{
        // 转换为微信代码格式
        static toText(obj){
            let str=WeiXinHelper.template.text;
            str = str.replace(/{userOpenId}/, obj.userOpenId);
            str=str.replace(/{content}/, obj.content);
            return str;
        }
    }
    
    
    WeiXinHelper.template={//向公众号发送消息模版(Json格式)
        text:       `{
            "touser":"{userOpenId}",
            "msgtype":"text",
            "text":
            {
                "content":"{content}"
            }
        }`
    }
    
    
    // 将该模块导出
    module.exports = TalkControllor;
    
    
    
    2022-10-27
    有用
    回复
  • 青寒
    青寒
    2022-10-27

    你代码里有没有最后调用发消息接口的日志,看看你代码里传的参数是什么

    2022-10-27
    有用
    回复 1
    • 白菜
      白菜
      2022-10-27
      代码里传跟postman和调试工具的参数一样:
      1 . url里面传accesstoken:https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=xxx
      2. 回传的参数放在postdata里面。


      代码如下:
      2022-10-27
      回复
登录 后发表内容
问题标签