mgtv.requestPaymentGameItem(Object object)
功能描述
发起道具直购支付请求
参数
Object object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
signData | string | 是 | 支付原串 | |
sign | string | 是 | 支付签名,见支付签名算法说明 | |
timestamp | number | 是 | 时间戳 | |
success | function | 否 | 成功的回调函数 | |
fail | function | 否 | 失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
signData
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
mode | string | 是 | 支付的类型,道具直购为 goods | |
buyQuantity | number | 是 | 购买数量 | |
productId | string | 是 | 道具ID | |
productName | string | 是 | 道具名称 | |
productDesc | string | 否 | 道具描述 | |
goodsPrice | number | 是 | 道具单价(分) | |
outTradeNo | string | 是 | 业务订单号 | |
platform | string | 否 | 平台,ios 或 android | |
attach | string | 否 | 透传数据 |
iOS 支持的支付金额
因平台限制,iOS 仅支持以下支付金额(即道具单价乘以购买数量 goodsPrice * buyQuantity
)
支付金额(单位:分) | 说明 |
---|---|
100 | 1元 |
300 | 3元 |
600 | 6元 |
800 | 8元 |
1800 | 18元 |
2400 | 24元 |
2500 | 25元 |
2800 | 28元 |
3000 | 30元 |
4000 | 40元 |
4500 | 45元 |
5000 | 50元 |
6000 | 60元 |
6800 | 68元 |
7800 | 78元 |
8800 | 88元 |
9800 | 98元 |
10800 | 108元 |
11800 | 118元 |
12800 | 128元 |
16800 | 168元 |
18800 | 188元 |
19800 | 198元 |
23800 | 238元 |
28800 | 288元 |
32800 | 328元 |
38800 | 388元 |
44800 | 448元 |
48800 | 488元 |
54800 | 548元 |
58800 | 588元 |
64800 | 648元 |
错误码
错误码 | 错误信息 | 说明 |
---|---|---|
-1 | 系统失败 | |
1 | 用户取消支付 | |
6 | 其他错误 | |
7 | 支付取消 | |
1000 | 参数错误 | |
4004 | 虚拟支付接口错误码,订单不存在 | |
4005 | 虚拟支付接口错误码,订单已失效 | |
4006 | 虚拟支付接口错误码,订单状态异常 | |
4007 | 虚拟支付接口错误码,订单不匹配 | |
4008 | 虚拟支付接口错误码,AppSecret未生成 | |
4009 | 虚拟支付接口错误码,订单退款中 | |
4010 | 虚拟支付接口错误码,暂不支持苹果订单退款 | |
4011 | 虚拟支付接口错误码,由于健康系统限制,本次支付已超过限额 | |
4016 | 虚拟支付接口错误码,未找到苹果计费点 |
示例代码
mgtv.requestPaymentGameItem({
signData: '{"mode":"goods","buyQuantity":1,"platform":"android","productId":"123","goodsPrice":10,"outTradeNo":"","attach":""}',
sign: '77e06128fa4291a8d89c93ed5d3648790662d8952f2475e4207c0e9791c60865',
timestamp: 1742540370042,
success(res) {
console.log('pay', res);
},
fail({ errMsg, errCode}) {
console.error(errMsg, errCode)
}
})
支付签名算法说明
sign
参数的签名算法,使用小游戏开发设置中的 AppSecret
对支付的请求进行签名,代表请求经过开发者服务端的支付模块发起。
签名算法伪代码为:
sign = to_hex(hmac_sha256(app_secret, timestamp + '&' + signData))
支付签名代码 python 实现
import hmac
import hashlib
import urllib.parse
# sign_data 支付原串
# app_secret 开放平台小程序 AppSecret
# timestamp 时间戳
def gen_sign(sign_data, app_secret, timestamp):
need_encode_body = timestamp + '&' + sign_data
print(need_encode_body)
return hmac.new(key=app_secret.encode('utf-8'), msg=need_encode_body.encode('utf-8'),
digestmod=hashlib.sha256).hexdigest()