跳到主要内容

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元
9009元
120012元
180018元
250025元
300030元
450045元
500050元
600060元
680068元
880088元
980098元
12800128元
16800168元
19800198元
32800328元
64800648元
99800998元
1998001998元
2998002998元

错误码

错误码错误信息说明
-401未认证(签名有误,请核查签名)
-400请求错误(参数类型有误,请核查参数类型)
-1系统失败
1用户取消支付
6其他错误
5未知错误(收到这类支付反馈,需要开发者客户端向开发者服务端进行核查是否支付成功)
7支付取消
1000参数错误
4004虚拟支付接口错误码,订单不存在
4005虚拟支付接口错误码,订单已失效
4006虚拟支付接口错误码,订单状态异常
4007虚拟支付接口错误码,订单不匹配
4008虚拟支付接口错误码,AppSecret未生成
4009虚拟支付接口错误码,订单退款中
4010虚拟支付接口错误码,暂不支持苹果订单退款
4011虚拟支付接口错误码,由于健康系统限制,本次支付已超过限额
4016虚拟支付接口错误码,未找到苹果计费点
5002请求失败(核查timestamp单位是否为毫秒)

示例代码

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()