1. openid is missing
    微信小游戏虚拟支付米大师接口返回40101 openid missing的情况
    如果你检查了你的openid确实是传给了米大师的接口的话。主要是因为请求参数格式的问题,在微信的文档中其实他是要求了参数的格式的,在服务端的虚拟支付接口中,文档的最后,他写了POST 数据格式:JSON。
    也就是说我们给他的参数必须是JSON格式的,否则就会出现openid missing的情况。
  2. errcode:41001,errmsg:access_token missing 和 40001 access_token is invalid or not latest
    微信小游戏虚拟支付米大师接口返回41001 access_token missing 和 40001 token失效的情况
    在确保你确实将accessToken传给了米大师的接口后,我就在想,为什么微信给的接口后面直接给了一个access_token=ACCESS_TOKEN这样的参数,一开始我以为这个token的参数是一个标识什么的,我们只需要原封不动的使用这个接口就好了。
    但是其实在我们做mp_sig加密的时候,这个token值是需要加到加密参数里面去的,就很奇怪,为什么给我们的接口后有一个token,我们的参数里又有一个token。这个问题一开始没有想通。
    并且我尝试过将微信给我们的接口后面的access_token=ACCESS_TOKEN去掉,那么接口就会返回41001,token没找到。但是如果原封不动的话,就一直是40001,token失效。
    因为项目的原因,我们的token基本都是实时去获取的,应该说是不存在失效的。
    后来我发现这个真的是个坑,就是因为微信文档写的不清不楚的导致的。在微信给我们的接口后面加的access_token=ACCESS_TOKEN,这里面的ACCESS_TOKEN就是我们传递给接口的token值,也就是说,微信那边在我们给他们的JSON参数里是不会去取token值的,
    只在接口后面直接跟的参数token上去这个值,这就是为什么一开始在把这个直接跟在后面的参数去掉会返回token找不到,因为他根本不在我们PSOT过去的JSON参数里取token。
    而参数失效就是因为我没有把token的值加在后面,以为是原封不动的用这个接口就好了。

最后还要说一点,token是需要参与到mp_sig加密的,所以在加密的时候记得把token加上去,不止是从传给微信的JSON参数。

最后其实微信要求的接口URL应该是(已查询游戏币为例):https://api.weixin.qq.com/cgi-bin/midas/getbalance?access_token=(这里就是你的token值) 参数的话就是JSON格式的:

{
 “openid”:“odkx20ENSNa2w5y3g_qOkOvBNM1g”,
 “appid”:“wx1234567”,
 “offer_id”:“12345678”,
 “ts”:1507530737,
 “zone_id”:“1”,
 “pf”:“android”,
 “sig”:“d1f0a41272f9b85618361323e1b19cd8cb0213f21b935aeaa39c160892031e97”,
 “mp_sig”:“ff4c5bb39dea1002a8f03be0438724e1a8bcea5ebce8f221f9b9fea3bcf3bf76”
 }


(所以从微信给我们的参数例子里就看出来,这里根本没有token,大爷的,微信的文档是真的坑啊,特别是对服务端)