tencent cloud

腾讯云超级应用服务

动态与公告
【2025年1月2日】关于腾讯云小程序平台更名为腾讯云超级应用服务的公告
控制台更新动态
Android SDK 更新动态
iOS SDK 更新动态
Flutter 更新动态
IDE 更新动态
基础库更新动态
产品简介
产品概述
产品优势
应用场景
购买指南
计费概述
按量计费(后付费)
续费指引
停服说明
快速入门
套餐管理
概述
控制台账号管理
存储配置
加速配置
品牌化配置
平台功能
控制台登录
用户和权限体系
小程序管理
小游戏管理
应用管理
商业化
平台管理
用户管理
团队管理
运营管理
安全中心
代码接入指引
Demo 及 SDK 获取
Android
iOS
Flutter
App 服务端接入指南
GUID 生成规则
小程序开发指南
小程序介绍与开发环境
小程序代码组成
指南
框架
组件
API
服务端
JS SDK
基础库
IDE 使用指南
小游戏开发指南
指南
API
服务端
实践教程
小程序登录实践教程
小程序订阅消息实践教程
支付相关实践教程
广告接入实践教程
小游戏订阅消息实践教程
相关协议
数据处理和安全协议

技术手册

PDF
聚焦模式
字号
最后更新时间: 2025-04-29 18:40:52

背景

本文旨在针对游戏内不同的付费场景提供选型指导,以及在开发者构建支付服务中的一些关键细节提供建议,期望与开发者一道共同努力提升玩家的付费体验。

术语定义

道具:游戏内的虚拟道具,用于增强游戏体验或者提供额外的游戏服务。比如:游戏内的武器、装备、资源。
控制台:开发者使用小游戏账号登录后的管理控制台。

流程说明

1. 开发流程

1.1 付费场景

游戏内的付费场景可以分成两大类:游戏币和道具直购。当前仅支持道具直购的场景。
道具直购场景
玩家通过网上支付购买道具的场景。比如购买游戏内的武器、装备、资源等。

1.2 支付能力

道具直购能力

道具直购能力即玩家通过网上支付直接购买道具,小程序平台(openServer)通过后端的可靠回调通知开发者发货,由开发者负责道具发放的一种支付能力。开发者可以通过 wx.requestMidasPaymentGameItem 为玩家提供购买道具的入口,扣费成功后平台主动推送道具发货消息。(mini_game_pay_goods_deliver_notify)到开发者的服务端,通知开发者进行道具的发放。

2. 小游戏支付使用建议

2.1 道具直购场景使用道具直购能力

道具直购能力发货由小程序平台(openServer)通知开发者,正常情况下扣费成功后,即会通过服务端消息推送通知到开发者,极端情况下可能有一定的通知延迟。 特别提醒:
1. 同样的发货请求(outTradeNo),可能因为网络原因,会请求多次。我们在有限时间内尽量保证触达一次,直到明确返回发货成功为止。
2. 针对重复的请求,开发者需要自行保证只发货一次,并且回包需要和第一次一样返回发货成功。
3. 通知周期:15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h。
4. 小游戏开发者必须要在控制台小游戏商业化-虚拟支付-基础配置中配置发送推送配置,以及在商业化-虚拟支付-道具管理中开启道具发货推送才能收到回调请求。详细流程可查看 控制台小游戏道具直购流程
必须实现:
发货消息会尽可能及时、尽可能不漏的通知到开发者服务端,若出现网络异常或者非发货成功的应答,我们会进行重试,开发者的服务端可能会收到重复的发货消息,即相同的订单 id 被推送多次。开发者需要确保实现道具发货的幂等,相同的订单 id(outTradeNo)多次被通知发货时只发货一次。
发货消息通道需要做好请求校验及相关密钥的妥善保管,避免因为密钥泄露导致请求来自恶意第三方。

2.2 通用建议

2.2.1 服务端API域名选择
开发者可以根据自己的服务器部署情况,选择最佳的接入域名(延时更低,稳定性更高)。除此之外,可以将其他接入域名用作容灾用途,当网络链路发生故障时,可以考虑选择备用域名来接入。请开发者使用域名进行 API 接口请求,不建议使用 IP 作为访问。对于支付类业务而言,建议考虑就近接入以及做好异地容灾域名切换的策略。
2.2.2 接口调用凭证(access_token)的建议
为了保证安全性,获取 access_token 的 AppSecret 以及 access_token 本身不要泄露到游戏客户端或者游戏服务端以外的其他地方。access_token 获取方式可查看 小程序服务端
2.2.3 登录态与会话密钥 session_key(signature)的注意事项
支付相关 API 涉及用户签名的地方(signature 参数),都需要用到 session_key,session_key 是玩家在使用小游戏期间由小程序平台服务端(openServer)分配,用于 superapp 后端和游戏服务端之间验证身份、安全通信的一种凭据,是对用户数据进行 加密签名 的密钥。分别存储于小程序平台服务端(openServer)、游戏服务端,在调用 wx.login 时可能触发 session_key 的重新生成,为了保证游戏服务端存储的 session_key 和小程序平台服务端(openServer)的一致,开发者需要使用 wx.login 获得的 code 去换最新的 session_key。
注意事项如下:
开发者实现登录的流程可参考 小程序登录,session_key 主要用于小程序平台服务端(openServer)和游戏服务端之间验证身份。游戏前端和游戏服务端之间的权限验证,开发者应自己实现自定义登录态。当开发者在实现自定义登录态时,可以考虑以 session_key 有效期作为自身登录态有效期,也可以实现自定义的时效性策略。
为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小游戏,也不应该对外提供这个密钥。
wx.login 调用时,用户的 session_key 可能会被更新而致使旧 session_key 失效(刷新机制存在最短周期,如果同一个用户短时间内多次调用 wx.login,并非每次调用都导致 session_key 刷新)。
session_key 目前失效时间为“天”级别,开发者需要在服务端维护最新换取的 session_key。
wx.login 建议不要频繁进行调用,此类接口一般会调用到平台侧后台系统资源,为保护系统,同时防止用户资源被滥用,开发者需要对此类接口做适度的频率限制,不能无节制的调用。小游戏前端应控制 wx.login 的调用频率,禁止短期内的多次自动重试,可以通过本地存储记录相关调用状态来实现,若检测到多次自动进入重新登录态流程,可以考虑交由玩家决策:弹出对话框提示玩家,重试、重启小程序或者清理缓存后再试。同时,开发者应该针对这类问题增加告警,排查代码逻辑是否有问题。以下任意条件满足则应触发登录(调用 wx.login):
首次登录
游戏服务端存储的 session_key 失效,例如:调用支付接口返回 -15012(signature 签名错误)和 -15015(session_key 过期)时,应通知游戏前端重走 wx.login 流程。后台可以通过 checkSessionKey 校验。
游戏自定义登录态失效。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈