这篇文章主要是从我个人的角度考虑api返回这个错误的原因,如果有不对的地方或者有遗漏的,请各路大神补充
公司开发需求:根据公众号的模板消息来给客户进行推送
调用的接口微信发送公众号模板消息接口:https://api.weixin.qq.com/cgi-bin/message/template/send
前提:公司这边展示端都是通过小程序来进行内容展示,所以openid都是通过小程序的appid进行获取的。
首先,先说说我这边为什么会出现"invalid openid"的原因:
就像前提中我所提到的,公司存储的openid是通过小程序的appid获取的,并不是通过公众号的appid获取。一个appid对应一个人会有一个openid。因为刚开始解除微信公众号这块的业务,所以对这一块的逻辑还不是很了解,经过网上查阅资料发现,在一个微信开放平台下绑定的所有公众号及小程序,同一个人不管是在那个端口,唯一的id参数是unionid。于是,公司又申请了一个微信开放平台。
在开放平台中将所有的公众号和小程序进行了绑定,这下第一步搞定了,获取到了所有人在微信这块对应我们公司唯一的unionid。
在小程序端,我们获取了用户的openid和unionid进行存储,接着,就要考虑怎么同时获取公众号返回的unionid和openid了。又是一顿查资料,发现用户在关注公众号的时候,微信可以对服务器进行推送消息,但是通过查看文档发现,只返回了openid,没有返回unionid,使用了调试工具,通过openid获取用户信息,也发现只返回了用户的基本信息包括openid,也没有unionid,顿时就很失望,看来又是一条断头路。
抱着死马当活马医的心态,准备试一试,不试一下怎么死心呢,于是我又开始准备大干,在公众号后台,我启用了服务器配置(位置在基本配置中)。当用户进行关注或者取消关注的时候,服务器会收到微信发来的推送,我通过测试,发现关注和取消关注都会获取当前操作用户的openid,于是我又通过openid获取到用户的信息,通过打印数据,我发现了惊人的一幕,一个单词抓住了我的眼球:unionid。我以为看错了,我复制了所有的返回数据,把其他的数据都删掉,只留下了unionid,我一个字母一个字母拼了一遍又一遍,确认真的是unionid后,我终于兴奋了。于是我将这个unionid和我的小程序账号的unionid进行比对,发现一模一样,于是我又拿到通过微信请求服务器的openid,进行推送模板消息,发现推送成功了,此时平复一下我激动的心情。
至此,第一个问题解决,小程序与公众号互通了。
当我尝试在推送消息中跳转到我们小程序对应的某一个页面时,又发现了一个问题,那就是"invalid weapp pagepath"
我感觉我从一个坑又跳到了另外一个坑,于是我就在想是不是我appid或者pagepath拼错了;于是我又开始一个字母一个字母的进行比对,发现一点问题都没有,我以为是pagepath拼接了参数的原因出现的错误,于是我又将参数去掉,结果还是报错,于是我确定肯定是路径的原因。于是我开始了查资料的快乐旅程。发现网络上的资料都是说微信文档写错了,不是pagepath,是page或者是path,于是我选择相信了他们,我将参数名换成了page和path,结果都推送成功了,此时我也很激动,真的以为文档写错了,于是我拎起了我兴奋的食指,点在了推送消息上,结果跳转到了首页。
什么情况,我不是写了路径吗,为什么不按照我写的路径进行跳转,很难受,我还清楚了微信的缓存、删除了小程序又试了试,结果还是一模一样,一点用都没有,网上的path和page都是骗人的,我又返回到文档,看到miniprogram中的appid和pagepath是可以不传的,于是我抱着试一试的心态将pagepath注掉,不传这个参数,发现也推送成功了,看来网上的信息都是骗人的,传了path和page,微信是因为没有拿到pagepath的参数值,默认跳转到了appid对应的小程序首页。
于是我又将参数名换成了pagepath,但是无论如何我怎么传我想要跳转的页面,始终会返回"invalid weapp pagepath"这个错误信息,于是我将pagepath的值换成了另外一个页面,BINGO!!!推送成功,我点击推送消息,确实跳转到了我指定的另外一个页面,那为什么同样是小程序的页面,一个能跳转一个不能跳转呢。于是我首先看看是不是路径写错了,发现没有错,但是就是推送报错。于是我打开小程序中的app.json文件,碰巧看了一眼pages数组中的路径集合,发现我想要跳转的路径并不在这个数组中,我尝试的另外一个路径却在这里面,于是我又尝试了几个在这个数组中以及不在这个数组中的路径,发现原因确实如此,就是因为pages中没有这个路径,才会导致同一个appid不同的路径为什么会出现"invalid weapp pagepath"这个错误信息,看来是我们开发组的某一个小伙伴粗心了,没有将路径都写在pages里面。
到这里,整个功能圆满完成,今晚准备奖励自己一下,准点下班~