# midas.pay
本接口应在服务器端调用,详细说明参见服务端API。
本接口支持云调用。需开发者工具版本 >=
1.02.1904090
(最新稳定版下载),wx-server-sdk
>=0.4.0
扣除游戏币。开通了虚拟支付的小游戏,可以通过本接口扣除某个用户的游戏币。 由于可能存在接口调用超时或返回系统失败,但是游戏币实际已经扣除的情况,所以当该接口返回系统失败时,可以用相同的bill_no再次调用本接口,直到返回非系统失败为止,不会重复扣款,也可以调用取消支付接口取消本次扣款。
调用方式:
# HTTPS 调用
# 正式环境
POST https://api.weixin.qq.com/cgi-bin/midas/pay?access_token=ACCESS_TOKEN
# 沙箱环境
POST https://api.weixin.qq.com/cgi-bin/midas/sandbox/pay?access_token=ACCESS_TOKEN
# 请求参数
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
openid | string | 是 | 用户唯一标识符 | |
appid | string | 是 | 小程序 appId | |
offer_id | string | 是 | 米大师分配的offer_id | |
ts | number | 是 | UNIX 时间戳,单位是秒 | |
zone_id | string | 是 | 游戏服务器大区id,游戏不分大区则默认zoneId ="1",String类型。如过应用选择支持角色,则角色ID接在分区ID号后用"_"连接。 | |
pf | string | 是 | 平台 安卓:android | |
user_ip | string | 否 | 用户外网 IP | |
amt | number | 是 | 扣除游戏币数量,不能为 0 | |
bill_no | string | 是 | 订单号,业务需要保证全局唯一;相同的订单号不会重复扣款。长度不超过63,只能是数字、大小写字母_- | |
pay_item | string | 否 | 道具名称 | |
app_remark | string | 否 | 备注。会写到账户流水 | |
sig | string | 是 | 以上所有参数(含可选最多11个)+uri+米大师密钥,用 HMAC-SHA256签名,详见 virtual-payment#签名计算算法 | |
access_token / cloudbase_access_token | string | 是 | 接口调用凭证 |
# 返回值
# Object
返回的 JSON 数据包
属性 | 类型 | 说明 |
---|---|---|
errcode | number | 错误码 |
errmsg | string | 错误信息 |
bill_no | string | 订单号,有效期是 48 小时 |
balance | number | 预扣后的余额 |
used_gen_amt | number | 本次扣的赠送币的金额 |
errcode 的合法值
值 | 说明 | 最低版本 |
---|---|---|
0 | 请求成功 | |
-1 | 系统繁忙,此时请开发者稍候再试 | |
90010 | 用户未登录或登录态已过期 | |
90011 | sig签名错误 | |
90012 | 订单已存在 | |
90013 | 余额不足 | |
90017 | 没有调用接口的权限 | |
90018 | 参数错误 |
# POST 数据格式:JSON
{
"openid":"odkx20ENSNa2w5y3g_qOkOvBNM1g",
"appid":"wx1234567",
"offer_id":"12345678",
"ts":1507530737,
"zone_id":"1",
"pf":"android",
"amt":123,
"bill_no":"BillNo_123",
"sig":"f705c7351830125282ffc6d3c22c81db19b50a748f60f7c8f267e59152941d83",
}
# 云调用
云调用是微信云开发提供的在云函数中调用微信开放接口的能力,需要在云函数中通过
wx-server-sdk
使用。
# 正式环境
openapi.midas.pay
# 沙箱环境
openapi.midas.paySandbox
需在
config.json
中配置midas.pay
API 的权限,详情
# 请求参数
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
openid | string | 是 | 用户唯一标识符 | |
appid | string | 是 | 小程序 appId | |
offerId | string | 是 | 米大师分配的offer_id | |
ts | number | 是 | UNIX 时间戳,单位是秒 | |
zoneId | string | 是 | 游戏服务器大区id,游戏不分大区则默认zoneId ="1",String类型。如过应用选择支持角色,则角色ID接在分区ID号后用"_"连接。 | |
pf | string | 是 | 平台 安卓:android | |
userIp | string | 否 | 用户外网 IP | |
amt | number | 是 | 扣除游戏币数量,不能为 0 | |
billNo | string | 是 | 订单号,业务需要保证全局唯一;相同的订单号不会重复扣款。长度不超过63,只能是数字、大小写字母_- | |
payItem | string | 否 | 道具名称 | |
appRemark | string | 否 | 备注。会写到账户流水 | |
sig | object | 是 | 签名,可使用 cloud.signature 方法计算 |
# 返回值
# Object
返回的 JSON 数据包
属性 | 类型 | 说明 |
---|---|---|
errCode | number | 错误码 |
errMsg | string | 错误信息 |
billNo | string | 订单号,有效期是 48 小时 |
balance | number | 预扣后的余额 |
usedGenAmt | number | 本次扣的赠送币的金额 |
errCode 的合法值
值 | 说明 | 最低版本 |
---|---|---|
0 | 成功 |
# 异常
# Object
抛出的异常
属性 | 类型 | 说明 |
---|---|---|
errCode | number | 错误码 |
errMsg | string | 错误信息 |
errCode 的合法值
值 | 说明 | 最低版本 |
---|---|---|
-1 | 系统繁忙,此时请开发者稍候再试 | |
90010 | 用户未登录或登录态已过期 | |
90011 | sig签名错误 | |
90012 | 订单已存在 | |
90013 | 余额不足 | |
90017 | 没有调用接口的权限 | |
90018 | 参数错误 |
# SDK 调用示例
// cloud = require('wx-server-sdk')
// ...
// 方法返回 Promise
cloud.openapi.midas.pay({
openid: OPENID,
appid: APPID,
offerId: 111111111111,
ts: parseInt(+new Date / 1000),
zoneId: '1',
pf: 'android',
amt: 1,
billNo: 'bill_abc_1',
sig: cloud.signature({
type: 'midas',
params: ['openid','appid','offerId','ts','zoneId','pf', 'amt', 'billNo'],
secret: 'xxxxxxxxxxxx',
})
})