道具直购
接口列表
- 支付API: mgtv.requestPaymentGameItem
道具发货消息协议
接入消息推送能力,在虚拟支付-总览-开通条件中配置回调地址 url
注意
- 同样的发货请求(outTradeNo),可能因为网络原因,会请求多次。我们在有限时间内尽量保证触达一次,直到明确返回发货成功为止
- 针对重复的请求,开发者需要自行保证只发货一次,并且回包需要和第一次一样返回发货成功
- 通知周期:180s/180s/180s
请求参数
字段 | 类型 | 说明 |
---|---|---|
ToAppId | string | 小游戏appid |
CreateTime | number | 消息发送时间 |
MsgType | string | 消息类型,道具发货场景固定为:event |
Event | string | 事件类型 |
MiniGame | object | 道具直购发货参数,见下文 |
MiniGame
字段 | 类型 | 说明 |
---|---|---|
Payload | string | 携带的具体内容,格式为JSON 字符串,具体内容如下表格 Payload(因为这里需要对消息内容统一签名,所以统一把消息内容设计成json格式) |
PayEventSig | String | 消息内容签名,见签名算法说明 |
Payload(JSON)
字段 | 类型 | 说明 |
---|---|---|
Uuid | string | 接收道具的玩家 uuid |
OutTradeNo | string | 订单号 |
orderSn | string | 内部订单号 |
TransactionId | string | 第三方订单流水号 |
GoodsInfo | object | 发货道具 |
GoodsInfo
字段 | 类型 | 说明 |
---|---|---|
ProductId | string | 游戏道具id标识 |
Quantity | number | 购买道具数量 |
ActualPrice | number | 物品实际支付价格(单位:分) |
Attach | string | 透传数据 |
返回参数
字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
ErrCode | number | 是 | 发送状态。0:成功,其他:失败 |
ErrMsg | string | 否 | 错误原因,用于调试。在 errCode 非0 的情况下可以返回 |
JSON格式示例
{
"ToAppId": "",
"CreateTime": 1742873817,
"MsgType": "event",
"Event": "minigame_game_pay_goods_deliver_notify",
"MiniGame": {
"Payload": "{\"Uuid\":\"to_user_uuid\",\"GoodsInfo\":{\"ProductId\":\"id_100001\",\"ActualPrice\":10,\"Quantity\":1}}",
"PayEventSig": "77e06128fa4291a8d89c93ed5d3648790662d8952f2475e4207c0e9791c60865"
}
}
成功返回
{"ErrCode":0,"ErrMsg":"Success"}
失败返回
{"ErrCode":99999,"ErrMsg":"internal error"}
签名算法说明
PayEventSig
参数的签名算法,使用小游戏开发设置中的 AppSecret
对支付的请求进行签名,代表请求经过开发者服务端的支付模块发起。签名算法伪代码为:
pay_event_sig = to_hex(hmac_sha256(app_secret, event + '&' + payload))
可以参考以下python示例中的 gen_pay_event_sig
实现,其中:
event
为推送的事件类型,如:minigame_game_pay_goods_deliver_notify
app_secret
为当前小游戏的AppSecret
,从开放平台小游戏开发设置页面获取payload
为本次推送的数据,对应minigame
结构内的payload
,参考具体推送的请求参数说明
签名计算如下:
#!/usr/bin/python
# -*- coding: utf-8 -*-
""" PayEventSig签名算法计算示例 """
import hmac
import hashlib
""" pay_event_sig签名算法
Args:
app_secret - 小游戏的 AppSecret
event - 事件类型 例如:minigame_game_pay_goods_deliver_notify
payload - 事件对应包体,通知消息中的 payload 例如 {"Uuid":"to_user_uuid","OutTradeNo":"xxxxxxx","GoodsInfo":{"ProductId":"","Quantity":1,"ActualPrice":100,"Attach":""}}
Returns:
支付请求签名pay_event_sig
"""
def gen_pay_event_sig(app_secret, event, payload):
need_sign_msg = event + '&' + payload
pay_event_sig = hmac.new(key=app_secret.encode('utf-8'), msg=need_sign_msg.encode('utf-8'),
digestmod=hashlib.sha256).hexdigest()
return pay_event_sig