一、购买商品
端游前端根据QQ游戏大厅传递的 openid、openKey、pfKey,请求端游后台,获取米大师下单url,也就是 goodstokenurl,再请求QQGame支付页(https://qqgame.qq.com/midaspay/?param=xxx),由 QQgame 拉起米大师支付。
参数说明
param
参数名称 |
含义 |
action |
必填,固定值:buy |
appid |
必填,应用id |
goodstokenurl |
必填,扣费openapi返回的url地址(如:url_params),获取方式见 open官网api说明:https://wikinew.open.qq.com/#/iwiki/940617555 |
sandbox |
是否沙箱环境(1:是,0:否) 沙箱环境自助Q币添加Url: cpay.qq.com/qz/go/18218
充值步骤: 1先以测试号登录open.qq.com 2打开上述url即可进行充值 |
openid |
必填,登录态openid |
openkey |
必填,登录态openkey |
其他帮助文档
请求业务后台接口buygoods,获取米大师下单url:
https://wiki.open.qq.com/wiki/v3/pay/buy_goods
参数样例(王国印记充值)
王国印记充值,如下:
param
```
{
"action": "buy",
"appid": 1109981688,
"goodstokenurl": "/v1/r/1109981688/mobile_goods_info?token_id=32E897DBE2D202E3C3B848E1A866A49E18880&transaction_id=32E897DBE2D202E3C3B848E1A866A49E18880&out_trade_no=&new_cpay=1&offer_type=0",
"openid": "F855D0937EA8923653A19ECD5497CFA0",
"openkey":"2A8E06A921A923EC4E2F544DBAE6A0D9"
}
```
二、开通蓝钻
端游前端直接请求QQGame支付页(https://qqgame.qq.com/midaspay/?param=xxx),传递action和appid,由QQGame拉起开通蓝钻服务支付页面。
参数说明
param
参数名称 |
含义 |
action |
必填,固定值:openVip |
appid |
必填,应用id |
openid |
必填,登录态openid |
openkey |
必填,登录态openkey |
参数样例(王国印记开通蓝钻)
以王国印记为例,如下:
param
```
{
"action": "openVip",
"appid": 1109981688,
"openid": "F855D0937EA8923653A19ECD5497CFA0",
"openkey":"2A8E06A921A923EC4E2F544DBAE6A0D9"
}
```
三、注意事项
获取openid、openKey、pfKey方法
遵从启动客户端游戏的规则,之前命令行传递三个参数,为ID,Key,PROCPARA。现在增加PfKey的命令行参数。具体命令行参数示例如下:
ID=CE3DB00B54C009829C79B25482704A21,Key=951A3503BF3B82C0F3EA30F7807036FC,PfKey=BB999F31FF71059F404903F62DABC763,PROCPARA=ThirdGame_3_17060_15574484
param参数编码
param参数需要提前进行URL编码,注意编码之后的param,一定不能包含斜线“/”,以免浏览器解析异常。
Javascript版参考案例
param=encodeURIComponent(JSON.stringify(param))
举个例子:
param ={"action":"buy","appid":1109981688,"goodstokenurl":"/v1/r/1109981688/mobile_goods_info?token_id=32E897DBE2D202E3C3B848E1A866A49E18880&transaction_id=32E897DBE2D202E3C3B848E1A866A49E18880&out_trade_no=&new_cpay=1&offer_type=0","openid":"F855D0937EA8923653A19ECD5497CFA0","openkey":"2A8E06A921A923EC4E2F544DBAE6A0D9"}
经过 encodeURIComponent(JSON.stringify(param)) 编码之后,为
param=%7B%22action%22%3A%22buy%22%2C%22appid%22%3A1109981688%2C%22goodstokenurl%22%3A%22%2Fv1%2Fr%2F1109981688%2Fmobile_goods_info%3Ftoken_id%3D32E897DBE2D202E3C3B848E1A866A49E18880%26transaction_id%3D32E897DBE2D202E3C3B848E1A866A49E18880%26out_trade_no%3D%26new_cpay%3D1%26offer_type%3D0%22%2C%22openid%22%3A%22F855D0937EA8923653A19ECD5497CFA0%22%2C%22openkey%22%3A%222A8E06A921A923EC4E2F544DBAE6A0D9%22%7D
Python版参考案例
param=urllib.quote(json.dumps(param, ensure_ascii=False, sort_keys=True, separators=(',', ':')))
感谢地鼠传奇提供以下案例(伪协议):
param={
"action": "buy",
"appid": self.get_app_id(),
"goodstokenurl": response["url_params"],
"openid": self.get_openid(),
"openkey":self.get_openkey()
}
if options.mode == "development":
param["sandbox"] = 1
# 确保生成的json没有空格,否则QQ大厅前端解析时会有兼容问题
ps = json.dumps(param, ensure_ascii=False, sort_keys=True, separators=(',', ':'))
redirecturl ="https://qqgame.qq.com/midaspay/?%s" % urllib.quote(ps)
客户端游戏调用支付页方法
支付页是一个web页面,支持浏览器 chrome > 43,IE >= 8。url地址为: https://qqgame.qq.com/midaspay/?param=${参数},当游戏方有能力在游戏内打开web页面时,可以直接打开。另外,也可以使用大厅的能力打开支付页,方法如下:
使用websocket(推荐)
使用大厅伪协议打开
qqgameprotocol:///openembedwebdialog Caption=${窗口标题} Width=${窗口宽度} Height=${窗口高度} New=1 Url=${支付链接}
窗口标题:字符串
窗口宽度和高度:整形数字
由于米大师的支付界面大小是690*590,故游戏方在接入支付页时,推荐窗口大小设置为宽800高680
支付链接:
qqgameprotocol:///openembedwebdialog Caption=支付 Width=800 Height=680 New=1 Url=https://qqgame.qq.com/midaspay/?param=${参数}
注意:如果游戏内已经使用了IE控件加载商品页,不建议再使用伪协议打开支付页,原因是在IE控件中,页面调用伪协议可能会被拦截,导致没有响应。此拦截跟用户电脑上IE设置有关。
四、常见问题
订单不存在,请重试
goodstokenurl有15分钟的有效时间,超时使用,将会提示以下错误:
appid不能为空
原因param参数编码不正确,导致传递到浏览器时,参数值缺失,请参考【客户端游戏调用支付页方法】
支付页上的图片logo显示不出
支付页上图片logo的地址是游戏方在获取米大师下单url(https://wiki.open.qq.com/wiki/v3/pay/buy_goods)时传递的 goodsurl 参数,请确保这个图片在测试环境和外网都能访问。
使用伪协议打开支付页没有响应
如果游戏内已经使用了IE控件加载商品页,不建议再使用伪协议打开支付页,原因是在IE控件中,页面调用伪协议可能会被拦截,导致没有响应。此拦截跟用户电脑上IE设置有关。
使用伪协议打开支付购买窗口崩溃
出现这种情况,请参考《param参数编码》时的案例,注意编码之后,应能正常看到action,appid,goodstokenurl这些关键字符。导致崩溃的示例: