跳到主要内容

道具直购

接口列表

道具发货消息协议

接入消息推送能力,在虚拟支付-总览-开通条件中配置回调地址 url

注意
  1. 同样的发货请求(outTradeNo),可能因为网络原因,会请求多次。我们在有限时间内尽量保证触达一次,直到明确返回发货成功为止
  2. 针对重复的请求,开发者需要自行保证只发货一次,并且回包需要和第一次一样返回发货成功
  3. 通知周期:180s/180s/180s

请求参数

字段类型说明
ToAppIdstring小游戏appid
CreateTimenumber消息发送时间
MsgTypestring消息类型,道具发货场景固定为:event
Eventstring事件类型
MiniGameobject道具直购发货参数,见下文

MiniGame

字段类型说明
Payloadstring携带的具体内容,格式为JSON 字符串,具体内容如下表格 Payload(因为这里需要对消息内容统一签名,所以统一把消息内容设计成json格式)
PayEventSigString消息内容签名,见签名算法说明

Payload(JSON)

字段类型说明
Uuidstring接收道具的玩家 uuid
OutTradeNostring订单号
orderSnstring内部订单号
TransactionIdstring第三方订单流水号
GoodsInfoobject发货道具

GoodsInfo

字段类型说明
ProductIdstring游戏道具id标识
Quantitynumber购买道具数量
ActualPricenumber物品实际支付价格(单位:分)
Attachstring透传数据

返回参数

字段类型是否必填说明
ErrCodenumber发送状态。0:成功,其他:失败
ErrMsgstring错误原因,用于调试。在 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