Examples
本页提供 v0.1(Phase 1)常用的接入示例:商品配置、购买、权益恢复、钱包事件、能力检测。
1) 商品配置(Product Mapping)
PHSDK 不允许前端随意传金额;所有价格、Token、链信息由配置决定。
{
"version": "0.1",
"products": {
"coin_pack_1": {
"chainId": 8453,
"token": {
"address": "0xTOKEN...",
"symbol": "USDC",
"decimals": 6
},
"payee": "0xPAYEE...",
"amount": "1990000",
"entitlement": {
"id": "coin_pack_1",
"type": "consumable",
"quantity": 2000
}
}
}
}说明:
amount为最小单位(避免浮点误差)productId是游戏唯一需要关心的参数
2) 发起购买
const result = await sdk.pay.purchase({ productId: "coin_pack_1" });
switch (result.status) {
case "CONFIRMED":
// ✅ 建议在确认后再发放高价值权益(Phase 1 默认写本地)
break;
case "SUBMITTED":
// 交易已广播,等待确认
break;
case "REJECTED":
// 用户拒签
break;
case "FAILED":
// 交易失败(revert / status=0)
break;
}3) 查询/恢复权益(Local Entitlements)
const { entitlements } = await sdk.pay.getEntitlements();
console.log(entitlements);4) 钱包事件
sdk.on("wallet.accountsChanged", ({ accounts }) => {
console.log("accounts changed", accounts);
});
sdk.on("wallet.chainChanged", ({ chainId }) => {
console.log("chain changed", chainId);
});5) 能力检测(推荐)
const caps = await sdk.env.getCapabilities();
if (!caps.modules.pay.purchase) alert("Payment not supported in this wallet");6) 可复制的示例仓库结构
7) Mock bridge(调试用)
当宿主仅提供 WebView + window.ethereum 时,可先注入 mock bridge 脚本模拟宿主接入:
<script src="/path/to/bridge.mock.js"></script>