# 微信小游戏商城与拼团

# 一、微信小游戏商城介绍

# 功能概述

为帮助开发者进行道具运营与活动拉收,微信小游戏提供小游戏商城能力。(仅支持虚拟支付类游戏接入)
使用小游戏商城,可支持实现:游戏外支付、更灵活支付、多笔合并支付、拼团支付等功能。
运用好这些能力能够帮助游戏方提升付费转化和 ARPPU 值。

# 功能入口

路径:微信公众平台(mp.weixin.qq.com)-虚拟支付-基本配置-商城管理
开发者可以根据需求将已发布的道具在“商城管理”模块上架至你的小游戏商城

# 功能介绍

模块 介绍 描述
基础功能 道具介绍 支持配置道具名称、道具描述、道具图片
定价 支持设置原价、售卖价,会自动换算折扣(定价单位为人民币/元)
上下架 支持配置上架时间,定时上下架等
库存/限购 支持配置库存总量和限购次数(支持周、日、永久等限购规则)
优势功能 更灵活下单 支持更自由,更大额度的支付档位(用户单笔上限6千,单日9千,后续提升请留意通知)
合并下单 支持单道具合并支付(如6元道具,可一次性下单10份)
游戏圈入口 支持游戏圈开通商城专属入口
私域曝光 支持配置入口链接,可发布到社群、公众号等私域场景
专属活动 接入商城还有机会参与专属的主题/促销/裂变活动

# 二、拼团能力介绍

# 功能概述

为帮助开发者进行道具活动运营,微信小游戏商城提供拼团能力。
开发者可以选择在商城中上架的商品配置拼团活动(注意:仅限商城内商品)。
配置后,当用户在商城中看到拼团活动商品时,可以选择拼团购买,当组团成功时,可获得优惠价格。

# 功能入口

路径:微信公众平台(mp.weixin.qq.com)-虚拟支付-活动配置-创建拼团活动
创建流程:
① 设置活动名称
② 点击“添加拼团物品”:所选的拼团物品必须已在商城中完成配置上线
③ 设置“折扣”与“上架时间”:拼团成功的商品将享受折扣价格。活动商品上架时间需早于可成团时间,下架时间晚于可成团时间。
④ 设置“可成团时间”:即活动的持续时间,可成团时间需要在活动商品上架时间以内。在活动期间用户可对活动商品进行拼团购买、享优惠价格。在活动期间未成团的用户、将示为拼团失败并原路退款。
⑤“单个团有效时间”:即从团主(发起拼团的用户)支付完成后,成功成团的时间限制。若在时间范围内未成功,将示为拼团失败并原路退款。
⑥“拼团满员人数”:成团的人数要求
⑦“单用户是否可反复参团”:如选择“是” ,第一个团结束后,可以重复发起或参团。 如选择“否”,则不可以重复发起。

# 三、微信小游戏商城接入指南

# MP 配置流程

“配置道具-上架商城-完善发货配置”,仅需三步简单配置
① 使用道具直购能力
在“虚拟支付-基本配置-道具配置”中,基于道具直购能力,配置特定的道具信息。同时,配置好的道具也可以在游戏内使用,
虚拟支付 道具直购 | 微信开放文档

② 配置商城上下架
在“虚拟支付-基本配置-商场管理”中配置道具的上下架,输入在道具直购页面发布成功的道具 id,可自动拉取道具信息,同时开发者可以补充相关商场描述和设定道具限量策略。

③ 完善消息推送与发货
第一步配置接受发货消息的后台服务器地址,具体可参考文档步骤小游戏消息推送

第二步开启消息推送开关,游戏内直购道具在“虚拟支付-基本配置-道具配置”开启,商城道具在“虚拟支付-基本配置-商场管理”开启,开启前会进行一个小测试,会发送 mock 数据通知开发者,开发者需要正确回包。

# 开发者开发流程

# 支付类订阅事件公共说明

所有事件基础结构如下

字段 类型 说明
CreateTime Number 消息发送时间
MsgType String 消息类型,道具发货场景固定为:event
CreateTime Number 消息发送时间
Event String 事件类型
与商城有关的事件类型
(1)拉取用户最近玩过的游戏角色数据
minigame_query_recent_role_list
(2)代币类道具商城发货通知
minigame_h5_coin_deliver_notify
(3)道具直购类商城发货通知
minigame_h5_goods_deliver_notify
MiniGame Object 具体消息内容,见MiniGame

MiniGame

字段 类型 说明
Payload String 携带的具体内容,格式为 json,具体内容如下表格 Payload
(因为这里需要对消息内容统一签名,所以统一把消息内容设计成 json 格式)
PayEventSig String 支付请求签名算法说明(PayEventSig)

# 拉取用户最近玩过的游戏角色数据(Event=minigame_query_recent_role_list)

在商城场景下,平台侧会拉取用户游戏角色信息,用于用户在商城购买道具/发放奖励时的分区选择,示意场景及交互如下:

注意:
(1)拉取的分区名/角色名均会经过安全审核,如果审核出现问题,违规词会用特殊处理
(2)事件为实时通知
请求参数
Payload

字段 类型 说明
OpenId String 用户 openid
NeedRoleNum Number 需要的最近玩过的角色数量,不会超过 20 个
ProductId Number 道具 id(仅道具购买页传入)
GoodsPrice Number 道具价格(仅道具购买页传入)

返回参数

字段 类型 是否必填 说明
ErrCode Number 发送状态。0:成功,其他:失败
ErrMsg String 错误原因,用于调试。在 errcode 非 0 的情况下可以返回
RecentPlayedRoleList Array.<UserRoleInfo> 最近玩过的角色列表

UserRoleInfo

字段 类型 说明
RoleId String 游戏角色 id 标识
RoleName String 游戏角色名
ZoneInfoList Array.<ZoneInfo> 用户角色对应的分区,可能存在大区/中区/小区等,按由大到小的顺序
PayParam PayParam 米大师下单需要的支付参数 (请求参数若带道具 id,此参数必填,用来下单支付)

ZoneInfo

字段 类型 说明
ZoneId String 自定义分区 id
ZoneName String 自定义分区名

PayParam

字段 类型 说明
MidasZoneId String 米大师分区 id
Attach String 附加数据,在查询 API 和通知中原样返回,可作为自定义参数使用

注意:这里游戏角色的分区若存在层级概念,请按照实际的层级填写,例如:用户在电信一区-测试服-1 号线,请按由大到小的顺序 分为三层(不同游戏层次数量可以不一样)返回,例如

{
    "ZoneInfoList":[
        {
            "ZoneId":"testbigzoneid",
            "ZoneName":"电信一区"
        },
        {
            "ZoneId":"testmiddlezoneid",
            "ZoneName":"测试服"
        },
        {
            "ZoneId":"testsmallzoneid",
            "ZoneName":"一号线"
        }
    ]
}

切勿手动合成一层结构,以下为反面案例

{
    "ZoneInfoList":[
        {
            "ZoneId":"testzoneid",
            "ZoneName":"电信一区-测试服-1号线"
        }
    ]
}

JSON 格式示例
请求

{
	"CreateTime": 1583202606,
	"MsgType": "event",
	"Event": "minigame_query_recent_role_list",
	"MiniGame": {
		"Payload": "{\"OpenId\":\"to_user_openid\",\"NeedRoleNum\":10,\"ProductId\":\"xxx\",\"GoodsPrice\":123}",
		"PayEventSig": "f749f67b751fa80f27ddc0b7c8d2821aeda162ea22b323cd64a2c8056c2736f0"
	}
}

成功返回

{
  "ErrCode":0,
  "ErrMsg":"success",
  "RecentPlayedRoleList":[
      {
          "RoleId":"testroleid",
          "RoleName":"小游戏开发者",
          "ZoneInfoList":[
              {
                  "ZoneId":"testbigzoneid",
                  "ZoneName":"电信一区"
              },
              {
                  "ZoneId":"testmiddlezoneid",
                  "ZoneName":"测试服"
              },
              {
                  "ZoneId":"testsmallzoneid",
                  "ZoneName":"一号线"
              }
          ],
          "PayParam":{
              "MidasZoneId":"1",
              "Attach":"{\"custom_data\":\"xxx\"}"
          }
      }
  ]
}

失败返回

{"ErrCode":99999,"ErrMsg":"internal error"}

# 道具直购类商城发货通知(Event=minigame_h5_goods_deliver_notify)

虚拟支付 道具直购|微信开放文档道具发货消息协议|

点击咨询小助手