跳轉至

PG 付款

Hive IAP v4 支援在 PC 和移動環境中的 PG 付款。在 PC 環境中,下面的付款請求畫面會在新窗口中顯示。

在申請PG 付款之前,請檢查Hive PG 付款政策,並根據PG付款控制台指南的前期工作在控制台中註冊必要的信息。

PG 付款功能

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

  • Hive PG 付款基於 Hive IAP v4PG 付款 API 運作,並通過 支付機構 (PG) 提供的網頁瀏覽器 進行異步處理。

  • 已完成付款的訂單必須通過transactionFinish(marketPid) API處理產品付款完成。

  • 如果您想重新購買已完成付款但付款完成處理尚未完成的產品,則付款將不會進行。 您可以在之前購買的產品的付款完成處理後重新購買。

  • 如果您嘗試購買尚未完成付款的其他產品,例如在付款尚未完成時打開多個付款窗口,只有第一筆付款會完成,其餘的購買將自動取消,即使它們已經付款。

  • 付款可能會在遊戲伺服器的酌情權下被取消,即使已提出付款完成處理請求。


PG 付款及收據處理指南

Hive SDK 25.1.0 以上版本的 PG 付款及收據處理方式如下。

  1. 呼叫 IAPV4.purchase(marketPid, iapPayload, onIAPV4PurchaseCB) 以請求購買

    Warning

    如果您在 Hive 控制台 計費 > 付款環境設定 > PG 設定 > 附加功能設定 中註冊了用於付款完成資訊的 URL,則必須先刪除此 URL。

  2. 成功完成商品購買後,透過 onIAPV4PurchaseCB 回調接收收據資訊(bypassInfo

  3. 遊戲客戶端將此收據資訊傳送至遊戲伺服器

  4. 遊戲伺服器呼叫收據驗證 API來驗證此收據資訊

  5. 成功完成收據驗證後,呼叫 IAPV4.transactionFinish 完成商品發放處理

如果在上述第 2 步驟中未透過 onIAPV4PurchaseCB 回調收到表示購買已成功完成的收據資訊,請呼叫 IAPV4.restore 重新請求未發放項目的收據資訊。然後按照第 3~5 步驟完成收據驗證及商品發放處理。

Note

有關收據處理流程及驗證方式的詳細資訊,請參閱收據確認


多數量購買

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: Request verification of receipt with received receipt    
                 }    
}
```
<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: 使用收到的收據請求驗證
        }
}];
```