麻烦大佬帮忙看一下,小程序,云托管支付的统一下单接口,报错40003 invalid openid。
环境如下:
微信云托管 : springboot-nnii
云托管全局设置>微信支付配置>配置了微信公众号wx17***7c1、微信小程序wxb***6da两个。绑定状态是已绑定。商户号是15*****。
问题如下:
小程序(还未上线),调用统一下单接口(/_/pay/unifiedorde)时,报错40003 invalid openid。
小程序传参数subMchId是商户号15*****,openId是oXh2U60ULSOi3t9rPpIQvN5E0Tw8。
但是公众号调用统一下单接口,就可以下单成功,正常返回。
公众号的subMchId也是商户号15*****,openId是,oqX-c6A_QYOJMgh2qzTTlfYK2tiE,除了openId,两个请求参数都一样。因为绑定的都是同一个商户号下。
这两个openid都是通微信号生成的,调用的服务也都是同一个接口,就不知道什么原因,为什么小程序对应的openId不存在。然后还想请问一下通过什么接口能判断小程序的openid是否在appid下?
=================解决了==================
原因:公众号和小程序部署在同一个云托管的同一台机器,而云托管下支付单时,没有要求传appid,取得是创建云托管的默认appid(我的是公众号appid),所以小程序的openid下支付单,就会报openid不存在
解决办法:
1。小程序迁到自己的云托管(验证没问题了)
2。大佬建议云托管》设置》资源复用,也适合这个场景,但我没验证过这个,应该也可以。https://developers.weixin.qq.com/miniprogram/dev/wxcloudrun/src/guide/reuse/
参考小程序的代码吧
https://developers.weixin.qq.com/miniprogram/dev/wxcloudrun/src/development/pay/order/unified.html
这个接口还没有token参数,不知道是从哪里区分的小程序还是公众号,我也不太知道我小程序的openId在系统中为什么是不存在的。看了一些资料也没发现有类似的问题。