跳到主要内容

mgtv.thirdPayment(Object option)

第三方支付。

参数​

Object option​

属性类型默认值必填说明备注
signDatastring是支付原串(该对象的 json 串),结构见下表
signstring是签名,见签名算法
timestampnumber是时间戳单位:毫秒
successfunction否成功的回调函数(宿主已经收到微信/支付宝/苹果等第三方返回订单支付成功结果)
failfunction否失败的回调函数(返回失败时,有可能微信/支付宝/苹果等第三方尚未给宿主返回订单成功,因此需要业务方做好处理)
completefunction否接口调用结束的回调函数(调用成功、失败都会执行)

option.signData 结构​

属性类型默认值必填说明备注
userIdstring是业务方用户 ID 标识
mgOpenIdstring是芒果第三方用户唯一标识
buyQuantitynumber是购买数量暂时只支持 1
productIdstring是商品 ID
productNamestring是商品名称
productDescstring否商品描述
servicenumber是支付渠道,合法值见下表iOS 只能选择苹果支付
pricenumber是本次购买价格单位分
outTradeNostring是业务订单号
platformstring否平台,ios 或 android
attachstring否透传数据
returnUrlstring否透传支付成功跳转地址
modestring是购买模式,合法值见下表

option.signData.service 合法值​

值说明备注
2苹果支付iOS 只能选择苹果支付
3微信
4支付宝

option.signData.mode 合法值​

值说明
buy单次购买

object.success 回调函数​

成功返回值 res

无返回值。

失败返回值 res

属性类型默认值说明
errCodenumber见SDK 错误码
errMsgstring错误信息

SDK 错误码​

错误码说明
0支付成功
-1支付失败
-2服务端错误
1用户支付取消
6其他错误
7支付取消
1000参数错误
16000支付参数解析失败
16001调用支付接口失败
16004支付异常关闭

支付流程​

第三方支付流程图

示例代码​

// signData、sign、timestamp 均由第三方业务方服务端生成并返回
mgtv.thirdPayment({
signData: res.signData, // 支付原串(json 串)
sign: res.sign,
timestamp: res.timestamp,
success() {
console.log('success');
},
fail(res) {
console.log(res.errCode, res.errMsg);
},
complete() {
console.log('complete');
},
});

支付接口回调(后端)​

接入方在小程序开放平台填写回调地址,芒果服务端在支付成功后向该地址推送通知。

请求参数​

属性类型必填说明备注
appIdstring是小程序 appId
signDatastring是支付原串(该对象的 json 串),结构见下表
timestampnumber是时间戳单位:毫秒
signstring是签名,见签名算法

signData 结构​

属性类型说明
notifyTypestring通知类型,pay:支付成功
outTradeNostring业务订单号(下单时传的单号)
mgOrderNostring芒果小程序订单号
transactionIdstring第三方支付订单流水号(微信/支付宝/苹果)
signIdstring芒果 TV 的签约 ID,签约下单时会有
orderPricenumber订单金额
payPricenumber用户支付金额
payTimenumber支付时间戳
orderStatusnumber订单状态,合法值见下表
attachstring透传数据
returnUrlstring透传支付成功跳转地址
orderStatus 合法值​
值说明
10待付款
21支付成功

返回值​

属性类型必填说明
statusstring是返回的状态,success:成功,fail:失败
codenumber是状态码,成功:200,失败:500
errMsgstring否失败时需要返回错误信息

签名算法​

sign 参数的签名算法,使用小游戏开发设置中的 AppSecret 对支付的请求进行签名,代表请求经过开发者服务端的支付模块发起。

算法说明​

签名算法伪代码为:

sign = to_hex(hmac_sha256(app_secret, timestamp + '&' + signData))

Python 实现​

import hmac
import hashlib

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