没有不值得去解决的问题,也没有不值得去学习的技术!

Why ZgoCloud Bills Remain Unpaid After Renewing Self-Hosted Services With USDT.TRC20

Figure 6: USDT.TRC20 receiving address and QR code generated by CoinPayments

作者:

在

For the self-hosted network service I am currently using, I still chose ZgoCloud for the server.

I have been using this Los Angeles VPS continuously for about 3 months. When I first purchased it, I chose Alipay for payment, and the whole process was quite simple. After receiving the new renewal invoice this time, instead of continuing to use Alipay, I decided to test ZgoCloud’s newly offered USDT.TRC20 payment method.

I originally just wanted to confirm whether USDT could actually complete the renewal. As it turned out, although the on-chain payment succeeded quickly and CoinPayments explicitly confirmed receipt of the full amount, the ZgoCloud invoice still showed UNPAID for a long time.

Ultimately, I had to submit a Billing ticket for staff to manually process the invoice.

This article documents this complete testing process.

This article records the actual operations performed on August 4, 2026. Cryptocurrency transfers are usually irreversible, so when performing actual operations, you must carefully verify the currency, network, address, and received amount.

1. Continuing to Use ZgoCloud for Self-Hosted Network Services

Three months ago, I purchased ZgoCloud’s Los Angeles VPS to set up my own network service.

The generated renewal invoice information is as follows:

  • Product: Los Angeles AMD Optimised VPS – Pro – wireguard
  • Invoice amount: $45
  • Invoice date: August 2, 2026
  • Due date: August 9, 2026
  • Renewal period: August 9, 2026 to November 8, 2026
  • Invoice number: 20260840507

For my first payment, I used Stripe Alipay, which is Alipay payment integrated via Stripe.

This time, my main goal was to test whether the USDT payment method provided by ZgoCloud actually works.

If you need to know the current plans and prices, you can check them via the “ZgoCloud service page“.

Figure 1: $45 renewal invoice email sent by ZgoCloud
Figure 1: $45 renewal invoice email sent by ZgoCloud

After entering the ZgoCloud Billing page, you can see that the new invoice status is UNPAID, with an amount of $45.

Figure 2: Unpaid invoice in the ZgoCloud Billing page
Figure 2: Unpaid invoice in the ZgoCloud Billing page

2. Payment Methods Provided by ZgoCloud

After opening the invoice and clicking Pay Now!, you can see that ZgoCloud offered the following payment methods at the time:

  • Stripe Alipay
  • Stripe Checkout
  • PayPal Checkout
  • USDT.TRC20
  • Credit Balance
Figure 3: ZgoCloud invoice payment method list
Figure 3: ZgoCloud invoice payment method list

After selecting USDT.TRC20, click Pay Now! again.

Figure 4: Selecting the USDT.TRC20 payment method
Figure 4: Selecting the USDT.TRC20 payment method

The page then redirects to CoinPayments.

CoinPayments is the intermediate processing platform for this cryptocurrency payment. The ZgoCloud invoice amount is $45, but the CoinPayments page requires a payment of:

Plaintext
48.32630000 USDT.TRC20
Figure 5: CoinPayments shows a required payment of 48.3263 USDT
Figure 5: CoinPayments shows a required payment of 48.3263 USDT

Estimating based on 1 USDT ≈ 1 USD, this is about $3.3263 more than the original invoice amount, equivalent to approximately 7.39% of the invoice amount.

The page does not clearly list the full breakdown of this difference, so it is impossible to determine solely from the page whether it comes from the payment platform’s quote, merchant settings, settlement costs, or other fees.

Since my main purpose this time was to test the USDT payment process, I still decided to proceed.

3. Generating a USDT.TRC20 Receiving Address

After confirming the currency, CoinPayments generated a payment page specifically for this transaction.

The page includes:

  • Amount due
  • TRC20 receiving address
  • QR code
  • Payment ID
  • Verification Code
  • Payment countdown
Figure 6: USDT.TRC20 receiving address and QR code generated by CoinPayments
Figure 6: USDT.TRC20 receiving address and QR code generated by CoinPayments

Special attention is needed here:

  1. The currency must be USDT;
  2. The network must be TRON / TRC20;
  3. You must ensure that the recipient actually receives the full 48.3263 USDT;
  4. The order has a validity period, so you cannot continue paying to the old address after the page expires;
  5. Do not use other networks like ERC20 or BEP20.

Once a cryptocurrency transfer uses the wrong network, it is usually very difficult to recover.

4. Choosing On-Chain Withdrawal on Binance

I used the Binance mobile app to complete this transfer.

After clicking “Withdraw” in my Binance spot account, the page provided several options:

  • Transfer to Binance user
  • Withdraw asset
  • Withdraw USD
  • C2C trading

Here, I needed to select “Withdraw asset”, because CoinPayments provides an external blockchain address, not an internal Binance account.

Figure 7: Withdrawal method selection in Binance's "Withdraw" menu
Figure 7: Withdrawal method selection in Binance’s “Withdraw” menu

Next, select the currency USDT.

Figure 8: Selecting USDT on Binance
Figure 8: Selecting USDT on Binance

After scanning the QR code on the CoinPayments page, Binance automatically recognized the address and displayed the main network as TRX.

Figure 9: Binance recognizes the receiving address and selects the TRX mainnet
Figure 9: Binance recognizes the receiving address and selects the TRX mainnet

Here, TRX refers to the TRON network.

The withdrawn asset is still USDT, the full meaning being:

Plaintext
USDT on TRON
USDT.TRC20

The Binance page also suggested that using the BSC network has lower fees, but this is merely a recommendation from Binance.

The CoinPayments order specifies USDT.TRC20, so you cannot switch to BSC just to save on fees. Whatever network the receiving platform specifies, you must select the same network when withdrawing.

5. You Cannot Just Enter 48.3263 USDT Directly

CoinPayments requires:

Plaintext
Actual received amount: 48.3263 USDT

However, the Binance withdrawal fee for the TRON network is:

Plaintext
1.5 USDT

I initially entered 48.3263 USDT directly, and the Binance page showed:

  • Withdrawal amount: 48.3263 USDT
  • Network fee: 1.5 USDT
  • Received amount: 46.8263 USDT
Figure 10: After entering 48.3263 USDT directly, the actual received amount is only 46.8263 USDT
Figure 10: After entering 48.3263 USDT directly, the actual received amount is only 46.8263 USDT

If I had submitted directly at this point, the amount received by CoinPayments would have been insufficient, and the invoice would likely not have been completed automatically.

Therefore, the network fee must be factored in additionally:

Plaintext
48.3263 + 1.5 = 49.8263 USDT

After adjusting the withdrawal amount to 49.8263 USDT, Binance showed:

  • Withdrawal amount: 49.8263 USDT
  • Network fee: 1.5 USDT
  • Received amount: 48.3263 USDT
Figure 11: After adjustment, the actual received amount is exactly 48.3263 USDT
Figure 11: After adjustment, the actual received amount is exactly 48.3263 USDT

This point is the most error-prone part of the entire payment process.

CoinPayments displays the amount the merchant needs to receive, while the amount in the Binance input box includes the network fee that is about to be deducted. When operating, you must base your actions on the “Received amount” at the bottom of the Binance page.

6. Confirming the Network, Address, and Amount

After entering the final confirmation page, Binance once again displayed the transfer details:

  • Received amount: 48.3263 USDT
  • Main network: Tron (TRC20)
  • Withdrawal amount: 49.8263 USDT
  • Network fee: 1.5 USDT
  • Receiving address: Matches the CoinPayments page
Figure 12: Binance withdrawal order final confirmation page
Figure 12: Binance withdrawal order final confirmation page

After confirming that all the following details were correct, I swiped to submit:

Plaintext
Asset: USDT
Network: Tron (TRC20)
Actual received amount: 48.3263 USDT
Receiving address: Exactly matches CoinPayments
Memo/Tag: Not required

7. Binance Completes the Transfer Quickly

After submitting, Binance first showed “Withdrawal processing”, estimated to complete in about a minute or two.

Figure 13: Binance shows withdrawal processing
Figure 13: Binance shows withdrawal processing

Subsequently, the withdrawal record changed to “Completed”.

The page shows:

  • Actual transfer: 48.3263 USDT
  • Network: TRX
  • Total withdrawal amount: 49.8263 USDT
  • Network fee: 1.5 USDT
  • Transaction hash: Generated
  • Completion time: Around 10:06 on August 4, 2026
Figure 14: Binance withdrawal completed and transaction hash generated
Figure 14: Binance withdrawal completed and transaction hash generated

This means Binance has sent the USDT to the TRC20 address provided by CoinPayments.

8. CoinPayments Confirms Receipt of Payment

After Binance completed the withdrawal, the CoinPayments page initially still showed the full remaining amount.

Figure 15: After Binance completes, CoinPayments is waiting for recognition and confirmation
Figure 15: After Binance completes, CoinPayments is waiting for recognition and confirmation

After waiting for blockchain confirmations, the CoinPayments page changed to a green “Paid” status.

Figure 16: CoinPayments shows payment complete
Figure 16: CoinPayments shows payment complete

CoinPayments subsequently sent an email with the subject Payment Funds Received.

The email clearly stated:

  • All required funds have been received;
  • The received amount is 48.32630000 USDT.TRC20;
  • The payment was made to ZgoCloud;
  • The Payment status is Complete.
Figure 17: Payment completion email sent by CoinPayments
Figure 17: Payment completion email sent by CoinPayments

At this point, it can be confirmed that:

Using Binance to transfer USDT via the TRON network, CoinPayments can indeed properly recognize and complete the ZgoCloud payment.

But the problem also started from here.

9. CoinPayments Paid, but ZgoCloud Still Shows Unpaid

After clicking Continue to seller's store on the CoinPayments page to return to ZgoCloud, the invoice status did not change to PAID.

The page still showed:

Plaintext
Status: Unpaid
Balance: $45.00 USD
Figure 18: CoinPayments is complete, but the ZgoCloud invoice still shows Unpaid
Figure 18: CoinPayments is complete, but the ZgoCloud invoice still shows Unpaid

At first, I thought there was just a delay in invoice synchronization, so I waited for a while.

But from around 10 AM until the afternoon, after more than 7 hours, the invoice still had not updated.

At this point, it could no longer be simply understood as a normal synchronization delay of a few minutes.

It must be emphasized that:

When CoinPayments has already confirmed receipt of the full payment, absolutely do not make another payment just because ZgoCloud still shows Unpaid.

Paying again will only result in duplicate payments, making subsequent handling much more troublesome.

10. Submitting a Ticket to ZgoCloud’s Billing Department

Since the invoice was not automatically reconciled for a long time, I navigated to:

Plaintext
Support Tickets
→ Open New Support Ticket
→ Billing

I provided the following information in the ticket:

  • ZgoCloud invoice number
  • Payment method
  • Amount actually received by CoinPayments
  • CoinPayments Payment ID
  • TRON transaction hash
  • Payment completion time
  • Statement that CoinPayments has confirmed the payment

I also requested ZgoCloud to check the CoinPayments callback or IPN records, and to manually apply the payment to the corresponding invoice.

Figure 19: Filling out the ticket content for the Billing department
Figure 19: Filling out the ticket content for the Billing department

I also uploaded the following payment evidence:

  1. CoinPayments payment completion email;
  2. CoinPayments green “Paid” page;
  3. Binance withdrawal completion record;
  4. Page showing the ZgoCloud invoice still as Unpaid.

Since the attachments contained transaction records and account information, I checked the sensitive content encryption option.

Figure 20: Uploading four pieces of payment evidence and submitting the ticket
Figure 20: Uploading four pieces of payment evidence and submitting the ticket

The ticket was submitted successfully, with the number:

Plaintext
#578686
Figure 21: ZgoCloud ticket created successfully
Figure 21: ZgoCloud ticket created successfully

After entering the ticket, you can see that the department is BILLING, the status is OPEN, and the body and payment information have been properly saved.

Figure 22: Ticket that has entered the Billing processing queue
Figure 22: Ticket that has entered the Billing processing queue

11. ZgoCloud Manually Processes the Invoice

Around 21:15 in the evening, a ZgoCloud staff member replied:

Plaintext
Dear qiang wang,

Manually processed for you.

This means that this payment ultimately required manual processing by staff.

Figure 23: ZgoCloud replies that it has been manually processed
Figure 23: ZgoCloud replies that it has been manually processed

Subsequently, upon opening the invoice again, the status finally changed from UNPAID to the green PAID.

The service period corresponding to the invoice is:

Plaintext
2026-08-09 to 2026-11-08
Figure 24: ZgoCloud invoice finally changes to PAID

12. How Much Was Actually Paid This Time

The original invoice amount was:

Plaintext
45.00 USD

CoinPayments required actual receipt of:

Plaintext
48.3263 USDT

Binance charged a TRON network fee of:

Plaintext
1.5 USDT

Therefore, the total amount I actually spent on Binance was:

Plaintext
49.8263 USDT

Estimating roughly based on 1 USDT ≈ 1 USD, compared to the original $45 invoice, the extra amount spent was:

Plaintext
49.8263 - 45 = 4.8263

The total cost is about 10.73% higher than the invoice face value.

Therefore, from a purely cost-saving perspective, this USDT.TRC20 payment was not a better deal than Alipay.

However, the main purpose of this test was not to save money, but to confirm:

  • Whether ZgoCloud’s USDT.TRC20 portal actually works;
  • Whether Binance can transfer directly to a CoinPayments address;
  • Whether CoinPayments can automatically recognize the payment;
  • Whether ZgoCloud can automatically reconcile the invoice after the payment is completed.

The final test results are:

  • Binance transfer: Successful;
  • TRON on-chain receipt: Successful;
  • CoinPayments receipt: Successful;
  • CoinPayments payment status: Complete;
  • ZgoCloud automatic invoice reconciliation: Failed;
  • ZgoCloud manual processing: Successful.

13. Lessons Learned from This Test

1. You Must Select the Correct Network

CoinPayments specifies USDT.TRC20, so in Binance you must select:

Plaintext
Tron(TRC20)

You cannot select BSC, ERC20, or other networks.

2. Base Your Actions on the “Received Amount”

The fact that CoinPayments requires receiving 48.3263 USDT does not mean you only need to enter 48.3263 in the Binance withdrawal input box.

You also need to factor in the network fee charged by Binance.

3. Not Suitable for Sending a Small Test Transaction First

CoinPayments orders have a fixed amount and a countdown.

Sending a small test amount first may not properly match the invoice, and could instead result in an insufficient payment or require manual processing.

4. Save All Payment Vouchers

You should save at least:

  • ZgoCloud invoice number;
  • CoinPayments Payment ID;
  • CoinPayments Verification Code;
  • TRON transaction hash;
  • Binance withdrawal completion record;
  • CoinPayments payment completion email.

If the merchant’s invoice is not updated automatically, this information serves as crucial evidence for submitting a ticket.

5. Do Not Make Duplicate Payments After CoinPayments is Complete

As long as CoinPayments clearly shows Paid or Complete, it means the funds have reached the payment processing platform.

Even if the merchant backend still shows Unpaid, you should contact the merchant to handle it first, rather than making another payment.

6. Automatic Callbacks May Fail

This time, the processes on Binance and CoinPayments were both smooth; the real problem occurred during ZgoCloud’s invoice synchronization step.

Given that manual processing was ultimately required, it is highly likely that the CoinPayments callback, IPN, or ZgoCloud’s internal invoice association did not complete properly.

This is just the situation I actually encountered this time, and it does not mean every USDT payment will fail. However, it at least shows that when using this payment method, it is best to allow time for manual processing.

14. Summary

This test ultimately proved that ZgoCloud’s USDT.TRC20 payment method can indeed be used to complete payments.

I transferred USDT from Binance to the TRON address provided by CoinPayments. Binance completed the withdrawal quickly, and CoinPayments explicitly confirmed receipt of the full amount.

However, after the payment was successful, the ZgoCloud invoice still showed UNPAID for a long time. After waiting for more than 7 hours, I submitted a Billing ticket, and the staff ultimately manually processed the invoice as PAID.

Therefore, the conclusion of this test can be summarized as:

The USDT.TRC20 payment itself works, but the payment cost is higher than the invoice face value, and there is a risk that the merchant’s invoice cannot be automatically reconciled.

For routine renewals, if Alipay is still available, I will most likely prioritize Alipay.

USDT.TRC20 is more suitable as a backup payment method when bank cards, Alipay, or PayPal are inconvenient to use.

I am still continuing to use this ZgoCloud VPS. If you need to compare plans, datacenters, and payment methods yourself, you can check [ZgoCloud’s current service information].

系列导航

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系