# 游戏充值 - [游戏充值](#游戏充值) - [操作步骤](#pay-step) - [请求商店内容](#请求商店内容) - [创建订单信息](#创建订单信息) - [获取订单支付状态](#获取订单支付状态) --- ## 游戏充值 *注:这是网页api,并非游戏内api,因此游戏部分内容(例如原神纪行类内容)无法通过该api进行购买*

操作步骤

1. 请求商店内容 2. 创建订单信息 3. 获取订单支付状态 ### 请求商店内容 _请求方式:POST_ `https://{游戏id}-sdk.mihoyo.com/{游戏区服id}/mdk/shopwindow/shopwindow/fetchGoods` 例如:`https://hk4e-sdk.mihoyo.com/hk4e_cn/mdk/shopwindow/shopwindow/fetchGoods` **参数:** | 字段 | 类型 | 内容 | 备注 | | ---- | ---- | ---- | ---- | | released_flag | bool | 未知 | | | game | str | 游戏区服id | 必须与url中的游戏id一致 | | region | str | 服务器id | 必须与url中的游戏区服id一致 | | uid | str | 游戏uid | | | account | str | 米游社uid | | **JSON返回:** 根对象: | 字段 | 类型 | 内容 | 备注 | | ---- | ---- | ---- | ---- | | retcode | num | 返回码 | | | data | obj | 返回数据 | | | message | str | 返回信息 | | `data`对象: | 字段 | 类型 | 内容 | 备注 | | ---- | ---- | ---- | ---- | | goods_list | list | 商店物品列表 | | `data`对象→列表→`goods_list`对象: | 字段 | 类型 | 内容 | 备注 | | ---- | ---- | ---- | ---- | | goods_id | str | 商品id | | | goods_name | str | 商品名称 | | | goods_name_i18n_key | str | 未知 | | | goods_desc | str | 商品介绍 | | | goods_desc_i18n_key | str | 未知 | | | goods_type | str | 商品类型 | MonthlyCard 月卡类商品
Normal 普通商品 | | goods_unit | str | 商品个数 | | | goods_icon | str | 商品图标 | | | currency | str | 货币计算单位缩写 | CNY 人民币 | | price | str | 价格 | 按使用货币的最小单位计算(例如货币计算单位为人民币时,此处单位为分;原神中空月祝福的价格为30元人民币,则此处的值为3000) | | symbol | str | 货币单位符号 | | | tier_id | str | 商品层级id | | | bonus_desc | obj | 附赠内容介绍 | 非首充状态时展示的内容 | | once_bonus_desc | obj | 附赠内容介绍 | 首充状态时展示的内容,不存在首充、用户已使用首充或商品为月卡类物品时值为null | | available | bool | 是否可用 | | | tips_desc | str | 未知 | | | tips_i18n_key | str | 未知 | | | battle_pass_limit | str | 未知 | | `data`对象→列表→`goods_list`对象→`bonus_desc`对象: | 字段 | 类型 | 内容 | 备注 | | ------------------- | ---- | ------------ | ---- | | bonus_desc | str | 附赠内容名称 | | | bonus_desc_i18n_key | str | 未知 | | | bonus_unit | num | 附赠内容个数 | | | bonus_goods_id | str | 附赠内容id | | | bonus_icon | str | 附赠内容图标 | |
查看示例 ```json { "retcode": 0, "message": "OK", "data": { "goods_list": [ { "goods_id": "ys_chn_primogem1ststall_tier1", "goods_name": "创世结晶", "goods_name_i18n_key": "", "goods_desc": "", "goods_desc_i18n_key": "", "goods_type": "Normal", "goods_unit": "60", "goods_icon": "https://sdk-webstatic.mihoyo.com/sdk-payment-upload/2022/09/07/0f362595da2e37a7a8fde1bb120656d2_594155779359709441.png", "currency": "CNY", "price": "600", "symbol": "¥", "tier_id": "Tier_1", "bonus_desc": { "bonus_desc": "", "bonus_desc_i18n_key": "", "bonus_unit": 0, "bonus_goods_id": "", "bonus_icon": "" }, "once_bonus_desc": null, "available": true, "tips_desc": "", "tips_i18n_key": "", "battle_pass_limit": "0" }, { "goods_id": "ys_chn_primogem2ndstall_tier5", "goods_name": "创世结晶", "goods_name_i18n_key": "", "goods_desc": "", "goods_desc_i18n_key": "", "goods_type": "Normal", "goods_unit": "300", "goods_icon": "https://sdk-webstatic.mihoyo.com/sdk-payment-upload/2022/09/07/830e247bb0cfffa5c74a04e79c0040f5_1814106121630644354.png", "currency": "CNY", "price": "3000", "symbol": "¥", "tier_id": "Tier_5", "bonus_desc": { "bonus_desc": "原石", "bonus_desc_i18n_key": "", "bonus_unit": 30, "bonus_goods_id": "", "bonus_icon": "https://sdk-webstatic.mihoyo.com/sdk-payment-upload/2022/09/07/bd9f0229dd9b07a6a4f355560634e26e_9134197201842315357.png" }, "once_bonus_desc": null, "available": true, "tips_desc": "", "tips_i18n_key": "", "battle_pass_limit": "0" }, { "goods_id": "ys_chn_primogem3rdstall_tier15", "goods_name": "创世结晶", "goods_name_i18n_key": "", "goods_desc": "", "goods_desc_i18n_key": "", "goods_type": "Normal", "goods_unit": "980", "goods_icon": "https://sdk-webstatic.mihoyo.com/sdk-payment-upload/2022/09/07/dfefc92ce56e3b5615ef28d6b1119b8b_5835214000384994274.png", "currency": "CNY", "price": "9800", "symbol": "¥", "tier_id": "Tier_15", "bonus_desc": { "bonus_desc": "原石", "bonus_desc_i18n_key": "", "bonus_unit": 110, "bonus_goods_id": "", "bonus_icon": "https://sdk-webstatic.mihoyo.com/sdk-payment-upload/2022/09/07/bd9f0229dd9b07a6a4f355560634e26e_6996232761265057834.png" }, "once_bonus_desc": null, "available": true, "tips_desc": "", "tips_i18n_key": "", "battle_pass_limit": "0" }, { "goods_id": "ys_chn_primogem4thstall_tier30", "goods_name": "创世结晶", "goods_name_i18n_key": "", "goods_desc": "", "goods_desc_i18n_key": "", "goods_type": "Normal", "goods_unit": "1980", "goods_icon": "https://sdk-webstatic.mihoyo.com/sdk-payment-upload/2022/09/07/e918ecfedcb13113eb627fd944199272_3460055016813877022.png", "currency": "CNY", "price": "19800", "symbol": "¥", "tier_id": "Tier_30", "bonus_desc": { "bonus_desc": "原石", "bonus_desc_i18n_key": "", "bonus_unit": 260, "bonus_goods_id": "", "bonus_icon": "https://sdk-webstatic.mihoyo.com/sdk-payment-upload/2022/09/07/bd9f0229dd9b07a6a4f355560634e26e_2358463156075320275.png" }, "once_bonus_desc": null, "available": true, "tips_desc": "", "tips_i18n_key": "", "battle_pass_limit": "0" }, { "goods_id": "ys_chn_primogem5thstall_tier50", "goods_name": "创世结晶", "goods_name_i18n_key": "", "goods_desc": "", "goods_desc_i18n_key": "", "goods_type": "Normal", "goods_unit": "3280", "goods_icon": "https://sdk-webstatic.mihoyo.com/sdk-payment-upload/2022/09/07/70e703a64e8786390ab8b7cdc35dbeeb_6358952826545947027.png", "currency": "CNY", "price": "32800", "symbol": "¥", "tier_id": "Tier_50", "bonus_desc": { "bonus_desc": "原石", "bonus_desc_i18n_key": "", "bonus_unit": 600, "bonus_goods_id": "", "bonus_icon": "https://sdk-webstatic.mihoyo.com/sdk-payment-upload/2022/09/07/bd9f0229dd9b07a6a4f355560634e26e_1730792081423418950.png" }, "once_bonus_desc": null, "available": true, "tips_desc": "", "tips_i18n_key": "", "battle_pass_limit": "0" }, { "goods_id": "ys_chn_primogem6thstall_tier60", "goods_name": "创世结晶", "goods_name_i18n_key": "", "goods_desc": "", "goods_desc_i18n_key": "", "goods_type": "Normal", "goods_unit": "6480", "goods_icon": "https://sdk-webstatic.mihoyo.com/sdk-payment-upload/2022/09/07/24fa6b6190ce5da6928e431a832d85c3_5932007685099741224.png", "currency": "CNY", "price": "64800", "symbol": "¥", "tier_id": "Tier_60", "bonus_desc": { "bonus_desc": "原石", "bonus_desc_i18n_key": "", "bonus_unit": 1600, "bonus_goods_id": "", "bonus_icon": "https://sdk-webstatic.mihoyo.com/sdk-payment-upload/2022/09/07/bd9f0229dd9b07a6a4f355560634e26e_8010514725467837459.png" }, "once_bonus_desc": null, "available": true, "tips_desc": "", "tips_i18n_key": "", "battle_pass_limit": "0" }, { "goods_id": "ys_chn_blessofmoon_tier5", "goods_name": "空月祝福", "goods_name_i18n_key": "", "goods_desc": "

【空月祝福介绍】
\n每次购买空月祝福,可立即获得300创世结晶与为期30天的空月祝福生效时间。

\n\n

空月祝福生效时间内,每日可登录领取90原石。(每日凌晨4点更新【GMT+8】)

\n\n

【注意事项】
\n1. 空月祝福剩余生效时间≤180天时续购,总生效时间才会延长。

\n\n

2. 当空月祝福剩余生效时间>180天时不可再进行购买。但如因特殊情况导致重复购买,总生效时间将无法累加,并将直接返还330创世结晶。

\n\n

3. 玩家在空月祝福生效期间如因未登录而未领取的原石,将不会返还。

\n", "goods_desc_i18n_key": "", "goods_type": "MonthlyCard", "goods_unit": "0", "goods_icon": "https://sdk-webstatic.mihoyo.com/sdk-payment-upload/2020/06/08/2da77803b9b2ffc2a2b763a59e9c125f_5219067706372136934.png", "currency": "CNY", "price": "3000", "symbol": "¥", "tier_id": "Tier_5", "bonus_desc": { "bonus_desc": "", "bonus_desc_i18n_key": "", "bonus_unit": 0, "bonus_goods_id": "", "bonus_icon": "" }, "once_bonus_desc": null, "available": true, "tips_desc": "", "tips_i18n_key": "", "battle_pass_limit": "0" } ] } } ```
### 创建订单信息 _请求方式:POST_ > _需要验证请求头_ > > _`x-rpc-client_type`:`4`_ > > _`x-rpc-device_id`_ > > _需要验证cookie_ > > _`stoken_v1`_ > > *`stuid`* > > *`ltoken_v1`* > > *`ltuid`* > > *`cookie_token`* > > *`account_id`* `https://{游戏id}-sdk.mihoyo.com/{游戏区服id}/mdk/atropos/api/createOrder` 例如:`https://hk4e-sdk.mihoyo.com/hk4e_cn/mdk/atropos/api/createOrder` **参数:** | 字段 | 类型 | 内容 | 备注 | | ---- | ---- | ---- | ---- | | open_id | str | 未知 | | | special_info | str | 未知 | 通过网页方式充值的值为topup_center | | order | obj | 订单信息 | | | sign | str | 订单签名 | 生成方式见下 | `order`对象: | 字段 | 类型 | 内容 | 备注 | | ---- | ---- | ---- | ---- | | account | str | 米游社uid | | | region | str | 游戏区服id | | | uid | str | 游戏id | | | delivery_url | str | 未知 | | | device | str | 设备id | | | channel_id | int | 未知 | | | client_ip | str | 未知 | | | client_type | int | 订单请求平台id | | | game | str | 游戏标识符id | | | amount | str | 商品价格 | | | goods_num | int | 商品个数 | | | goods_id | str | 商品id | | | goods_title | str | 商品名称 | | | price_tier | str | 价格层级 | | | currency | str | 货币单位 | | | pay_plat | str | 支付平台 | alipay 支付宝 | | pay_type | str | 支付方式 | alipay 支付宝 | | pay_vendor | str | 支付供应商 | alipay 支付宝 | 注: 订单签名生成方式: 所需的key为`6bdc3982c25f3f3c38668a32d287d16b` 1. 根据字典的键进行排序 2. 根据排序后的键依次获取他们的值并拼接成字符串 3. 使用上述的key和HmacSHA256算法对得到的字符串进行加密,得到的字符串结果为16进制 示例代码如下(Python): ```python import json import pprint import time from hashlib import sha256 import hmac import requests h = """Cookie: stoken=***; stuid=311526738; ltoken=***; ltuid=311526738; cookie_token=***; account_id=311526738 x-rpc-client_type: 4 x-rpc-device_id: ***""" header = dict(list(map(lambda l: l.split(": "), h.split("\n")))) def get_sign(data, key): key = key.encode('utf-8') message = data.encode('utf-8') sign = hmac.new(key, message, digestmod=sha256).hexdigest() print(sign) return sign key = '6bdc3982c25f3f3c38668a32d287d16b' post_data = {"open_id": "", "special_info": "topup_center", "order": {"account": "311526738", "region": "cn_gf01", "uid": "216973385", "delivery_url": "", "device": "***", "channel_id": 1, "client_ip": "", "client_type": 4, "game": "hk4e_cn", "amount": "3000", "goods_num": 1, "goods_id": "ys_chn_blessofmoon_tier5", "goods_title": "空月祝福", "price_tier": "Tier_5", "currency": "CNY", "pay_plat": "alipay", "pay_type": "alipay", "pay_vendor": "alipay"}, "sign": ""} sort_key = sorted(post_data['order'].keys()) values_str = ''.join([str(post_data['order'][key]) for key in sort_key]) print(values_str) post_data['sign'] = get_sign(values_str, key) b = requests.post('https://hk4e-sdk.mihoyo.com/hk4e_cn/mdk/atropos/api/createOrder', json=post_data, headers=header) pprint.pprint(b.json()) ``` **JSON返回:** 根对象: | 字段 | 类型 | 内容 | 备注 | | ---- | ---- | ---- | ---- | | retcode | num | 返回码 | | | data | obj | 返回数据 | | | message | str | 返回信息 | | `data`对象: | 字段 | 类型 | 内容 | 备注 | | ---- | ---- | ---- | ---- | | account | str | 米游社uid | | | action | str | 未知 | | | amount | str | 待支付金额 | | | balance | str | 未知 | | | cluster | str | 未知 | | | create_time | str | 订单创建时间戳 | | | currency | str | 货币单位简称 | | | encode_order | str | 支付链接 | 生成的二维码所指向的链接 | | ext_info | str | 未知 | | | foreign_serial | str | 未知 | | | goods_id | str | 商品id | | | method | str | 未知 | | | order_no | str | 支付平台订单编号 | | | redirect_url | str | 支付网关url | | | session_cookie | str | 未知 | | **备注:**
查看示例 ```json { 'data': { 'account': '311526738', 'action': '', 'amount': '3000', 'balance': '0', 'cluster': '', 'create_time': '1694413535', 'currency': 'CNY', 'encode_order': 'https://qr.alipay.com/bax05682icnzhnjqivkf00c3', 'ext_info': '', 'foreign_serial': '', 'goods_id': 'ys_chn_blessofmoon_tier5', 'method': '', 'order_no': '1701119779159945792', 'redirect_url': 'https://openapi.alipay.com/gateway.do', 'session_cookie': '' }, 'message': 'OK', 'retcode': 0 } ```
### 获取订单支付状态 _请求方式:GET_ > _需要验证请求头_ > > _`x-rpc-client_type`:`4`_ > > _`x-rpc-device_id`_ > > _需要验证cookie_ > > _`stoken_v1`_ > > *`stuid`* > > *`ltoken_v1`* > > *`ltuid`* > > *`cookie_token`* > > *`account_id`* `https://{游戏标识符id}-sdk.mihoyo.com/{游戏区服id}/mdk/atropos/api/checkOrder` 例如:`https://hk4e-sdk.mihoyo.com/hk4e_cn/mdk/atropos/api/checkOrder` **参数:** | 字段 | 类型 | 内容 | 备注 | | ---- | ---- | ---- | ---- | | order_no | str | 支付平台订单编号 | | | game | str | 游戏区服id | | | region | str | 服务器id | | | uid | str | 游戏uid | | 根对象: | 字段 | 类型 | 内容 | 备注 | | ---- | ---- | ---- | ---- | | retcode | num | 返回码 | | | data | obj | 返回数据 | | | message | str | 返回信息 | | `data`对象: | 字段 | 类型 | 内容 | 备注 | | ---- | ---- | ---- | ---- | | amount | str | 价格 | | | goods_num | str | 商品数量 | | | goods_title | str | 商品名称 | | | order_no | str | 支付平台订单编号 | | | pay_plat | str | 支付平台 | | | status | str | 支付状态 | 1 未支付
900 已支付 |
查看示例 - 请求:`https://hk4e-sdk.mihoyo.com/hk4e_cn/mdk/atropos/api/checkOrder?order_no=1701125802130158976&game=hk4e_cn®ion=cn_gf01&uid=216973385` - 返回: ```json //未支付 { "retcode": 0, "message": "OK", "data": { "status": 1, "amount": "600", "goods_title": "创世结晶×60", "goods_num": "1", "order_no": "1701125802130158976", "pay_plat": "alipay" } } //已支付 { "retcode": 0, "message": "OK", "data": { "status": 900, "amount": "600", "goods_title": "创世结晶×60", "goods_num": "1", "order_no": "1701125802130158976", "pay_plat": "alipay" } } ```