跳到主要内容

mgtv.requestPaymentGameItem(Object object)

功能描述​

发起道具直购支付请求,开发工具暂不支持支付测试,请在真机设备上测试。

参数​

Object object​

属性类型默认值必填说明
signDatastring是支付原串 (备注:标准的json字符串)
signstring是支付签名,见支付签名算法说明,安全起见,签名放在小游戏服务端
timestampnumber是时间戳(单位:毫秒)
successfunction否成功的回调函数(成功发货:以平台服务端向开发者服务端通知发货为准)
failfunction否失败的回调函数
completefunction否接口调用结束的回调函数(调用成功、失败都会执行)

signData​

属性类型默认值必填说明
modestring是支付的类型,道具直购为 goods
buyQuantitynumber是购买数量
productIdstring是道具ID
productNamestring是道具名称
productDescstring否道具描述
goodsPricenumber是道具单价(分)
outTradeNostring是业务订单号
platformstring否平台,ios 或 android
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未知错误(收到这类支付反馈,需要开发者客户端向开发者服务端进行核查是否支付成功)
4支付取消
7支付取消
1000参数错误
4004虚拟支付接口错误码,订单不存在
4005虚拟支付接口错误码,订单已失效
4006虚拟支付接口错误码,订单状态异常
4007虚拟支付接口错误码,订单不匹配
4008虚拟支付接口错误码,AppSecret未生成
4009虚拟支付接口错误码,订单退款中
4010虚拟支付接口错误码,暂不支持苹果订单退款
4011虚拟支付接口错误码,由于健康系统限制,本次支付已超过限额
4016虚拟支付接口错误码,未找到苹果计费点
5002请求失败(核查timestamp单位是否为毫秒)

示例代码​

//该示例AppSecret为:m5zbYlRq4GBGMwoqWBdMBWzfb
mgtv.requestPaymentGameItem({
signData: "{\"mode\":\"goods\",\"buyQuantity\":1,\"productId\":\"test_product_001\",\"productName\":\"test_name\",\"productDesc\":\"test_des\",\"goodsPrice\":100,\"outTradeNo\":\"PAY1791596479452503\",\"platform\":\"android\",\"attach\":\"\"}",
sign: 'f2d59ebfde5bc6457f42d1150b6ac663cdac75cb94bee76e499e5200870fa464',
timestamp: 1791596479452,
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()