Web PG payment
The web PG payment API is an API used when you want to implement PG payments on a website, although it does not use the Hive SDK billing when developing Windows apps. The web PG payment API is different from the API that implements PG payments in apps.
Note
To implement PG payment in the app, you need to use Hive SDK billing and general PG payment API.
Product list retrieval¶
Retrieves product information. Used to implement the product list in the app.
Request URL¶
Environment | URL |
---|---|
Production URL | https://store.withhive.com/external/api/product |
Sandbox URL | https://sandbox-store.withhive.com/external/api/product |
HTTP Method | POST |
Content-Type | text/html; charset=utf-8 |
Data Format | JSON |
Authorization | Bearer (token) |
The Bearer token corresponds to the Hive authentication key in the Hive console App Center > Project Management > Select Game Company > Game Details > Basic Information.
Request parameters¶
Field | Type | Required | Description |
---|---|---|---|
api | String | O | API identifier (`product` fixed value) |
market_id | String | O | Hive market ID (PG payment: `15` fixed value) |
appid | String | O | Hive Appid |
hive_country | String | O | Country code (ISO 3166-1 two letters) |
game_language | String | O | Language (ISO 639-1 two letters) |
vid | String | O | Hive account information (Player ID) |
vid_type | String | O | Account type (for new games v4) |
market_pid_type | String | O | Product type (consumable) |
Response elements¶
Field | Type | Required | Description |
---|---|---|---|
result | Integer | O | Response code (0 is success, others are errors) |
result_msg | String | O | Response message |
product_list | Object | O | List of product information |
product_list > market_pid | String | O | Product PID |
product_list > price | Int | O | Product price (numeric value) |
product_list > currency | String | O | Currency of the product price |
product_list > display_price | String | O | Product price (including currency symbol) |
product_list > title | String | O | Product name |
product_list > description | String | O | Product description |
product_list > product_type | String | O | Product classification (consumable: consumable) |
update_date | String | O | Last updated date and time of product PID information |
Request example¶
curl -L -v \
-d '{"api": "product","market_id": 15,"appid": "com.com2us.hivesdk.windows.microsoftstore.global.normal","hive_country": "KR","game_language": "ko","vid": "100000000000","vid_type": "v4","market_pid_type": "consumable"}' \
-H "Content-Type: text/html" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAyMDU2NzI2LCJqdGkiOiIxODczMTExMzIwIn0.3soFiHTPlObCoqR5xX9ZeOQTSvnHrHDHWmopP3QfWtY" \
https://sandbox-store.withhive.com/external/api/product
Response example¶
{
"result": 0,
"result_msg": "success",
"product_list": [
{
"market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01",
"price": 1200,
"currency": "KRW",
"display_price": "₩1,200",
"title": "크리스탈 한 줌",
"description": "크리스탈 한 줌",
"product_type": "consumable"
}, {
"market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item02",
"price": 2500,
"currency": "KRW",
"display_price": "₩2,500",
"title": "크리스탈 묶음",
"description": "크리스탈 묶음",
"product_type": "consumable"
}, {
"market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item03",
"price": 3900,
"currency": "KRW",
"display_price": "₩3,900",
"title": "크리스탈 더미",
"description": "크리스탈 더미",
"product_type": "consumable"
}
],
"update_date": "2022-10-28 16:11:23"
}
Product Order Request¶
Requests a product order using the PID
(Product ID) information selected from the product list.
Request URL¶
Environment | URL |
---|---|
Production URL | https://store.withhive.com/external/api/order |
Sandbox URL | https://sandbox-store.withhive.com/external/api/order |
HTTP Method | POST |
Content-Type | text/html; charset=utf-8 |
Data Format | JSON |
Authorization | Bearer (token) |
The Bearer token corresponds to the Hive authentication key in the Hive console App Center > Project Management > Select Game Company > Game Details > Basic Information.
Request parameters¶
Field | Type | Required | Description |
---|---|---|---|
market_id | String | O | Hive market ID |
appid | String | O | Hive Appid |
hive_country | String | O | Country code (ISO 3166-1 two letters) |
game_language | String | O | Language (ISO 639-1 two letters) |
vid | String | O | Hive account information (Player ID) |
vid_type | String | O | Account type (for new games, v4) |
market_pid | String | O | Product PID |
server_id | String | O | Server ID |
os | String | O | Window: W, MAC: M, Android: A |
quantity | Integer | X | Purchase quantity (default value is 1 if not sent) |
iap_payload | String | X | Purchase metadata defined by the app developer purchase meta information |
Request example¶
curl -L -v \
-d '{"market_id": 15,"appid": "com.com2us.hivesdk.windows.microsoftstore.global.normal","hive_country": "KR","game_language": "ko","vid": "100000000000","vid_type": "v4","market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01","server_id": "KR1","os": "A","quantity": 1,"iap_payload": "{\"character_id\":\"hivesdk01\"}"}' \
-H "Content-Type: text/html" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAyMDU2NzI2LCJqdGkiOiIxODczMTExMzIwIn0.3soFiHTPlObCoqR5xX9ZeOQTSvnHrHDHWmopP3QfWtY" \
https://sandbox-store.withhive.com/external/api/order
Response example¶
When the product order request is processed successfully, a popup window to select the payment method is returned. Below is the HTML page that composes the popup window.
Payment Completion History Inquiry¶
When the payment is completed, the payment agency (PG) directly transmits the payment result to the Hive IAP v4 server. This method compensates for the instability of the network and prevents tampering with payment data. During the pre-work, a cross-verification is performed by comparing the registered payment information with the information from the payment agency (PG). Once the integrity of the payment information is confirmed, additional safety measures are secured, and the payment information is stored. The stored payment information can be retrieved through the payment completion history inquiry API.
The client requests payment completion information from the game server at the necessary time, and the game server retrieves payment information through the Hive IAP v4 server. If there is a payment history for the user, payment information verification is performed using purchase_bypass_info
.
Request URL¶
Production URL | https://hiveiap.qpyou.cn/api_v4/purchases/unconsumed |
Sandbox URL | https://sandbox-hiveiap.qpyou.cn/api_v4/purchases/unconsumed |
HTTP Method | POST |
Content-Type | application/json |
Data Format | JSON |
Authorization | Bearer (token) |
---|
The Bearer token corresponds to the Hive authentication key in the Hive console App Center > Project Management > Select Game Company > Game Details > Basic Information.
Request parameters¶
Name | Type | Required (Required: M, Optional: O) | Description |
appid | String | M | ID registered and issued from the Hive console > App Center |
market_id | Number | M | Unique market ID (use fixed value `15`) |
server_id | String | M | Game server identification code where the payment occurred |
user_id_type | String | M | HIVE user type uid : Individual module (v0) vid : Authentication v1 (v1) player_id : Authentication v4 (v4) |
user_id | Number | M | HIVE user ID sent according to user_id_type uid : Individual module (v0) vid : Authentication v1 (v1) player_id : Authentication v4 (v4) |
Response elements¶
Name | Type | Required (Required: M, Optional: O) | Description |
result | Number | M | Response code (0: success) |
result_msg | String | M | Result message according to the response code |
unconsumed_lists | Object Array | M | |
┕ market_pid | String | M | Product unique ID |
┕ order_id | String | M | Order number |
┕ server_id | String | M | Game server identification code accessed by the purchasing user |
┕ vid | String | M | Player ID of the purchasing user, VID for v1 authentication |
┕ uid | String | O | UID of the purchasing user |
┕ amount | String | M | Payment amount |
┕ currency | String | M | Payment currency |
┕ quantity | Number | M | Purchase quantity |
┕ started_datetime | Datetime | M | Time when the payment started (Y-m-d H:i:s) |
┕ paid_datetime | Datetime | M | Time when the payment was completed (Y-m-d H:i:s) |
┕ hiveiap_receipt | String | M | Encrypted HASH of payment information |
┕ purchase_bypass_info | String | M | Essential information required for receipt verification request |
┕ additionalInfo | String | O | Additional information received from the client to send to the game server (in JSON String format) (returns null if no information is received) |
Request example¶
curl -L -v
-d '{"appid" : "com.com2us.hivesdk.windows.microsoftstore.global.normal","market_id" : 15,"server_id" : "kr","user_id_type": "player_id", "user_id": 30000056996}' \
-H "Content-Type: text/html" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAyMDU2NzI2LCJqdGkiOiIxODczMTExMzIwIn0.3soFiHTPlObCoqR5xX9ZeOQTSvnHrHDHWmopP3QfWtY" \
https://sandbox-hiveiap.qpyou.cn/api_v4/purchases/unconsumed
Response example¶
{
"result": 0,
"result_msg": "SUCCESS",
"unconsumed_lists": [
{
"market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01",
"order_id": "h2164792542890731850",
"server_id": "kr",
"vid": "30000056996",
"uid": "13079",
"amount": "1200",
"currency": "KRW",
"quantity": 1,
"started_datetime": "2022-03-22 14:03:49",
"paid_datetime": "2022-03-22 14:04:39",
"market_id": "15",
"hiveiap_receipt": "2YnGzfTCGycoMjcSyYyNXBjANwmFyB6m\/c0bYazQ8VQ=",
"purchase_bypass_info": "eyJtYXJrZXRfcGlkIjoiY29tLmNvbTJ1cy5oaXZlc2R...",
"additionalInfo": null
}
]
}
Payment Information Verification¶
The payment result verification API is based on IAP v4 receipt verification .
The payment result verification uses the purchase_bypass_info
received earlier. The purchase_bypass_info
contains various information received through the SDK before proceeding with the payment and is sent to Hive Analytics.
If you need to send the sales log along with the receipt verification request, please use game_info
. The received game_info
acts as an intermediary for sending logs to the analytics server from Hive IAP.
Request URL¶
Production URL | https://hiveiap-verify.qpyou.cn/api_v4/verify |
Sandbox URL | https://sandbox-hiveiap-verify.qpyou.cn/api_v4/verify |
HTTP Method | POST |
Content-Type | text/html |
Data Format | JSON |
Authorization | Bearer (token) |
---|
The Bearer token corresponds to the Hive authentication key in the Hive console App Center > Project Management > Select Game Company > Game Details > Basic Information.
Request parameters¶
Name | Type | Required (Required: M, Optional: O) | Description |
purchase_bypass_info | String | M | Data for receipt substitute and analytics transmission |
game_info | Object Array | O | If there are logs to be sent to the game, such as game logs or revenue logs, add this value to the game for transmission, and Hive IAP will act as an agent to send it to the analytics server. In the receipt verification stage, it is not possible to know whether the item has been delivered (itemsendok), so this part must be implemented separately and provided as additional information. |
⠀⠀server_uid | bigint | O | User_id issued by the game server If not, 0 |
⠀⠀giftee_uid | bigint | O | null: Payment for personal use 0: There is a gift recipient, but UID cannot be confirmed; Derby Days guest accounts do not have a hub guest account, so this applies here |
⠀⠀level | int | O | User's in-game level Not needed if there is no level. If not, 0. |
⠀⠀character_id | bigint | O | Unique character identifier value within the server (PK?). If there is no character concept, "0" |
⠀⠀character_type_id | int | O | Character type identifier value Input "0" for games without a character concept |
⠀⠀character_level | int | O | Character type identifier value Input "0" for games without a character concept |
⠀⠀is_emulator | int | O | Input "1" when accessing via PC emulator like BlueStacks, otherwise input "0" |
Response elements¶
Name | Type | Required (Required: M, Optional: O) | Description |
result | Number | M | Response code (Refer to Response Code) |
result_msg | String | M | Result message according to the response code |
hiveiap_transaction_id | String | M | Transaction ID generated for each successfully validated receipt. This value should be stored on the game server to perform duplicate receipt checks. |
hiveiap_market_id | String | O | Market unique number (PG payment: fixed at 15) |
hiveiap_market_pid | String | O | Payment product PID |
hiveiap_market_transaction_id | String | O | Unique order number for the order |
hiveiap_receipt | String | O | Market receipt Object value (PG payment: fixed at null) |
hiveiap_purchase_test | String | O | Test payment status (Y: test payment / N: regular payment) |
Response code¶
Code | Message | Comment |
0 | Success, Duplicate receipt | Verification successful |
1000001 | No requested parameter | No parameters were sent |
1000003 | DB Connection Error | When DB Connection fails |
1000005 | Internal Server Error | Internal server error |
1000006 | The required parameter info is missing | When the required parameter value is missing |
1000503 | Failed to authenticate the receipt | Failed to verify the receipt or it is a hacked receipt (e.g., spoofing hack) |
1000507 | Failed to save the purchase info | Failed to save purchase history |
1000524 | Failed to authenticate the receipt. (not exist order) | Receipt verification failed (non-existent order) |
1000525 | Failed to authenticate the receipt. (wrong param) | Receipt verification failed (parameter error) |
Request example¶
curl -L -v \
-d '{"purchase_bypass_info":"eyJtYXJrZXRfaWQiOiIxNSIsIm9yZGVyX2lkIjoiSDMxNjQ3OTI1NDI4OTA3MzE4NTAiLCJtYXJrZXRfcGlkIjoiY29tLmNvbTJ1cy5oaXZlc2RrLndpbmRvd3MubWljcm9zb2Z0c3RvcmUuZ2xvYmFsLm5vcm1hbC5pdGVtMDEiLCJ2aWQiOiIzMDAwMDA1Njk5NiIsInVpZCI6IjEzMDc5Iiwic2VydmVyX2lkIjoia3IiLCJhcHBpZCI6ImNvbS5jb20ydXMuaGl2ZXNkay53aW5kb3dzLm1pY3Jvc29mdHN0b3JlLmdsb2JhbC5ub3JtYWwiLCJhbW91bnQiOiIxMjAwIiwic3RhcnRlZF9kYXRldGltZSI6bnVsbCwicGFpZF9kYXRldGltZSI6bnVsbCwiY3VycmVuY3kiOiJLUlciLCJoaXZlaWFwX3JlY2VpcHQiOiIyWW5HemZUQ0d5Y29NamNTeVl5TlhCakFOd21GeUI2bVwvYzBiWWF6UThWUT0ifQ=="}' \
-H "Content-Type: text/html" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAyMDU2NzI2LCJqdGkiOiIxODczMTExMzIwIn0.3soFiHTPlObCoqR5xX9ZeOQTSvnHrHDHWmopP3QfWtY" \
https://sandbox-hiveiap-verify.qpyou.cn/api_v4/verify
Response example¶
{
"result": 0,
"result_msg": "success",
"hiveiap_transaction_id": "HS_13",
"hiveiap_market_id": 15,
"hiveiap_market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01",
"hiveiap_market_transaction_id": "h2164792542890731850",
"hiveiap_receipt": null,
"hiveiap_purchase_test": "N"
}
Payment Result Processing¶
Payment Result Processing API is based on IAP v4 Item Payment Result Transmission. Through the Payment Result Processing API, the payment process from item purchase to payment completion is finalized. If the payment process is not completed, the user cannot purchase the same product. If the user attempts to purchase and enters the payment page, a message saying 'You already own this product.' will be displayed, and the payment will not proceed.
When attempting to purchase and pay by opening multiple payment windows, all products for which payment has not been processed will be automatically canceled. After processing all payment procedures, such as checking purchase limits and item delivery conducted by the game server, the payment result is sent to notify the Hive IAP v4 server that the payment has been completed. If you wish to request a cancellation of the payment, you can also request the cancellation through the delivery result processing API.
Request URL¶
Production URL | https://hiveiap.qpyou.cn/api_v4/item_result |
Sandbox URL | https://sandbox-hiveiap.qpyou.cn/api_v4/item_result |
HTTP Method | POST |
Content-Type | text/html |
Data Format | JSON |
Authorization | Bearer (token) |
---|
The Bearer token corresponds to the Hive authentication key in the Hive console App Center > Project Management > Select Game Company > Game Details > Basic Information.
Request parameters¶
Name | Type | Required (Required: M, Optional: O) | Description |
hiveiap_transaction_id | String | M | hiveiap_transaction_id of the receipt verification result |
result_status | Number | M | Item delivery success status 0: Delivery failed 1: Delivery succeeded 2: Payment cancellation refund request (PG only) |
result_status_message | String | O | Reason for delivery failure or payment cancellation request |
user_id_type | String | M | Hive user type v0: Individual module (uid) v1: Authentication v1 (vid) v4: Authentication v4 (player_id) |
user_id | Number | M | User ID If user_id_type is v0, send uid; if v1, send vid; if v4, send player_id |
asset | Object Array | O | Information of the delivered items Only send values when delivery is successful, and respond with an empty array ([]) when delivery fails |
asset_id | String | O | Item ID |
asset_name | String | O | Item name |
⠀⠀quantity | Number | O | Number of items delivered |
Response elements¶
Name | Type | Required (Required: M, Optional: O) | Description |
result | Number | M | Response code (0: success) |
result_msg | String | M | Result message according to the response code |
Request example¶
curl -L -v
-d '{"hiveiap_transaction_id" : "HS_13","result_status": 1,"user_id_type": "vid","user_id": 30000056996,"asset": [ {"asset_id":"item_id","asset_name":"item_name","quantity":1}
,{"asset_id":"item_id","asset_name":"item_name","quantity":1}]}' \
-H "Content-Type: text/html" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAyMDU2NzI2LCJqdGkiOiIxODczMTExMzIwIn0.3soFiHTPlObCoqR5xX9ZeOQTSvnHrHDHWmopP3QfWtY" \
https://sandbox-hiveiap.qpyou.cn/api_v4/item_result
Response example¶
Payment Result Notification Service¶
The payment result notification service sends the result to the game server immediately upon completion or cancellation of the payment. This API passes the purchase_bypass_info
value just like the payment completion history inquiry, allowing the game to use this value to verify the receipt before granting the product to the user. Receipt verification and product granting should only be performed when the type
in the payment result transmission information is paid.
Note
To use this API, you must first set up the PG company in the Hive console. For receipt verification and product delivery, it is recommended to use either this API or the payment completion history inquiry API.
Basic Information on Payment Result Transmission¶
HTTP Method | POST |
Content-Type | application/json |
Data Format | JSON |
Payment Result Transmission Information¶
Name | Type | Required (Required: M, Optional: O) | Description |
type | String | M | Notification type (paid: Payment completed, cancelled: Payment cancelled or refunded) |
market_pid | String | M | Unique product ID |
order_id | String | M | Order number |
server_id | String | M | Code distinguishing the game server the user purchased from |
vid | Number | M | User's PlayerID, VID for v1 authentication |
vid_type | String | O | vid type value according to SDK version (default v4) |
uid | Number | O | User's uid |
amount | String | M | Payment amount |
currency | String | M | Payment currency |
quantity | Number | M | Purchase quantity |
started_datetime | Datetime | M | Time when the payment started (Y-m-d H:i:s) |
paid_datetime | Datetime | M | Time when the payment was completed (Y-m-d H:i:s) |
cancelled_datetime | Datetime | O | Time when the payment was cancelled or refunded (Y-m-d H:i:s) |
cancelled_reason | String | O | Reason for the payment being cancelled or refunded |
hiveiap_receipt | String | M | Encrypted HASH of payment information |
purchase_bypass_info | String | M | Essential information required for receipt verification request |
additionalInfo | String | O | Additional information received from the client to send to the game server. It is in JSON String format, and returns null if no information is received. |
Payment Result Transmission Example (Upon Payment Completion)¶
{
"type": "paid",
"market_id": "15",
"order_id": "H2168993822440686730",
"market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01",
"vid": "20000011337",
"uid": "67200717",
"vid_type": "v4",
"server_id": "kr",
"appid": "com.com2us.hivesdk.windows.microsoftstore.global.normal",
"amount": "1200",
"started_datetime": "2023-07-21 20:17:06",
"paid_datetime": "2023-07-21 20:18:13",
"cancelled_datetime": null,
"cancelled_reason": null,
"currency": "KRW",
"quantity": 1,
"additionalInfo": null,
"hiveiap_receipt": "tJpwQSIlNFiCSPokHSRYTvTLmtbDiSZnkYa7+IWaMwM=",
"purchase_bypass_info": "eyJ0eXBlIjoicGFpZCIsIm1hcmtldF9pZCI6IjE1Iiwib3JkZXJfaWQiOi..."
}
Payment Result Transmission Example (When Payment is Canceled)¶
{
"type": "cancelled",
"market_id": "15",
"order_id": "H2168993822440686730",
"market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01",
"vid": "20000011337",
"uid": "67200717",
"vid_type": "v4",
"server_id": "kr",
"appid": "com.com2us.hivesdk.windows.microsoftstore.global.normal",
"amount": "1200",
"started_datetime": "2023-07-21 20:17:06",
"paid_datetime": "2023-07-21 20:18:13",
"cancelled_datetime": "2023-07-21 20:21:44",
"cancelled_reason": "테스트 결제 취소",
"currency": "KRW",
"quantity": 1,
"additionalInfo": null,
"hiveiap_receipt": "tJpwQSIlNFiCSPokHSRYTvTLmtbDiSZnkYa7+IWaMwM=",
"purchase_bypass_info": "eyJ0eXBlIjoiY2FuY2VsbGVkIiwibWFya2V0X2lkIjoiMT..."
}