跳到主要内容

mgtv.requestPaymentGameItem(Object object)

功能描述

发起道具直购支付请求

参数

Object object

属性类型默认值必填说明
signDatastring支付原串
signstring支付签名,见支付签名算法说明
timestampnumber时间戳
successfunction成功的回调函数
failfunction失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)

signData

属性类型默认值必填说明
modestring支付的类型,道具直购为 goods
buyQuantitynumber购买数量
productIdstring道具ID
productNamestring道具名称
productDescstring道具描述
goodsPricenumber道具单价(分)
outTradeNostring业务订单号
platformstring平台,iosandroid
attachstring透传数据

iOS 支持的支付金额

因平台限制,iOS 仅支持以下支付金额(即道具单价乘以购买数量 goodsPrice * buyQuantity

支付金额(单位:分)说明
1001元
3003元
6006元
8008元
180018元
240024元
250025元
280028元
300030元
400040元
450045元
500050元
600060元
680068元
780078元
880088元
980098元
10800108元
11800118元
12800128元
16800168元
18800188元
19800198元
23800238元
28800288元
32800328元
38800388元
44800448元
48800488元
54800548元
58800588元
64800648元

错误码

错误码错误信息说明
-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()