支付更新时间:2025-12-24 18:14:02
qg.pay
基础信息说明
功能概述:调用平台的支付能力,完成用户支付操作。
| 项目 | 说明 |
| 版本要求 | 无 |
| 前提条件 | 需已开通并接入小游戏支付能力,开发商需能从服务端获取合法的订单信息(orderInfo),并已通过登录(qg.login + Session) 校验 |
| 使用限制 | orderInfo 为必填字段,且需由服务端签名生成;调用后会弹出支付弹窗,需用户主动操作完成支付 |
| 相关教程 | 详情参考小游戏联运SDK接入文档 |
参数说明
qg.pay(option)
| 属性名 | 类型 | 默认值(如有) | 必填 | 说明 |
| orderInfo | Object | - | 是 | 需要由CP服务端生成的订单明细字符串,由下表中的基本参数 + 签名参数构成。参数使用URL编码成字符串 |
| success | Function | - | 否 | 支付成功回调 |
| fail | Function | - | 否 | 支付失败/用户取消回调 |
| complete | Function | - | 否 | 接口调用结束的回调 |
orderInfo 字段说明(服务端生成)
| 参数名 | 类型 | 说明 |
| appId | String | 游戏唯一 ID |
| appAccountId | Int | qg.login 成功返回的 appAccountId |
| session | String | qg.login 成功返回的 session |
| cpOrderId | String | CP 侧游戏订单号 |
| cpUserInfo | String | CP 透传字段(不可为空) |
| displayName | String | 商品展示名称 |
| feeValue | Int | 价格(单位:分) |
| sign | String | 签名的key为(AppKey 全是数字) (必传) 签名方式见下文 必须先验证 用户session验证接口,参考签名相关 |
回调结果说明
回调成功
| 参数名 | 类型 | 说明 |
| memo | String | 返回的文案或错误信息,如:"支付成功" |
| tradeNO | - | 订单号 |
| payStatus | String | 返回值:9000(支付成功) |
回调失败
| 参数名 | 类型 | 说明 |
| memo | String | 返回的文案或错误信息,如:"支付已取消" |
| code | - | 返回的错误码(若无此字段则为空) |
| resultStatus | String | 返回值:6001(已取消支付)、5000/5001(微信相关异常)等 |
触发与阶段说明
| 阶段 | 触发时机 | 说明 |
| 订单准备 | CP服务端生成 orderInfo | 建议先完成 qg.login 与服务端下单,拿到签名后的合法订单字符串/对象 |
| 发起支付 | 调用 qg.pay({ orderInfo }) | 弹出支付弹窗,用户确认/取消 |
| 成功回调 | 支付成功 | 始终会调用 option.complete(res) |
| 失败/取消 | 返回错误或用户取消 | option.fail(err) 被触发,随后 option.complete(err) |
示例代码
qg.pay({
orderInfo: {
appId:"2882303761117490626",
appAccountId:"74317",
session:"TRQJzccscL9u6VvC",
cpOrderId:'1556088963',
cpUserInfo: '74317',
displayName: '游戏元宝',
feeValue: 100,
sign: '22fea7804df43420dc9886a04c028b6f335d87b6',
},
success: function(data){
console.log('支付成功', data)
//{memo: "支付成功", resultStatus: "9000"}
//9000: 支付成功
},
fail: function(data){
console.warn('支付失败或用户取消', data)
//{memo: "已取消支付", resultStatus: "6001"}
//6001: 已取消支付
//5000: 未安装微信
//5001: 微信订单未支付
},
complete: out => {
console.log('支付流程结束', out)
}
})错误码说明
| resultStatus | 说明 | 典型场景 |
| 9000 | 支付成功 | 用户完成支付且平台返回成功 |
| 6001 | 用户取消支付 | 用户在收银台主动取消 |
| 5000 | 未安装微信 | 调微信支付但终端缺少微信 |
| 5001 | 微信订单未支付 | 跳转微信后用户未完成支付 |
服务端对接说明
Session 验证(必接)
- 在调用 qg.pay 前,必须通过 qg.login 获取 session 与 appAccountId,并调用官方 Session 验证接口:https://mis.migc.xiaomi.com/api/biz/service/loginvalidate,确认登录有效后才可下单
发货通知(必接)
接口描述:用户支付完成后,通知游戏发货。用户支付成功后,平台将订单信息发送至开发者提供的支付回调地址,为防止被篡改,游戏需要对所收到的参数进行校验,确认收到的参数和下单的参数一致。
| 参数名 | 必填 | 类型 | 说明 |
| appId | 是 | String | 游戏 ID |
| cpOrderId | 是 | String | 游戏订单ID |
| cpUserInfo | 否 | String | 开发者透传信息 |
| uid | 是 | String | 用户 ID |
| orderId | 是 | String | 游戏平台订单ID |
| orderStatus | 是 | String | 订单状态,TRADE_SUCCESS 表示成功 |
| payFee | 是 | String | 支付金额(单位:分) |
| productCode | 是 | String | 商品代码 |
| productName | 是 | String | 商品名称 |
| productCount | 是 | String | 商品数量 |
| payTime | 是 | String | 支付时间,格式 yyyy-MM-dd HH:mm:ss |
| partnerGiftConsume | 否 | String | 优惠券金额(单位:分) |
| signature | 是 | String | 使用appSecret验证签名,参考签名相关 |
示例代码
http://ccc.com/notify.do?appId=2882303761517239138&cpOrderId=9786bffc-996d-4553-aa33-f7e92c0b29d5&orderConsumeType=10&orderId=21140990160359583390&orderStatus=TRADE_SUCCESS&payFee=1&payTime=2014-09-05%2015:20:27&productCode=com.demo_1&productCount=1&productName=%E9%93%B6%E5%AD%901%E4%B8%A4&uid=100010&signature=1388720d978021c20aa885d9b3e1b70cec751496发货接口说明
- 服务端在订单支付完成之后将立即通知到CP发货接口
- 服务器通知CP发货时,若未接收到CP接口成功返回,该笔订单将重复通知3次
- 服务器在重复3次通知CP发货的过程中,若都未收到CP的成功回复,订单将进入后台轮询通知发货。每次轮询将有3次的通知;第一次轮询为订单新建之后的15分钟;24小时之内每半小时轮询通知一次;24小时之后每小时轮询通知一次;7天之后不再通知,CP可通过订单查询接口进行主动对账补偿
- 服务器收到CP接口返回: {"errcode":200,"errMsg":"success"} json串时将不再对该笔订单做重复通知
- 服务器若对某笔订单重复通知,则CP需自行判断是否已经发货,若已发货则接口直接返回: {"errcode":200,"errMsg":"success"} json串,当作成功处理。 该接口优先GET方式,返回信息全部为json结构。 该接口中所有签名编码都为UTF-8,且加密结果均转换为小写字符
订单信息查询(选接)
接口描述:服务端开发者调用该接口,可以查询具体订单信息。
- 接口地址:https://mis.migc.xiaomi.com/api/biz/service/queryOrder.do
- 请求方式:POST
- Headers:Content-Type: application/x-www-form-urlencoded
请求参数
| 参数名 | 类型 | 说明 |
| appId | String | 游戏 ID |
| cpOrderId | String | 游戏订单ID |
| uid | String | 用户 ID |
| signature | String | 使用 appSecret 生成的签名 |
返回参数
| 参数名 | 必填 | 类型 | 说明 |
| appId | 是 | String | 游戏 ID |
| cpOrderId | 是 | String | 游戏订单ID |
| cpUserInfo | 否 | String | CP透传信息 |
| uid | 是 | String | 用户 ID |
| orderId | 是 | String | 游戏平台订单ID |
| orderStatus | 是 | String | 订单状态, TRADE_SUCCESS代表成功, WAIT_BUYER_PAY代表未支付, REPEAT_PURCHASE订购关系已经存在 |
| payFee | 是 | String | 支付金额(单位:分,即 0.01 米币) |
| productCode | 是 | String | 商品代码 |
| productName | 是 | String | 商品名称 |
| productCount | 是 | String | 商品数量 |
| payTime | 是 | String | 支付时间,格式 yyyy-MM-dd HH:mm:ss |
| orderConsumeType | 否 | String | 订单消费类型(示例返回字段) |
| signature | 是 | String | 响应签名,参考签名相关 |
返回参数示例
{
"signature": "eb30240cff8c66f856ec0e48354aa670b8cf037f",
"uid": "100010",
"appId": 2882303761517239300,
"cpOrderId": "9786bffc-996d-4553-aa33-f7e92c0b29d5",
"productCode": "com.demo_1",
"orderStatus": "TRADE_SUCCESS",
"productName": "%E9%93%B6%E5%AD%901%E4%B8%A4",
"productCount": 1,
"orderConsumeType": "10",
"orderId": "21140990160359583390",
"payFee": 1,
"payTime": "2014-09-05 15:20:27"
}注意事项
- orderInfo 通常由服务端签名生成,请勿在客户端拼接或篡改,避免校验失败
- 支付可能被用户主动取消,务必在 fail 中区分取消与其他异常并给予用户提示
上一篇:登录
下一篇:小游戏技术常见问题(FAQ)
文档内容是否有帮助?
有帮助
无帮助