常见问题

修订记录

2018-09-19:初稿完成。

FAQ

请求openapi返回"Param gameid error!"怎么解决?

  • 检查发起请求的方法是否为POST
    • 只能使用POST方法发起请求
  • 检查发起请求的Content-Type头域
    • 必须携带Content-Type头域,并且取值为application/x-www-form-urlencoded
  • 检查发起请求的参数是否为application/x-www-form-urlencoded格式并正确携带

    • 以key1=value1&key2&value2的格式描述,比如"appid=1&gameid=2017&ts=1111&openid=222&openkey=1111&sig=xxxxxxxx&rnd=1512981097",不支持json格式
    • 请求参数填充在POST的body,不能放在URI中

      请求openapi返回"gameid not find!"怎么解决?

  • 检查请求的域名环境,只有提交了正式上线申请,审批通过,并版本状态为已经上线的游戏才可以请求正式环境;解决方式为请求测试环境域名,或上线游戏

  • 检查是否配置了APPKEY,参见自建后台开发指引中,"如何获取APPID和APPKEY"的章节;解决方法为编辑设置一个APPKEY

    请求openapi返回"sign fail!"怎么解决?

  • 排除以下常见问题

    • 构造源串时注意URI不含host,如/openapi/apollo_verify_openid_openkey,而不应该是http://openapi-test.hudong.qq.com/openapi/apollo_verify_openid_openkey
    • 构造源串时,没有将key排序后,再将(key=value)用&拼接起来
    • 构造密钥时,没有将appkey后加“&”
    • 某些语言的URLEncode系统方法在进行URL编码时,并没有按照现行的URL编码规则进行。
      • 签名验证时,要求对字符串中除了“-”、“_”、“.”之外的所有非字母数字字符都替换成百分号(%)后跟两位十六进制数。十六进制数中字母必须为大写。
      • 某些语言的urlencode方法会把“空格”编码为“+”,实际上应该编码为“%2B”。这也将生成错误的签名,导致签名通不过验证。
    • 注意sha1的输出,必须是二进制格式;以php为例,hash_hmac的最后一个参数必须为true
  • 按照算法说明里面的代码样例排查原因,使用签名检查工具逐步检查

    请求openapi返回"Uin/Skey auth fail!"怎么解决?

  • 检查请求的openid和openkey参数是否为空

  • 检查请求的openid和openkey参数是否缓存了较长时间,应使用引擎中获取的openid和openkey
  • 检查请求的appid是否是游戏对应的appid,参见自建后台开发指引中,"如何获取APPID和APPKEY"的章节确认appid

原文: https://hudong.qq.com/docs/engine/server/thrid/api_doc/faq.html