# pay_v2.pay

本接口应在服务器端调用,详细说明参见服务端API

扣除游戏币。本接口开通了虚拟支付的小游戏可用。通过本接口扣除某个用户的游戏币后发放游戏内的等值道具或提供等值的游戏服务。 由于可能存在接口调用超时、或返回系统繁忙(errcode为-1),此时订单状态未知(可能扣除成功,也可能扣除失败),此时可以用相同的bill_no再次调用本接口,直到明确返回订单号重复(errcode为90012)或者非系统繁忙(errcode不为-1,即其他的逻辑失败)为止。对相同的billno多次调用该接口保证48小时内操作幂等,不会重复扣除。开发者需保证不同订单对应的billno在openid+zoneid下唯一。也可以调用退回扣除游戏币接口pay_v2.cancelPay取消本次扣除。

调用方式:

# HTTPS 调用

POST https://api.weixin.qq.com/wxa/game/pay?access_token=ACCESS_TOKEN&signature=SIGNATURE&sig_method=SIG_METHOD&pay_sig=PAY_SIGNATURE

# 请求参数

# Query参数

属性 类型 默认值 必填 说明
access_token string 接口调用凭证
signature string 用户登录态签名
sig_method string 用户登录态签名的哈希方法,只支持hmac_sha256,请传入"hmac_sha256"
pay_sig string 支付请求签名(pay_sig)算法说明

# POST Body

属性 类型 默认值 必填 说明
openid string 用户唯一标识符
offer_id string 支付应用ID(OfferId)
ts number 当前UNIX时间戳(请尽可能确保时间准确),单位:秒
如:1668136271
zone_id string 已发布的分区ID(MP-分区配置-分区ID)
需要和env对应
env number 环境配置
0:现网环境(也叫正式环境)
1:沙箱环境
user_ip string 用户外网ip
amount number 扣除游戏币数量,需要大于0(原1.0的amt)
bill_no string 扣除游戏币订单号,业务需要保证全局唯一,相同的订单号多次请求不会重复扣除;长度不超过63,只能是数字、英文大小写字母及_-的组合;不能以下划线(_)开头(2.0新增约束)
payitem string 道具信息
remark string 备注

# 返回值

# Object

返回的 JSON 数据包

属性 类型 说明
errcode number 错误码
errmsg string 错误信息
bill_no string 扣除游戏币订单号
balance number 扣款后的余额
used_present_amount number 本次扣的赠送币的数量(原1.0的used_gen_amt)

errcode 的合法值

说明 最低版本
0 请求成功
-1 系统繁忙,此时请开发者稍候再试
90000 订单不存在
90010 signature签名错误
90011 pay_sig签名错误
90012 订单号重复
90013 余额不足
90016 sessionkey fail,用户sessionkey过期,需要重走登录流程
90018 参数错误,具体参数见errmsg描述

# cURL请求

curl -d '{
  "offer_id": "12345678",
  "openid": "oUrsfxxxxxxxxxx",
  "ts": 1668512428,
  "zone_id": "1",
  "env": 0,
  "bill_no": "test_pay_1668512428",
  "amount": 1,
  "payitem": "钻石",
  "remark": "测试"
}' \
  -H "Content-Type: application/json" \
  -X POST \
  'https://api.weixin.qq.com/wxa/game/pay?access_token=62_so84Zyl5MuPCjXGiR3eb1ysa1lr6aRpcprEnNpZ9ds8676ivjqRn5Zroi2Rxxx9-Yvh2zIl9oEt1hIzK0x2OrMCT5zk8nB_TG98obD_ad3tFPftfFmB7xXtcZv4PVPcbFATZT&signature=f6a57637cea4f81eb3f64d4123ce07ae692e6c34225350ccb8d7c315d58bda34&pay_sig=6ea7866f25d94a0578656b1f889ae1fa35076ab61c18ce34c18f48b56d60de4d&sig_method=hmac_sha256'

# 成功返回

{
  "errcode": 0,
  "errmsg": "ok",
  "bill_no": "test_pay_1668512428",
  "balance": 10,
  "used_present_amount": 1
}

# 错误返回

{
    "errcode":90018,
    "errmsg":"[openid] openid is invalid"
}