Skip to main content

Integrate Binance Pay with your App

Binance Pay is a contactless, borderless and secure cryptocurrency payment technology designed by Binance. Binance Pay allows Binance customer to pay and get paid in crypto from your friends and family worldwide.

To begin, register your application with Binance Accounts, and get the SDK . For now, please contact us.

Signature Rule (For server engineer)#

Binance Pay backend will check the signature against pay param, including "certSn", "merchantId", "noncestr", "prepayId" and "timeStamp".

AttributesTypeRequiredLimitationDescription
certSnstringY-API identity key issued by Binance payment system
merchantIdlongY-The merchant account id, issued when merchant been created at Binance.
noncestrstringYmust be 32 digitsA random string with 32 bytes, e.g. random ascii decimal within a-z and A-Z and loop 32 times to form a random string
prepayIdstringY-unique id generated by binance
timeStamplongYBinance pay only process request within 1sUnixTimestamp in millis that the requests send, guarantee the machine time is sync with the network

Signature generation logic is as below, please follow the parameters order. Use "=" connect field and value, use "&" to separate fields.

String payload = "certSn=317c110ebf7baf641e8f49ab6851331737dbe98541947c53b9dbba27f8c8414f" + "&" + "merchantId=98765987" + "&" + "noncestr=5K8264ILTKCH16CQ2502SI8ZNMTM67VS" + "&" + "prepayId=98765987" + "&"+ "timeStamp=1618302830073";String signature = hex(hmac("sha512", payload, secretKey)).toUpperCase();

Integrate SDK for Android#

Requirements#

  • Android 4.1+
  • Support AndroidX

Import SDK#

  1. Download binance_pay_sdk_v1.0.0.aar
  2. Add binance_pay_sdk_v1.0.0.aar into libs directory
  3. Add dependence for app module, just like this:
    android{    repositories {        flatDir {            dirs 'libs'        }    }}dependencies {    implementation fileTree(include: ['*.jar'], dir: 'libs')    implementation (name: 'binance_pay_sdk_v1.0.0', ext: 'aar')
  4. Sync project

Usage#

1. Create BinancePayListener#
class PayListener : BinancePayListener {   override fun onSuccess() {       // When the payment is successful, this will be called       }
   override fun onCancel() {       // When the payment is canceled, this will be called     }
   override fun onError(exception: BinancePayException) {       // When there is an error in the payment process,this will be called     }}val listener = PayListener()
2. To Pay#

2.1 Crypto payments(C2B)

val param = BinancePayParam(merchantId, prepayId, timeStamp, nonceStr, certSn, sign)val binancePay = BinancePayFactory.getBinancePay(context)binancePay.pay(param, listener)

2.2 Transfer or send cryptos(C2C)

val binancePay = BinancePayFactory.getBinancePay(context)binancePay.pay(orderId, type, listener)

Error Types:
Maybe you will encounter several situations:

  • UnInstall Error:This means that you have not installed the Binance app, and then a pop-up window will be displayed to guide you to download
  • UnSupported Error:This means that your Binance app version is too low, and then a pop-up window will be displayed to guide you to get the latest Binance app
  • Other Error:Will be called back to you via BinancePayListener

Integrate SDK for iOS#

Requirements#

  • iOS 10+
  • Swift 5.1+

Installation#

Munual#
  1. Download BinancePaySDK.xcframework
  2. Add BinancePaySDK.xcframework into Frameworks, Libraries and Embeded Content of your target
  3. Embed Type should be Embed & Sign

Usage#

Pay#
  1. Create Request Parameters:
// Crypto payments(C2B) parameterspublic struct OrderInitParameters {    let merchantId: String    let prepayId: String    let timestamp: Int64    let noncestr: String    let certSn: String    let sign: String    let redirectScheme: String}
// Transfer or send cryptos(C2C) parameterspublic struct C2CInitParameters {    let id: String    let type: String    let redirectScheme: String}
  1. Call api:
BinancePay.shared.pay(with: parameters, containerView: self.view) { (result) in   switch result {   case .success:    print("success")   case .failure(let error):    print("failure \(error)")   }}

BinancePaySDK will show up an alert if user doesn't install Binance app on his/her device. The alert will show on the containerView.

  1. Error Types: Here are the errors you may get from BinancePaySDK:
public enum PayError: Error {    case invalidParameters(OrderInitParametersError)    case binanceAppNotInstalled    case binanceAppNotSupported    case openAppFailed    case fromBinanceApp(code: Int, message: String)}
public enum OrderInitParametersError: Error {    case invalidMerchantId    case invalidPrepayId    case invalidTimestamp    case invalidNonceStr    case invalidCertSn    case invalidSign    case invalidRedirectScheme}

Language#

public enum languageMode {    case automatic                  // SDK automatically use the same language as iOS system    case manual(Language: Language) // You can specify the language}
BinancePay.shared.languageMode = .automatic

FAQ#

Unable to trigger the Binance App#

Include Binance Pay in the plist file to trigger Binance app

<key>LSApplicationQueriesSchemes</key><array><string>com.binance.app.binance</string><string>com.binance.pay.support</string></array>
Unable to redirect from Binance App back to your App#
  1. Add your url scheme in Info Url Types
  2. Set this url-scheme as redirectScheme when using BinancePaySDK img
Did not receive callback#

Under AppDelegate: include the BinancePay.shared.handle function to receive callback.

    func application(_ app: UIApplication, open url: URL, options:        [UIApplication.OpenURLOptionsKey : Any[ = [:]) -> Bool {        BinancePay.shared.handle(openURL: url)        }