跳转至

PG 付款

Hive IAP v4 支持在 PC 和移动环境下进行 PG 支付。在 PC 环境中,下面的支付请求屏幕将在新窗口中显示。

在申请PG支付之前,请检查Hive PG支付政策,并根据PG支付控制台指南的前期工作在控制台中注册必要的信息。

PG支付功能

Hive PG支付的主要功能如下所示。

  • Hive PG支付基于 Hive IAP v4PG支付API进行操作,并通过支付机构(PG)提供的网络浏览器异步处理。

  • 在控制台中预先注册的信息反映在商店配置所需的产品价格和产品信息中,产品信息通过 Hive SDK v4 传输。

  • 如果在控制台中注册了接收付款结果的URL,则付款结果将发送到该URL。根据付款方式,有些情况下付款结果无法立即传输。(示例:虚拟账户存款)

  • 已完成付款的订单必须通过transactionFinish(marketPid) API 处理产品付款完成。

  • 如果您想重新购买已完成付款但付款完成处理尚未完成的产品,则付款将无法进行。 您可以在之前购买的产品的付款完成处理后重新购买。

  • 如果您尝试购买尚未完成付款的其他产品,例如在付款尚未完成时打开多个付款窗口,只有第一次付款会完成,其余购买将被自动取消,即使它们已付款。

  • 支付可能会在游戏服务器的裁量下被取消,即使已发出支付完成处理请求。


PG支付流程

适用Hive SDK的PG支付操作流程如下。

  1. 调用 hive.IAPV4.purchase(marketPid, iapPayload, onIAPV4PurchaseCB) 请求购买
  2. 购买完成后,形式为 bypassInfo 的收据信息通过 onIAPV4PurchaseCB 参数发送到游戏服务器

    Note

    Hive 从 SDK 25.1.0 开始,购买完成信号由 SDK 发送,而不是 IAP 服务器。

  3. Hive 在 IAP 服务器上继续进行收据验证

Note

如果您在控制台中注册接收支付结果的URL,您将从SDK收到重复的购买完成信号,因此您必须在控制台中不注册接收支付结果的URL,或者您必须处理重复的收据。

  1. 调用 hive.IAPV4.transactionFinish(marketPid) 来完成产品的付款


多数量购买

Hive PG支付 支持多数量购买。通过在请求购买时指定数量,您可以在一次支付中购买多个相同的应用内产品。

Hive SDK 调用 hive.IAPV4.purchase(marketPid, iapPayload, quantity, onIAPV4PurchaseCB),其中 quantity 参数允许您指定数量。

Note

多数量购买仅支持可重复购买的消耗性应用内产品。请注意不要重复购买一次性产品。

请求多数量购买的示例代码如下。

API 参考: [hive .IAPV4.purchase](http://developers.withhive.com/HTML/v4_api_reference/Unity3D/group___i_a_p_v4.html#ga4f5a16cebe1b2b1fab22126faacafbec)

```cs
using hive;    
        String marketPid = "{YOUR_PRODUCT_MARKET_PID}";    
        String iapPayload = "{YOUR_CUSTOM_PAYLOAD}";
        int quantity = 3;

        IAPV4.purchase(marketPid, iapPayload, quantity, (ResultAPI result, IAPV4Receipt receipt) => {    
        if (result.isSuccess()) {    
                         // TODO: Request verification of receipt with received receipt    
                 }    
});
```
```c++

#include "HiveIAPV4.h"

FString MarketPid = TEXT("YOUR_PRODUCT_MARKET_PID");
FString IapPayload = TEXT("YOUR_CUSTOM_PAYLOAD");
int32 Quantity = 3;

FHiveIAPV4::Purchase(MarketPid, IapPayload, Quantity, FHiveIAPV4OnPurchaseDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHiveIAPV4Receipt& Receipt) {
                if (Result.IsSuccess()) {
                                // API调用成功
                }
}));
```
API 参考: [IAPV4 ::purchase](http://developers.withhive.com/HTML/v4_api_reference/CPP/group___i_a_p_v4.html#ga2bff8cc9d70d0a25eaddc9d45dac86b8)

```cpp
#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
        using namespace std;    
        using namespace hive;    
        string marketPid = "{YOUR_PRODUCT_MARKET_PID}";    
        string iapPayload = "{YOUR_CUSTOM_PAYLOAD}";
        int quantity = 3;
        IAPV4::purchase(marketPid, iapPayload, quantity, [=](ResultAPI const & result, IAPV4Receipt const & receipt) {    
                 if (result.isSuccess()) {    
                         // TODO: Request verification of receipt with received receipt    
                 }    
});
```
API 参考: [com.hive.IAPV4.purchase](https://developers.withhive.com/HTML/dokka/-hive%20-s-d-k%20v4/com.hive/-i-a-p-v4/purchase.html)

```kt
import com.hive.IAPV4    
        import com.hive.ResultAPI    
        val marketPid = "{YOUR_PRODUCT_MARKET_PID}"    
        val iapPayload = "{YOUR_CUSTOM_PAYLOAD}"
        val quantity = 3
        IAPV4.purchase(marketPid, iapPayload, quantity, object : IAPV4.IAPV4PurchaseListener {    
                 override fun onIAPV4Purchase(result: ResultAPI, iapV4Receipt: IAPV4.IAPV4Receipt?) {    
                         if (result.isSuccess) {    
                                 // call successful    
                         }    
                 }    
})
```
API 参考: [com .hive.IAPV4.purchase](https://developers.withhive.com/HTML/v4_api_reference/Android/group___i_a_p_v4.html#gad5e467681ef02fc2ab393bad201e617c)

```java
import com.hive.IAPV4;    
        import com.hive.ResultAPI;    
        String marketPid = "{YOUR_PRODUCT_MARKET_PID}";    
        String iapPayload = "{YOUR_CUSTOM_PAYLOAD}";
        int quantity = 3;
        IAPV4.INSTANCE.purchase(marketPid, iapPayload, quantity, (result, iapV4Receipt) -> {    
                 if (result.isSuccess()) {    
                         // call successful    
                 }    
});
```
API 参考: [HIVEIAPV4::purchase:additionalInfo:handler:](https://developers.withhive.com/documentation/hiveiapv4/iapv4interface/purchase(_:iappayload:handler:))

```swift
import HIVEService    
        let marketPid = "{YOUR_PRODUCT_MARKET_PID}"    
        let iapPayload = "{YOUR_CUSTOM_PAYLOAD}"
        let quantity = 3

        HIVEIAPV4.purchase(marketPid, iapPayload, quantity) { result, receipt in    
                 if result.isSuccess() {    
                         // TODO: 请求验证收到的收据    
                 }    
}
```
<strong>API 参考</strong>: <a href="[cgv hive_sdk4_ios_api_ref_en]/group___i_a_p_v4.html#ga4cd19176f947717f2c7be545ed76a6e0" target="_blank" rel="noopener noreferrer">HIVEIAPV4::purchase:additionalInfo:handler:</a >

```objc
#import <HIVEService/HIVEService-Swift.h>

NSString *marketPid = @"{YOUR_PRODUCT_MARKET_PID}";
NSString *iapPayload = @"{YOUR_CUSTOM_PAYLOAD}";
NSNumber quantity = 3;

[HIVEIAPV4 购买: marketPid iapPayload: iapPayload 数量 handler: ^(HIVEResultAPI *result, HIVEIAPV4Receipt *receipt) {
        if ([result isSuccess]) {
                // TODO: 使用收到的收据请求验证
        }
}];
```