平台 API

平台 API 允许您读取和写入与部署在 Pi 应用平台上的应用及其用户相关的 Pi 服务器的数据。

概述

基本路径:

最新版本的平台 API 可在以下网址获取api.minepi.com/v2:

关于 API 版本控制的说明:

平台 API 目前版本为 v2。我们将尽可能避免对 API 版本进行任何重大更改,并将重大更改作为新的主要版本发布。但是,如有必要(例如安全或隐私修复),我们可能会在不另行通知的情况下对现有版本进行重大更改。

授权

平台 API 支持两种不同的授权机制。

访问令牌授权

某些 API 调用需要您提供用户的访问令牌才能访问资源。这些调用通常与用户数据相关(例如/me:)。可以使用以下 Authorization 标头访问这些端点:

Authorization: Bearer <user access token>

这些端点可以从后端/服务器应用程序访问,也可以从前端/客户端应用程序访问。

服务器 API 密钥授权

由于各种原因,您的后端/服务器应用程序必须发出一些 API 调用。可以使用以下 Authorization 标头访问这些端点:

Authorization: Key <your Server API Key>

警告:服务器 API 密钥仅供服务器使用。

您的服务器 API 密钥必须保存在您的服务器上,不得发送给客户端(请勿在客户端 JavaScript 代码中使用它)。将来,您的服务器 API 密钥可能会启用应用程序本身的敏感操作,而这些操作不应被用户允许执行。允许用户访问您的服务器 API 密钥会造成严重的安全漏洞。

API 参考

验证

访问用户的资源:

获取用户信息,包括用户已同意与您的应用共享的用户信息。

GET /me
  • 授权方式:访问令牌

  • 响应类型:UserDTO

通过将用户的访问令牌发送到后端并使用此 API 端点来验证使用前端 SDK 获取的数据(恶意用户可能会篡改请求并向您发送错误数据),以验证令牌的有效性和用户的身份。

访问令牌是很长的随机字符串,如果令牌被篡改,则请求将失败(401 HTTP 错误代码)(被篡改的令牌不属于任何真实用户)。

付款

有两种不同的付款方式。

  1. U2A(用户到应用)

  2. A2U(应用到用户)

创建付款(U2A):

如果付款类型为 U2A,请使用createPayment客户端 JavaScript SDK 的方法创建付款。更多详情请参阅“付款”部分。

创建付款(A2U):

POST /payments
  • 授权方式:服务器 API 密钥

  • 响应类型:PaymentDTO

请求正文示例:

{
  "payment": {
    "amount": 1,
    "memo": "From app to user test",
    "metadata": {"test": "test metadata"},
    "uid": "a1111111-aaaa-bbbb-2222-ccccccc3333d"
  }
}

收到付款:

获取付款信息。

GET /payments/{payment_id}
  • 授权方式:服务器 API 密钥

  • 响应类型:PaymentDTO

批准付款:

服务器端批准:将付款标记为已批准,使用户能够将交易提交到区块链。

POST /payments/{payment_id}/approve
  • 授权方式:服务器 API 密钥

  • 响应类型:PaymentDTO

完成付款:

服务器端完成:通过向 Pi 服务器证明您的应用程序已获得付款的 txid,将付款标记为已完成,从而使用户能够关闭付款流程。

POST /payments/{payment_id}/complete
  • 授权方式:服务器 API 密钥

  • 响应类型:PaymentDTO

请求正文示例:

{
  "txid": "7a7ed20d3d72c365b9019baf8dc4c4e3cce4c08114d866e47ae157e3a796e9e7"
}

取消付款:

将付款标记为已取消。

POST /payments/{payment_id}/cancel
  • 授权方式:服务器 API 密钥

  • 响应类型:PaymentDTO

获取未完成的服务器付款:

返回处于以下两种状态之一的服务器付款(即 A2U 付款)列表:

  • 已创建付款,但尚未进行区块链交易;

  • 区块链交易已提交,但开发者尚未完成支付。

GET /payments/incomplete_server_payments
  • 授权方式:服务器 API 密钥

  • 响应类型:{ "incomplete_server_payments": Array< PaymentDTO > }

广告

验证激励广告状态

adId通过客户端 Pi SDK 方法返回的激励广告状态进行验证displayAd('rewarded')

GET /ads_network/status/:adId
  • 授权方式:服务器 API 密钥

  • 响应类型:RewardedAdStatusDTO

资源类型

UserDTO

{
  uid: string, // An app-specific user identifier
  credentials: {
    scopes: Array<Scope>, // a list of granted scopes
    valid_until: {
      timestamp: number,
      iso8601: string
    }
  },
  username?: string, // The user's Pi username. Requires the `username` scope.
}


PaymentDTO

{
  // Payment data:
  identifier: string, // payment identifier
  user_uid: string, // user's app-specific ID
  amount: number, // payment amount
  memo: string, // a string provided by the developer, shown to the user
  metadata: Object, // an object provided by the developer for their own usage
  from_address: string, // sender address of the blockchain transaction
  to_address: string, // recipient address of the blockchain transaction
  direction: Direction, // direction of the payment
  created_at: string, // the payment's creation timestamp
  network: AppNetwork, // a network of the payment
  // Status flags representing the current state of this payment
  status: {
    developer_approved: boolean, // Server-Side Approval
    transaction_verified: boolean, // blockchain transaction verified
    developer_completed: boolean, // Server-Side Completion
    cancelled: boolean, // cancelled by the developer or by Pi Network
    user_cancelled: boolean, // cancelled by the user
  },
  // Blockchain transaction data:
  transaction: null | { // This is null if no transaction has been made yet
    txid: string, // id of the blockchain transaction
    verified: boolean, // true if the transaction matches the payment, false otherwise
    _link: string, // a link to the operation on the Blockchain API
  },
};

RewardedAdStatusDTO

{
  "identifier": string; // the adId token returned from the Pi SDK displayAd("rewarded") method
  "mediator_ack_status": "granted" | "revoked" | "failed" | null;
  "mediator_granted_at": string | null; // ISO 8601 date string
  "mediator_revoked_at": string | null; // ISO 8601 date string


打赏 Pi 打赏 微信打赏