2.1.4.常见问题

优质
小牛编辑
139浏览
2023-12-01

修订记录

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
  • 如果请求测试环境出现了这个错误,有可能是因为没有发布测试版本造成,建议至少发布一次测试环境版本(有开发者在虚拟环境上开发,从来没有发布过测试版本,这种情况下也会出现“gameid not found”的错误)

请求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

请求apollo_game_item_proxy返回"-13200"怎么解决?

  • 访问测试环境出现此问题,请检查是否未在hudong.qq.com平台配置道具
  • 访问正式环境出现此问题,请检查是否未在hudong.qq.com平台将测试道具申请上架

请求apollo_game_item_proxy返回"-13104/36014/36017"怎么解决?

  • 并发写同一个用户的道具信息会出现此类冲突,请避免并发对同一个用户发起多次道具赠送或扣减操作,建议对同一个用户的道具写操作,按同步串行方式调用。