ข้ามไปที่เนื้อหา

การชำระเงิน PG

เนื้อหาต่อไปนี้อธิบายฟีเจอร์การชำระเงิน PG และวิธีประมวลผลใบเสร็จ

ก่อนใช้งานการชำระเงิน PG ให้ตรวจสอบนโยบายการชำระเงิน PG และลงทะเบียนข้อมูลที่จำเป็นใน Hive Console ตามการเตรียมงานล่วงหน้าในคู่มือ Hive Console สำหรับ PG payment

PG payment features

ฟีเจอร์หลักของ PG payment มีดังนี้

  • PG payment ทำงานบนพื้นฐานของ IAP v4 และ PG Payment API และประมวลผลแบบอะซิงโครนัสผ่าน เว็บเบราว์เซอร์ที่ผู้ให้บริการชำระเงิน (PG) จัดให้
  • คำสั่งซื้อที่ชำระเงินเสร็จแล้วต้องทำการจ่ายสินค้าให้เสร็จสิ้นด้วย API transactionFinish(marketPid)
  • หากต้องการซื้อซ้ำสินค้าที่ชำระเงินแล้วแต่ยังไม่ทำการจบขั้นตอนชำระเงิน ระบบจะไม่ดำเนินการชำระเงิน ต้องจบขั้นตอนของคำสั่งซื้อก่อนหน้าก่อน
  • หากพยายามซื้อสินค้าเพิ่มทั้งที่คำสั่งซื้อก่อนหน้ายังไม่จบ (เช่น เปิดหลายหน้าต่างชำระเงิน) จะชำระเงินสำเร็จเฉพาะรายการแรก และรายการที่เหลือจะถูกยกเลิกอัตโนมัติ แม้จะชำระเงินแล้วก็ตาม
  • ระบบสามารถยกเลิกการชำระเงินได้ตามดุลยพินิจของเกมเซิร์ฟเวอร์ แม้จะมีการร้องขอจบการชำระเงินแล้วก็ตาม


การชำระเงิน PG บน PC

Info

การชำระเงิน PG บน PC รองรับใน Hive SDK 25.1.0 ขึ้นไป

เมื่อดำเนินการชำระเงิน PG ในสภาพแวดล้อม PC หน้าจอคำขอชำระเงินจะแสดงในหน้าต่างใหม่ดังตัวอย่างด้านล่าง


การชำระเงิน PG บนมือถือ

Info

การชำระเงิน PG บนมือถือรองรับใน Hive SDK 26.3.2 ขึ้นไป

เมื่อดำเนินการชำระเงิน PG ในสภาพแวดล้อมมือถือ หน้าจอคำขอชำระเงินจะแสดงผ่าน in-app webview

หน้าจอการชำระเงิน PG บนมือถือ

Warning

เพื่อดำเนินการชำระเงิน PG บนมือถือ คุณต้องเรียก setMarketSelection API เพื่อเปลี่ยน market เป็น Hive Store หากส่งคำขอซื้อโดยไม่เปลี่ยน market ระบบจะชำระเงินผ่าน market เดิม (Google Play, App Store ฯลฯ) สำหรับรายละเอียดเพิ่มเติม โปรดดู ช่วงเวลาที่แนะนำในการเรียก market selection

Tip

หลังชำระเงิน PG เสร็จสิ้น หากต้องการกลับไปใช้ market เดิม (App Store, Google Play ฯลฯ) ให้เรียก setMarketSelection API อีกครั้ง เช่น บน iOS ให้เรียก setMarketSelection(IAPV4Type.appStore)

ข้อกำหนดเบื้องต้น

หากต้องการใช้การชำระเงิน PG บนมือถือ คุณต้องเพิ่ม HiveStore module ลงในโปรเจกต์ โปรดอ้างอิงแนวทางด้านล่างตามเอนจิน SDK และระบบปฏิบัติการเป้าหมาย

SDK Native Android

เพิ่มไลบรารี HiveStore market ลงในไฟล์ build.gradle ระดับโมดูล

implementation "com.com2us.android.hive:hive-iapv4-market-hivestore" // Hive Store(PG)
Note

สำหรับรายละเอียดเพิ่มเติม โปรดดู การตั้งค่า Billing ของ Hive SDK Android

SDK Native iOS

เพิ่มเฟรมเวิร์ก in-app purchase และเฟรมเวิร์ก PG (HiveStore) ลงใน Podfile ในไดเรกทอรีโปรเจกต์

pod 'HiveIAPV4', $HIVE_SDK_VERSION
pod 'HiveIAPV4HiveStore', $HIVE_SDK_VERSION // Hive Store(PG)
Note

สำหรับรายละเอียดเพิ่มเติม โปรดดู การตั้งค่า Billing ของ Hive SDK iOS

Unity

  1. ใน Unity editor ให้คลิก Hive > ExternalDependency
  2. ใน Market Settings ให้เลือก Hive Store
Note

สำหรับรายละเอียดเพิ่มเติม โปรดดู การตั้งค่า Billing ของ Hive SDK Unity

Unreal

  1. ในเมนู Unreal editor ให้คลิก Edit > Project Settings
  2. ในแถบด้านซ้าย เลือก Hive SDK > Dependency - Android / Hive SDK > Dependency - iOS
  3. ใน Market เลือก Hive Store
Note

สำหรับรายละเอียดเพิ่มเติม โปรดดู การตั้งค่า Billing ของ Hive SDK Unreal Engine


นโยบายการชำระเงิน PG บนมือถือ

ขอบเขตการรองรับการชำระเงิน PG บนมือถือถูกจำกัดตามนโยบายของแต่ละแพลตฟอร์ม

Platform Supported Note
iOS US storefront only ความพร้อมใช้งานอาจเปลี่ยนแปลงตามการอัปเดต App Review Guidelines ของ Apple
Android Not supported -

ข้อควรระวังเมื่อพัฒนาบน iOS

บน iOS ตาม App Review Guidelines (Guideline 3.1.1, 3.1.1(a), 3.1.3) ของ Apple การชำระเงิน PG รองรับเฉพาะ US storefront เท่านั้น โดยในเดือนพฤษภาคม 2025 Apple ได้อัปเดตแนวทางตามคำตัดสินของศาลสหรัฐฯ ทำให้ใน US storefront สามารถแสดงปุ่ม ลิงก์ภายนอก และ CTA ที่นำผู้ใช้ไปยังวิธีชำระเงินอื่นนอกเหนือจาก IAP ได้โดยไม่ต้องมี Entitlement แยก

  • สำหรับ storefront นอกสหรัฐฯ หากแสดงปุ่มหรือ 링크ที่นำไปสู่วิธีชำระเงินอื่นนอกเหนือจาก IAP ในแอป จะถูกปฏิเสธในการตรวจรีวิวของ Apple
  • แนะนำให้แยกเงื่อนไขการแสดงจุดเข้าใช้งาน PG payment ตามภูมิภาค storefront ของผู้ใช้
Warning

App Review Guidelines ของ Apple อาจมีการเปลี่ยนแปลง ก่อนส่งรีวิวแอป โปรดตรวจสอบ แนวทางล่าสุด

ไม่สามารถตั้งค่าวิธีชำระเงินของบุคคลที่สามเพียงอย่างเดียว

ตามนโยบายของ Apple แอปของคุณต้องมี App Store IAP เป็นวิธีชำระเงินเริ่มต้น อย่าตั้งค่าเฉพาะ Hive Store (PG) ใน Hive Console เพียงอย่างเดียว แอปที่มีเฉพาะวิธีชำระเงินของบุคคลที่สามอาจถูกปฏิเสธหรือถูกถอดออกจาก App Store ต้องตั้งค่าใช้งานร่วมกับ App Store market เสมอ

โฟลว์การเชื่อมต่อ PG payment บนมือถือ

โฟลว์การเชื่อมต่อ PG payment ในสภาพแวดล้อมมือถือมีดังนี้

ภาพการชำระเงิน PG บนมือถือ


โฟลว์การชำระเงินและประมวลผลใบเสร็จ

โฟลว์การประมวลผลใบเสร็จสำหรับ PG payment บน PC และมือถือเหมือนกัน ต่างกันที่บนมือถือจะมีขั้นตอนเพิ่มเติมเพื่อเปลี่ยน market เป็น Hive Store ก่อนส่งคำขอซื้อ

  1. (เฉพาะมือถือ) เรียก IAPV4.setMarketSelection(IAPV4Type.hiveStore) เพื่อเปลี่ยน market เป็น Hive Store

  2. เรียก IAPV4.purchase(marketPid, iapPayload, onIAPV4PurchaseCB) เพื่อส่งคำขอซื้อ

    Warning

    หากลงทะเบียน URL สำหรับข้อมูลการชำระเงินเสร็จสิ้นไว้ใน Hive Console Billing > Payment Environment Settings > PG Settings > Optional Feature Settings คุณต้องลบ URL นี้ก่อน

  3. เมื่อซื้อสินค้าสำเร็จ ระบบจะรับข้อมูลใบเสร็จ (bypassInfo) ผ่าน callback onIAPV4PurchaseCB

  4. เกมไคลเอนต์ส่งข้อมูลใบเสร็จนี้ไปยังเกมเซิร์ฟเวอร์

  5. เกมเซิร์ฟเวอร์เรียก Receipt Verification API เพื่อตรวจสอบข้อมูลใบเสร็จ

  6. หลังตรวจสอบสำเร็จ ให้เรียก IAPV4.transactionFinish เพื่อจบกระบวนการส่งมอบสินค้า

หากในขั้นตอน 3 ไม่ได้รับข้อมูลใบเสร็จที่บ่งชี้ว่าซื้อสำเร็จผ่าน callback onIAPV4PurchaseCB ให้เรียก IAPV4.restore เพื่อขอข้อมูลใบเสร็จสำหรับสินค้าที่ยังไม่ส่งมอบอีกครั้ง จากนั้นทำตามขั้นตอน 4-6 เพื่อให้การตรวจสอบใบเสร็จและการส่งมอบสินค้าเสร็จสมบูรณ์

Note

สำหรับรายละเอียดเพิ่มเติมของโฟลว์การประมวลผลใบเสร็จและวิธีตรวจสอบ โปรดดู Receipt Verification


การซื้อหลายจำนวน

Hive PG Payment รองรับการซื้อหลายจำนวน โดยการระบุจำนวนเมื่อขอซื้อ คุณสามารถซื้อผลิตภัณฑ์ในแอปเดียวกันมากกว่าหนึ่งรายการในการชำระเงินครั้งเดียว

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 call successful
                }
}));
```
API Reference: [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 purchase: marketPid iapPayload: iapPayload quantity handler: ^(HIVEResultAPI *result, HIVEIAPV4Receipt *receipt) {
        if ([result isSuccess]) {
                // TODO: Request verification of receipt with received receipt
        }
}];
```