Bots.Business - Help
  • Welcome
  • Getting started
  • Create bot from Google Table
  • App
    • Reset or Update Your Password
  • Commands
    • Answer
    • Aliases
    • Keyboard
    • Groups
    • Wait for answer
    • Auto Retry (AR)
  • Coding: BJS
    • Variables
    • Bot functions
    • Message broadcasting and editing
    • User functions
    • Properties
    • Always running commands
    • Error command: "!"
    • Lists
      • Migration from properties to list
    • Api functions
    • BB Admin functions
    • Admin Panel
    • Send HTTP request
    • Web App
    • Caching
    • Inline Bot
    • BJS Security
    • Good coding practices
    • Top errors
  • Git
    • Import bot from Git repository
    • Export bot to Git repository
    • Repository structure
    • File: bot.json
    • Automatic importing on Git push
  • Iterations. How to reduce theys?
  • Limitations
  • Cloud
  • Reports
  • Deep Linking - pass any params on Bot starting
  • How to link chat account with BB account?
  • BB Inspection
  • Protected bot
  • VS Code
  • How to...
  • Smart Bot
    • Overview
    • Lang File
    • SmartBot
    • SmartTasker
    • Amount Dialog
  • Libs
    • What it is - Libs?
    • Libs development
    • RefferalLib
    • ResourcesLib
    • Random
    • MembershipChecker (MCL)
    • Cooldown Lib
    • CurrencyConverter
    • Lang
    • TopBoardLib
    • QiwiPayments
    • Coinbase (CB)
    • CoinPayments (CP)
    • OxaPay
    • CryptoJS
    • CurrencyQuote
    • GoogleApp
    • GoogleTableSync
    • Guard
    • Webhooks lib
    • DateTimeFormat Lib
  • Store
    • BB Point Bot
    • Welcome bot
    • Help bot
    • SRB Demo Keyboard Tools
Powered by GitBook
On this page
  • Initial setup
  • Call API methods
  • Combine libs!
  • Receiving Payments
  • Setup: set IPN Secret
  • Temporary wallet
  • Command /pay
  • Command /onCreatePayment
  • Command /onPaymentCompleted
  • Finished!
  • Information about extra payments and refunds.
  • Additional Information
  • Permanent wallet
  • Command /createWallet
  • Command /onWalletCreate
  • Command /onIncome
  • Troubleshooting & Debuging
  • IPN History
  • Test methods
  • Security
  • Do not process any before payment!

Was this helpful?

  1. Libs

CoinPayments (CP)

PreviousCoinbase (CB)NextOxaPay

Last updated 3 years ago

Was this helpful?

This Lib make integration with in easy way.

Initial setup

Need to setup public and private key:

  1. Go to this and generate new key.

Press on button "Edit Permissions" and add API Key Permissions:

Then on bot /setup command:

// Get your keys in https://www.coinpayments.net/index.php?cmd=acct_api_keys
Libs.CoinPayments.setPrivateKey("YOUR KEY");
Libs.CoinPayments.setPublicKey('YOUR KEY');

// for Receiving Payments
// Get your BB Api Key from Bots.Business App in Profile
Libs.CoinPayments.setBBApiKey('YOUR API KEY');

Call API methods

/info command:

Libs.CoinPayments.apiCall({
  fields: { cmd: "get_basic_info"},
  onSuccess: '/onInfo'
});

/onInfo command:

Bot.sendMessage(inspect(options));
Bot.sendMessage("CoinPayments owner email:" + options.body.result.email);

Combine libs!

CoinPayments API do not have some methods. For example get balance by address, validate address, get transactions for address and etc.

Block.io is free if you do not use wallets there.

Receiving Payments

It is possible to receive payment for a temporary or permanent wallet.

Temporary wallet benefits:

  • Fixed amount

  • Can bind the payment to the ordered product

  • Status and checkout page

  • QR code for payment

  • one address for one payment

Permanent wallet benefits:

  • Any amount

  • One address for several payments

  • User can transfer funds at any time

Setup: set IPN Secret

Your IPN Secret is a string of your choosing. Recommended to be a random string of letters, numbers, and special characters.

CoinPayments will not send any IPNs unless you have an IPN Secret set.

Once more! You need input any text (random text) as IPN secret in Merchant Settings page

Temporary wallet

We use command "create_transaction" with IPN.

Yes, you can write it via Libs.CoinPayments.apiCallmethod too. But there is an easier way.

Command /pay

let amount = 0.0001; // amount in BTC

options = {
  fields: {
     amount: amount,   // amount in BTC
     currency: "BTC",  // currency1 = currency2 = BTC
     // currency1: "BTC",   // The original currency of the transaction
     // currency2: "LTC"  //The currency the buyer will be sending
     // buyer_email: "user@example.com",
     // you can use another fields also
     // except custom and ipn_url (it used by Lib)
     // See https://www.coinpayments.net/apidoc-create-transaction
  },
  // generated wallet, QR code, payment page
  // will be available in this command
  onSuccess: '/onCreatePayment',
  
  // on successful payment this command
  // will be executed
  onPaymentCompleted: "/onPaymentCompleted",
  
  // it is not necessary
  // onIPN: "/onIPN"
  
  // if you want customize error messages
  // onError: "/onError"
}

Libs.CoinPayments.createTransaction(options);

Automatically with Library:

It is preferable to use method onPaymentCompleted and not method onIPN.

Command /onCreatePayment

// You can inspect all options:
// Bot.sendMessage(inspect(options));

let result = options.result;

let msg = "*Need pay:*\n `" + result.amount + "`" + 
 "\n\n*to address:*\n" +
 "`" + result.address + "`" +
 "\n\n [Checkout](" + result.checkout_url +
    ") | [Status](" + result.status_url + 
 ")" // you can uncomment this for manual status checking
 // + "\n\nCheck status manually: /check" + options.payment_index;

Bot.sendMessage(msg);
Api.sendPhoto({ photo: result.qrcode_url }); 

Command /onPaymentCompleted

This command will be executed on successful payment

Need install ResourcesLib

// you can inspect all options
// Bot.sendMessage(inspect(options));

if(!options){
   // for security we need to check that this command runned only by lib
   // user can not run command with options
   return
}

Bot.sendMessage("Payment completed");

let amount = options.amount1;

let res = Libs.ResourcesLib.userRes("balance");
res.add(amount)

Bot.sendMessage("added to balance, BTC: " + amount);

Finished!

Now you can receive payments

Information about extra payments and refunds.

Please note: CoinPayments do not send you extra payments. CoinPayments send just email to buyer (or you) about refund for that extra.

Also no any information about such extra in CP Panel or IPN. Be careful

Additional Information

You can check payment status

Libs.CoinPayments.getTxInfo({
  payment_index: payment_index,  // see /onCreatePayment command.
                                    // Need pass this payment_index to this command
  onSuccess: '/on_txn_id'
})

command: /on_txn_id:

// You can inspect all options:
// Bot.sendMessage(inspect(options));

Bot.sendMessage(options.result.status_text);

// Do not finish payment here.
// Use /onPaymentCompleted for this

command /onIPN

You can get info from IPN. Really it is not needed in simple. Just use onPaymentCompleted option on createTransaction.

// You can inspect all fields:
// Bot.sendMessage(inspect(options))

// IPN is not needed
// Use - onPaymentCompleted

Bot.sendMessage("IPN: Payment status: " + options.status_text );

command onError

// You can inspect all fields:
Bot.sendMessage(inspect(options))

Permanent wallet

We use command "get_callback_address" with IPN.

Yes, you can write it via Libs.CoinPayments.apiCallmethod too. But there is an easier way.

Command /createWallet

Libs.CoinPayments.createPermanentWallet({
  currency: "BTC",
  //label: "myLabel",
  onSuccess: "/onWalletCreate",
  
  // onIPN - not necessary
  //onIPN: "/onPermanentWalletIPN",
  
  onIncome: "/onIncome"
  
  // if you want customize error messages
  // onError: "/onError"
});

Automatically with Library:

It is preferable to use method onIncome and not method onIPN.

Command /onWalletCreate

//Bot.sendMessage(inspect(options));

let wallet = options.result.address;
Bot.sendMessage("Your permanent wallet address is:\n`" + wallet + "`")

// You can save wallet
//User.setProperty("wallet", wallet, "string");

Command /onIncome

// anybody can run /onIncome command!

if(!options){
   // for security we need to check that this command runned only by lib
   // user can not run command with options
   return
}

let wallet = options.address;
let currency = options.currency;
let amount = options.amount;

let fiat_amount = options.fiat_amount;
let fiat_currency = options.fiat_coin;

let fee = options.fee;

let txn_id = options.txn_id

// see another fields by
// Bot.sendMessage(inspect(options));

Bot.sendMessage(
   "*Income to wallet:*" +
   "\n`"+ wallet + "`" +
   "\n\n*Amount*:\n" +
amount + " " + currency + " (" + fiat_amount + " " + fiat_currency + ")" +
   "\n*Fee*: " + fee +
   "\n\nTXN: `" + txn_id + "`"
);

command onError

// You can inspect all fields:
Bot.sendMessage(inspect(options))

Troubleshooting & Debuging

  • Do not use same CoinPayment account for receiving and transfering funds.

  • Try to resend IPN - see Debuging

IPN History

Also you can resend IPN by checkin "Resend" checkbox and button "Re-send checked IPN(s)"

Test methods

Temporary wallet:

Also it is possible make test onPaymentCompleted event. It is good if you do not want make test payment.

options = {
  onPaymentCompleted: "/onPaymentCompleted 0.75"
}

Libs.CoinPayments.callTestPaymentCompleted(options);

Permanent wallet:

Also it is possible make test callTestPermanentWalletIncome event. It is good if you do not want make test payment.

options = {
  // onIPN: "/onPermanentWalletIPN",  // if you need IPN also
  onIncome: "/onIncome",
  
  // not necessary options
  // you can pass amount
  //amount: 0.5
  // txn_id: YOUR_TXN_ID
}

Libs.CoinPayments.callTestPermanentWalletIncome(options);

Security

It is strongly recommended to pay attention to safety when using this library.

Do not use default names for secure commands such as /onIncome, /onPaymentCompleted

Anybody can run any command by names. So need to check that security command runned by CoinPayment Lib only!

if(!options){
   // for security we need to check that this command runned only by lib
   // user can not run command with options
   return
}

// your secure code
...

Do not use any non official libs now.

  • Any lib can run command with options.

  • Any libs can read properties (and read your API Keys from other lib)

We have not way to protect this now. Just not use NON official libs with CP lib. Well, that now there are no such libraries

Grant only the really necessary permissions for the Api key. If yor bot do not need "create_withdrawal" or etc methods - turn theys off.

Do not process any before payment!

Any API commands can have errors: API errors, timeout errors, network errors, and other errors.

You need to withdraw, make deposit income only on success!

Because if you get an error, such a conclusion, replenishment of the deposit, etc. - will always be!

All CoinPayments API method available .

For example for method we need 2 commands: /info and /onInfo

In fields you can pass all fields from CoinPayments api. Just read .

Use Block.io with CP Lib together!

See . Available in the Store.

The first step is to go to the page > Merchant Settings and set a IPN Secret.

See

Please see for details.

CoinPayments:

Since the method onPaymentCompleted completely covers the IPN and solves the problem with

It is possible to define buyer email in fields for options ( code for command /pay )

Please see for details.

CoinPayments:

Since the method onIncome completely covers the IPN and solves the problem with

Go to . This list must have history with completed income transaction(s)

Verify that you have

You can view IPN History by link

Read more about security

here
Get Basic Account Information
help
Lib
demo bot
My Settings
more
https://www.coinpayments.net/apidoc-create-transaction
IPN Retries / Duplicate IPNs
IPN Retries / Duplicate IPNs
see
https://www.coinpayments.net/apidoc-get-callback-address
IPN Retries / Duplicate IPNs
IPN Retries / Duplicate IPNs
page
set IPN secret
https://www.coinpayments.net/acct-ipn-history
here
https://www.coinpayments.net
Register
page
Check all options what you need
Check all options what you need
Here the balance will always be replenished, even if half of the Internet falls