#transaction-status #api-response #payment #terminal #card #credentials #merchant

blockchyp

这是 Rust 的 SDK。像所有 BlockChyp SDK 一样,它为 BlockChyp 网关和 BlockChyp 支付终端提供完整的客户端。

5 个版本 (2 个稳定版本)

2.18.7 2024 年 8 月 23 日
2.18.6 2024 年 8 月 6 日
0.1.5 2024 年 7 月 1 日
0.1.4 2024 年 6 月 28 日
0.1.0 2024 年 6 月 28 日

#53 in 认证

Download history 399/week @ 2024-06-28 47/week @ 2024-07-05 3/week @ 2024-07-26 109/week @ 2024-08-02 12/week @ 2024-08-09

每月 124 次下载

自定义许可

650KB
7.5K SLoC

BlockChyp Rust SDK

Build Status Release License: MIT

这是 Rust 的 SDK。像所有 BlockChyp SDK 一样,它为 BlockChyp 网关和 BlockChyp 支付终端提供完整的客户端。

安装

BlockChyp SDK 可通过 Cargo 安装。输入以下命令将 BlockChyp 添加到您的 Cargo.toml 中。

cargo add blockchyp

简单示例

运行您的第一个交易很简单。确保您有 BlockChyp 终端,激活它,并生成一组 API 密钥。

use ::blockchyp::*;

fn main() {
    let creds = APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    let client = Client::new(creds);

    let mut request = AuthorizationRequest{
        test: true,
        terminal_name: "Test Terminal".to_string(),
        amount: "55.00".to_string(),
        ..Default::default()
    };

    let (response, err) = client.charge(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return
    }

    if response.approved {
		println!("approved");
	}

    println!("Response: {:?}", response);
}

响应包含您完成交易处理所需的所有信息。特别重要的是 ReceiptSuggestions 结构,它包含所有必需或推荐用于 PCI 或 EMV 合规性的字段。

其他文档

完整文档可以在我们的 开发者文档门户 上找到。

获取开发者套件

为了测试您与真实终端的集成,您需要一个 BlockChyp 开发者套件。我们的套件包括一个功能齐全的支付终端和测试 PIN 加密密钥。每个套件都包括一套全面的测试卡,包括每个主要卡品牌的测试卡和输入方式,包括非接触式和接触 EMV 以及磁条卡。每个套件还包括我们的区块链礼品卡系统的测试礼品卡。

BlockChyp 开发者程序的访问目前仅限邀请,但您可以通过联系我们的工程团队 [email protected] 请求邀请。

您还可以在我们的 YouTube 频道 上查看许多长篇演示并了解更多关于我们的信息。

交易代码示例

您不想阅读文字,您想要示例。以下是使用 BlockChyp Rust SDK 可以完成的一些操作及其基本示例的简要概述。

支付端点

这些是用于在BlockChyp中执行和操作支付交易的核心理解API。

收费

  • API凭证类型:商家
  • 所需角色:支付API访问

我们最受欢迎的交易执行标准授权和捕获。这是最基本的支付交易,通常用于传统零售。

收费交易可以使用支付终端来捕获支付或使用之前注册的支付令牌。

终端交易

对于终端交易,请确保使用terminalName属性传递终端名称。

令牌交易

如果您有支付令牌,省略terminalName属性,并通过token属性传递令牌。

卡号和磁条

您还可以传递PAN和磁条,但您可能不应该这样做,因为这会将您置于PCI范围内,而POS入侵的最常见途径是键盘记录。如果您使用终端进行手动卡输入,您将绕过可能恶意运行的点-of-sale系统中的任何键盘记录器。

常见变化

  • 礼品卡兑换:在BlockChyp中没有专门用于礼品卡兑换的API。只需执行普通的收费交易即可。如果客户刷礼品卡,我们的终端将识别礼品卡并执行礼品卡兑换。请注意,如果由于某些原因,礼品卡的原购买交易与欺诈或退货相关联,则交易将被拒绝。
  • EBT:将card_type字段设置为blockchyp::CardType::EBT以处理EBT SNAP交易。请注意,测试EBT交易始终假定余额为100.00美元,因此超过该金额的测试EBT交易可能会被拒绝。
  • 现金退款:要启用借记交易的现金退款,请设置cash_back字段。如果显示的卡不是借记卡,则忽略cash_back字段。
  • 手动卡输入:将manual_entry字段设置为启用手动卡输入。当芯片和 MSR 不可用时或用于更安全的电话订单时,这是一个很好的备用选项。您甚至可以将manual_entry字段与设置为blockchyp::CardType::EBTcard_type字段结合起来,用于手动EBT卡输入。
  • 内联令牌化:您可以通过设置enroll字段,在内联收费交易中注册支付方式。您将在响应中获得一个令牌。如果您还传递客户数据,您甚至可以将令牌绑定到客户记录。
  • 提示小费:如果您想在授权之前提示客户支付小费,请设置prompt_for_tip字段。这对于点餐支付和其他与服务相关的场景很适用。
  • 现金折扣和附加费surchargecash_discount字段可以一起使用以支持现金折扣或附加费问题。有关详细信息,请参阅现金折扣文档。
  • 加密货币:可以使用cryptocurrency字段将标准卡显示屏幕切换到加密货币屏幕。字段值可以是启用任何支持的加密货币的ANY,也可以是单个货币代码,例如比特币的BTC
use blockchyp;
use std::error::Error;

fn charge_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::AuthorizationRequest{
        test: true,
        terminal_name: "Test Terminal".to_string(),
        amount: "55.00".to_string(),
        ..Default::default()
    };
    let (response, err) = client.charge(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.approved {
		println!("approved");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    charge_example()?;
    println!("Example completed successfully!");
    Ok(())
}

预先授权

  • API凭证类型:商家
  • 所需角色:支付API访问

预先授权会冻结资金,必须在之后进行捕获。这在最终交易金额可能发生变化的情况下使用。一个常见的例子是高级餐饮,需要在最终结算前调整小费。

预先授权的另一个用例是电子商务。通常,在线订单在下单时进行预先授权,然后在发货时进行捕获。

预先授权可以使用支付终端进行捕获支付或使用之前注册的支付令牌。

终端交易

对于终端交易,请确保使用terminalName属性传递终端名称。

令牌交易

如果您有支付令牌,省略terminalName属性,并通过token属性传递令牌。

卡号和磁条

您还可以传递PAN和磁条,但可能不应该这样做,因为这会使您进入PCI范围,而POS系统漏洞的最常见途径是键盘记录。如果您使用终端进行手动卡输入,您将绕过可能恶意运行的任何键盘记录器。

加密货币

请注意,预先授权不支持加密货币。

常见变化

  • 手动卡输入:将manual_entry字段设置为启用手动卡输入。当芯片和MSR不可用时,作为备份很好,或者用于更安全的电话订单。您甚至可以将manual_entry字段与card_type设置为blockchyp::CardType::EBT结合起来,以进行手动EBT卡输入。
  • 行内令牌化:您可以通过设置enroll字段,在交易过程中在线将支付方式注册到令牌保险库中。您将在响应中获得一个令牌。如果您还传递客户数据,您甚至可以将令牌绑定到客户记录。
  • 提示小费:如果您想在授权之前提示客户小费,请设置prompt_for_tip字段。您可以在预先授权中提示小费,尽管这不是一个非常常见的做法。
  • 现金折扣和附加费surchargecash_discount字段可以一起使用以支持现金折扣或附加费问题。有关详细信息,请参阅现金折扣文档。
use blockchyp;
use std::error::Error;

fn preauth_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::AuthorizationRequest{
        test: true,
        terminal_name: "Test Terminal".to_string(),
        amount: "27.00".to_string(),
        ..Default::default()
    };
    let (response, err) = client.preauth(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.approved {
		println!("approved");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    preauth_example()?;
    println!("Example completed successfully!");
    Ok(())
}

捕获预先授权

  • API凭证类型:商家
  • 所需角色:支付API访问

此API允许您捕获之前批准的预先授权。

您需要确保传入原始预先授权交易返回的交易ID,以便我们知道我们要捕获哪个交易。如果您想捕获与预先授权金额完全相同的交易,只需传入交易ID即可。

如果您需要调整总额,可以通过传入新的amount来实现。我们还建议您传入更新的taxtip金额,因为这有时可以降低您的交易费率。(例如,二级处理。)

use blockchyp;
use std::error::Error;

fn capture_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::CaptureRequest{
        test: true,
        transaction_id: "<ORIGINAL TRANSACTION ID>".to_string(),
        amount: "32.00".to_string(),
        ..Default::default()
    };
    let (response, err) = client.capture(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.approved {
		println!("approved");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    capture_example()?;
    println!("Example completed successfully!");
    Ok(())
}

退款

  • API凭证类型:商家
  • 所需角色:支付API访问

这不是理想的情况,但有时客户想要退款。

我们的退款API允许您通过在几种不同的场景中执行退款来应对这种不愉快的情况。

最抗欺诈的方法是在之前交易的情况下执行退款。您应该始终跟踪BlockChyp响应中返回的交易ID。要全额退款先前的交易,只需在退款请求中传入原始交易ID即可。

部分退款

对于部分退款,只需传入与交易ID一起的金额。唯一的规则是金额必须等于或小于原始交易金额。只要退还的总额不超过原始金额,您就可以对同一原始交易执行多次部分退款。

令牌化退款

您还可以使用令牌来执行退款。传入令牌而不是交易ID和所需的退款金额。

自由退款

当您在没有引用先前交易的情况下执行退款时,我们称此为自由退款

我们不推荐这种类型的退款,但它是允许的。如果您一定要这样做,请传递一个终端名称和金额。

您可以通过将 manual_entry 字段传递到自由范围退款请求中来执行手动或按键退款。

礼品卡退款

在之前的交易背景下允许礼品卡退款,但不允许自由范围礼品卡退款。如果您需要向礼品卡添加更多资金,请使用礼品卡激活API。

存储和转发支持

当终端退回到存储和转发模式时,不允许退款。

自动取消

如果在原始交易批次关闭之前,执行了引用先前交易的完整退款,则该退款将自动转换为取消。这可以为商家节省一点钱。

加密货币

请注意,不支持加密货币退款。您必须从您的加密货币钱包手动退款加密货币交易。

use blockchyp;
use std::error::Error;

fn refund_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::RefundRequest{
        transaction_id: "<PREVIOUS TRANSACTION ID>".to_string(),
        amount: "5.00".to_string(),
        ..Default::default()
    };
    let (response, err) = client.refund(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.approved {
		println!("approved");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    refund_example()?;
    println!("Example completed successfully!");
    Ok(())
}

取消

  • API凭证类型:商家
  • 所需角色:支付API访问

错误总是会发生。如果您不小心进行了交易,可以使用此API取消它。所需的一切只是传递一个交易ID,并在原始交易批次关闭之前执行取消。

取消与EBT和礼品卡交易一起使用时无需额外参数。

加密货币

请注意,不支持加密货币取消。您必须从您的加密货币钱包手动退款加密货币交易。

use blockchyp;
use std::error::Error;

fn void_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::VoidRequest{
        test: true,
        transaction_id: "<PREVIOUS TRANSACTION ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.void(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.approved {
		println!("approved");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    void_example()?;
    println!("Example completed successfully!");
    Ok(())
}

超时反转

  • API凭证类型:商家
  • 所需角色:支付API访问

支付交易需要一个稳定的网络才能正常工作,而没有任何网络始终是稳定的。超时反转是在不稳定网络条件下重试支付时防止意外对消费者重复收费的强大防线。

我们强烈建议开发者在任何费用、预授权或退款交易超时时使用此API。如果您没有从BlockChyp收到明确的响应,您不能确定交易是否已通过。

在这种情况下,最佳做法是发送超时反转请求。超时反转会检查交易,如果存在则取消。

唯一的限制是,开发者在执行费用、预授权和退款交易时必须使用 transactionRef 属性(CLI中的 txRef)。

此要求的原因是,如果系统从未收到对交易的明确响应,系统就永远不会收到BlockChyp生成的交易ID。我们必须退回到交易参考来识别交易。

加密货币

请注意,不支持加密货币退款。您必须从您的加密货币钱包手动退款加密货币交易。

use blockchyp;
use std::error::Error;

fn reverse_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::AuthorizationRequest{
        transaction_ref: "<LAST TRANSACTION REF>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.reverse(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.approved {
		println!("approved");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    reverse_example()?;
    println!("Example completed successfully!");
    Ok(())
}

礼品卡激活

  • API凭证类型:商家
  • 所需角色:支付API访问

此API激活或为BlockChyp礼品卡添加价值。只需传递终端名称和要添加到卡的金额。一旦客户刷卡,终端将使用磁条上的密钥向卡添加价值。

您无需以不同的方式处理新的礼品卡激活或礼品卡充值。终端固件将自行确定要执行的操作,同时返回礼品卡的新余额。

这是系统中最接近BlockChyp区块链DNA的部分。BlockChyp礼品卡系统实际上并不使用礼品卡号码。这意味着它们不能被盗。

BlockChyp使用椭圆曲线公钥来识别卡片。礼品卡交易实际上是使用这些密钥签名的块。这意味着网络中没有发送共享秘密。要跟踪BlockChyp礼品卡,保留在礼品卡激活期间返回的 公钥。那是礼品卡的椭圆曲线公钥。

我们有时会在礼品卡上打印数字,但实际上这些是公钥一部分的十进制编码散列,使我们的礼品卡看起来对普通人来说很正常。它们可用于余额检查,并在在线礼品卡授权中发挥查找作用,但除此之外用处不大。

作废和撤销

礼品卡激活可以像任何其他BlockChyp交易一样作废和撤销。使用交易ID或交易参考来识别礼品激活交易,就像您通常用于作废或撤销传统支付交易一样。

导入礼品卡

BlockChyp确实具有从传统礼品卡平台导入礼品卡责任的能力。不幸的是,BlockChyp不支持在第三方系统上激活卡片。然而,您可以导入您未结清的礼品卡,客户可以在终端上像BlockChyp的标准礼品卡一样刷卡。

访问此功能不需要特殊编码。网关和终端固件会为您处理所有事情。

第三方礼品卡网络

BlockChyp目前不提供对其他礼品卡平台的任何原生支持,除了导入礼品卡责任。我们确实有一个白名单系统,可以用于支持您自己的自定义礼品卡实现。在我们可以允许一个BIN范围白名单之前,我们有一个安全审查流程,所以如果您需要白名单一个BIN范围,请联系[email protected]

use blockchyp;
use std::error::Error;

fn gift_activate_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::GiftActivateRequest{
        test: true,
        terminal_name: "Test Terminal".to_string(),
        amount: "50.00".to_string(),
        ..Default::default()
    };
    let (response, err) = client.gift_activate(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.approved {
		println!("approved");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    gift_activate_example()?;
    println!("Example completed successfully!");
    Ok(())
}

余额

  • API凭证类型:商家
  • 所需角色:支付API访问

此API检查礼品卡或EBT卡余额。

礼品卡余额检查

对于礼品卡,传入终端名称,客户将被提示在该终端上刷卡。剩余余额将短暂显示在终端屏幕上,API响应将包括礼品卡的公钥和剩余余额。

EBT余额检查

所有EBT交易都需要PIN码,因此要检查EBT卡余额,您需要传入与正常EBT交易相同的ebt标志。客户将被提示刷卡并输入PIN码。如果一切正常,卡的剩余余额将在终端上显示给客户,并随API响应返回。

测试礼品卡余额检查

测试礼品卡余额检查与真实礼品卡没有区别。您必须首先激活测试礼品卡才能测试余额检查。测试礼品卡是实际存在于我们并行测试区块链上的区块链卡。

测试EBT礼品卡余额检查

所有测试EBT交易都假定起始余额为$100.00。因此,测试EBT余额检查总是返回$100.00的余额。

use blockchyp;
use std::error::Error;

fn balance_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::BalanceRequest{
        test: true,
        terminal_name: "Test Terminal".to_string(),
        card_type: blockchyp::CardType::EBT,
        ..Default::default()
    };
    let (response, err) = client.balance(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    balance_example()?;
    println!("Example completed successfully!");
    Ok(())
}

关闭批次

  • API凭证类型:商家
  • 所需角色:支付API访问

此API将在当前处于打开状态时关闭商家的批次。

默认情况下,商家批次将在当地时间凌晨3点自动关闭。自动批次关闭时间可以在商家配置文件中更改,也可以完全禁用。

如果禁用了自动批次关闭,您将需要使用此API手动关闭批次。

use blockchyp;
use std::error::Error;

fn close_batch_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::CloseBatchRequest{
        test: true,
        ..Default::default()
    };
    let (response, err) = client.close_batch(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    close_batch_example()?;
    println!("Example completed successfully!");
    Ok(())
}

  • API凭证类型:商家
  • 所需角色:支付API访问

此API允许您向客户发送发票并通过BlockChyp托管支付页面捕获支付。

如果您设置了autoSend标志,BlockChyp将为您向客户发送包含支付链接的基本发票电子邮件。如果您希望对电子邮件消息的外观有更多控制,您可以选择不设置autoSend标志,并自行发送客户电子邮件。

此API有很多可选参数,但至少您需要传递总金额、客户姓名和电子邮件地址。(除非您使用cashier标志。)

客户信息

除非您使用cashier标志,否则您必须指定一个客户;要么通过在行内创建新的客户记录,要么通过传递现有的客户ID或客户引用。

行项目级数据

这不是强制性的,但我们强烈建议在每次请求中发送行项目级细节。这将使发票看起来更完整,行项目级数据的格式与终端行项目显示使用的格式完全相同,因此可以使用相同的代码来支持这两个区域。

描述

您还可以提供一种自由形式的描述或消息,以便在发票底部附近显示。通常这是一些感谢信或指示。

条款和条件

您可以在请求中包含长形式的合同语言,并在同时捕获条款和条件时接受它们。

该接口与用于终端基于的条款和条件API的接口相同,您可以通过tcContent直接传递内容,或通过预先配置的模板通过tcAlias传递。当将协议接受纳入发送链接请求时,条款和条件日志也将更新。

自动发送

BlockChyp不会自动发送电子邮件通知。这种安全措施可以防止在不期望的情况下发送真实的电子邮件。如果您希望BlockChyp为您发送电子邮件,只需在所有请求中添加autoSend标志即可。

加密货币

如果商家配置为支持加密货币交易,则支付页面将显示额外的UI小部件,允许客户切换到加密货币支付方式。

令牌化

enroll标志添加到发送链接请求中,以便将支付方式注册到令牌保险库中。

enrollOnly标志添加到令牌保险库中注册支付方式,而不会立即进行任何支付。支付链接将要求用户提供其支付信息,并通知他们他们不会立即被收费,但他们的支付可能用于未来的交易。

收银台面对卡片输入

BlockChyp也可以用于生成内部/收银台面对的卡片输入页面。这是为那些可能需要接听电话订单而没有可用的终端的情况而设计的。

如果您传递了cashier标志,则不会发送电子邮件,您可以在浏览器或iframe中加载链接进行支付输入。当使用cashier标志时,将忽略autoSend标志。

请注意,不支持在收银台面对支付输入中使用加密货币。

支付通知

当客户成功提交支付时,商家将收到一封电子邮件通知他们已收到支付。

实时回调通知

电子邮件通知很好,但您可能希望您的系统在支付事件发生时立即通知。通过使用可选的callbackUrl请求属性,您可以在每次用户提交支付时(无论批准与否)指定一个URL,将授权响应发布到该URL。

响应将以JSON编码的POST请求形式发送,并将与所有BlockChyp收费和预授权交易响应的格式完全相同。

状态轮询

如果实时回调在您的环境中不实用或不必要,您始终可以使用下面描述的支付链接状态API。

使用状态轮询的发送链接API的一个常见用例是路边取货。当顾客到达时,系统可以检查支付链接状态以确保已支付,而无需创建后台线程不断轮询状态更新。

use blockchyp;
use std::error::Error;

fn send_payment_link_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::PaymentLinkRequest{
        transaction_ref: "<TX REF>".to_string(),
        amount: "199.99".to_string(),
        description: "Widget".to_string(),
        subject: "Widget invoice".to_string(),
        transaction: Some(blockchyp::TransactionDisplayTransaction{
            subtotal: "195.00".to_string(),
            tax: "4.99".to_string(),
            total: "199.99".to_string(),
            items: Some(vec![
                blockchyp::TransactionDisplayItem{
                    description: "Widget".to_string(),
                    price: "195.00".to_string(),
                    quantity: 1.0,
                    ..Default::default()
                },

            ]),
            ..Default::default()
        }),
        auto_send: true,
        customer: blockchyp::Customer{
            customer_ref: "Customer reference string".to_string(),
            first_name: "FirstName".to_string(),
            last_name: "LastName".to_string(),
            company_name: "Company Name".to_string(),
            email_address: "[email protected]".to_string(),
            sms_number: "(123) 123-1231".to_string(),
            ..Default::default()
        },
        ..Default::default()
    };
    let (response, err) = client.send_payment_link(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    send_payment_link_example()?;
    println!("Example completed successfully!");
    Ok(())
}

  • API凭证类型:商家
  • 所需角色:支付API访问

此API会重新发送之前创建的支付链接。如果支付链接已过期、已取消或已被支付,将返回错误。

use blockchyp;
use std::error::Error;

fn resend_payment_link_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::ResendPaymentLinkRequest{
        link_code: "<PAYMENT LINK CODE>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.resend_payment_link(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    resend_payment_link_example()?;
    println!("Example completed successfully!");
    Ok(())
}

  • API凭证类型:商家
  • 所需角色:支付API访问

此API可以取消支付链接。

use blockchyp;
use std::error::Error;

fn cancel_payment_link_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::CancelPaymentLinkRequest{
        link_code: "<PAYMENT LINK CODE>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.cancel_payment_link(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    cancel_payment_link_example()?;
    println!("Example completed successfully!");
    Ok(())
}

  • API凭证类型:商家
  • 所需角色:支付API访问

此API允许您检查支付链接的状态,包括交易数据和尝试交易的完整历史。

当您想检查支付链接的状态时(与交易状态相比),这是首选的真实来源和最佳实践。由于与单个支付链接关联的多个交易的模糊性,交易状态API并不理想。

您必须传递与支付链接相关的linkCode值。在创建支付链接时,此值包含在BlockChyp的响应中。

use blockchyp;
use std::error::Error;

fn payment_link_status_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::PaymentLinkStatusRequest{
        link_code: "<PAYMENT LINK CODE>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.payment_link_status(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    payment_link_status_example()?;
    println!("Example completed successfully!");
    Ok(())
}

交易状态

  • API凭证类型:商家
  • 所需角色:支付API访问

此API返回任何交易的当前状态。您可以通过BlockChyp分配的交易ID或您自己的交易参考来查找交易。

您应始终使用全局唯一的交易参考值,但在重复交易参考的情况下,将返回与您的交易参考匹配的最新交易。

use blockchyp;
use std::error::Error;

fn transaction_status_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::TransactionStatusRequest{
        transaction_id: "<TRANSACTION ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.transaction_status(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    transaction_status_example()?;
    println!("Example completed successfully!");
    Ok(())
}

现金折扣

  • API凭证类型:商家
  • 所需角色:支付API访问

此API计算现金交易的附加费、现金折扣和总金额。

如果您正在使用BlockChyp的现金折扣功能,可以使用此端点确保真实现金交易的数字和收据与BlockChyp处理的交易保持一致。

use blockchyp;
use std::error::Error;

fn cash_discount_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::CashDiscountRequest{
        amount: "100.00".to_string(),
        cash_discount: true,
        surcharge: true,
        ..Default::default()
    };
    let (response, err) = client.cash_discount(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    cash_discount_example()?;
    println!("Example completed successfully!");
    Ok(())
}

批量历史

  • API凭证类型:商家
  • 所需角色:支付API访问

此端点允许开发者查询网关的商户批量历史。数据将按打开日期降序返回,最新批量首先返回。结果将包括有关批量的基本信息。考虑使用批量详细信息API获取特定批量的更多详细信息。

限制结果

此API将返回最多250个结果。使用maxResults属性进一步限制最大结果数,并使用startIndex属性浏览跨越多个查询的结果。

例如,如果您想获取最新的十个批量,请将maxResults的值设置为10。请注意,startIndex是从零开始的。使用值为0来获取数据集中的第一个批量。

按日期范围过滤

您还可以通过日期过滤结果。使用startDateendDate属性仅返回那些在指定日期之间打开的批量。您可以使用startDateendDate,并且可以将日期过滤器与maxResultsstartIndex结合使用。

use blockchyp;
use std::error::Error;

fn batch_history_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::BatchHistoryRequest{
        max_results: 250,
        start_index: 0,
        ..Default::default()
    };
    let (response, err) = client.batch_history(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    batch_history_example()?;
    println!("Example completed successfully!");
    Ok(())
}

批量详细信息

  • API凭证类型:商家
  • 所需角色:支付API访问

此API允许开发者获取特定批量的详细信息,包括捕获量、礼品卡活动、预期存款和按终端分解的捕获量。

唯一必需的请求参数是batchId。批量ID与每个交易响应一起返回,可以使用批量历史API发现。

use blockchyp;
use std::error::Error;

fn batch_details_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::BatchDetailsRequest{
        batch_id: "<BATCH ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.batch_details(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    batch_details_example()?;
    println!("Example completed successfully!");
    Ok(())
}

交易历史

  • API凭证类型:商家
  • 所需角色:支付API访问

此端点提供了多种筛选交易历史的方法。

默认情况下,如果没有过滤属性,此端点将返回最近的250笔交易。

限制结果

此API将返回单个查询中的最多50个结果。使用maxResults属性进一步限制最大结果数,并使用startIndex属性分页浏览跨越多个查询的结果。

例如,如果您想获取最近的十个批次,请将maxResults的值传递为10。请注意,startIndex是从0开始的。使用值0获取数据集中的第一条交易。

按日期范围过滤

您还可以通过日期过滤结果。使用startDateendDate属性仅返回在指定日期之间进行的交易。您可以使用startDateendDate,并且可以将日期过滤器与maxResultsstartIndex一起使用。

按批次过滤

要限制结果仅限于单个批次,请传递batchId参数。

按终端过滤

要限制结果仅限于单个终端上执行的交易,请传递终端名称。

组合过滤器

上述所有过滤器都不是互斥的。您可以在单个请求中组合上述任何属性,以将交易结果限制为更窄的结果集。

搜索交易历史

您可以通过传递带有query选项的搜索条件来搜索交易历史。搜索系统将匹配金额(请求和授权)、卡号最后四位、持卡人姓名和授权代码。

请注意,当使用搜索查询时,不支持终端名称或批次ID过滤器。

use blockchyp;
use std::error::Error;

fn transaction_history_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::TransactionHistoryRequest{
        max_results: 10,
        batch_id: "<BATCH ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.transaction_history(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    transaction_history_example()?;
    println!("Example completed successfully!");
    Ok(())
}

列出队列中的交易

  • API凭证类型:商家
  • 所需角色:支付API访问

返回终端上队列中的交易的交易引用列表。可以使用交易状态API检索交易的详细信息。

use blockchyp;
use std::error::Error;

fn list_queued_transactions_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::ListQueuedTransactionsRequest{
        terminal_name: "Test Terminal".to_string(),
        ..Default::default()
    };
    let (response, err) = client.list_queued_transactions(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    list_queued_transactions_example()?;
    println!("Example completed successfully!");
    Ok(())
}

删除队列中的交易

  • API凭证类型:商家
  • 所需角色:支付API访问

从终端中删除一个或所有队列中的交易。如果传递的交易引用为*,则整个终端队列将被清除。如果传递的交易引用未在终端上排队,则返回错误。

use blockchyp;
use std::error::Error;

fn delete_queued_transaction_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::DeleteQueuedTransactionRequest{
        terminal_name: "Test Terminal".to_string(),
        transaction_ref: "*".to_string(),
        ..Default::default()
    };
    let (response, err) = client.delete_queued_transaction(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    delete_queued_transaction_example()?;
    println!("Example completed successfully!");
    Ok(())
}

终端管理端点

这些API支持终端管理功能以及如行项目显示、消息和交互式提示等附加终端功能。
这些功能可以用来扩展销售点系统的功能。

终端Ping

  • API凭证类型:商家
  • 所需角色:支付API访问

这个简单的测试交易有助于确保与支付终端的良好通信,通常是在开发中运行的第一项测试。

它测试与终端的通信,如果一切正常,则返回积极响应。它以相同的方式在本地或云中继模式下工作。

如果您收到积极响应,则已成功验证以下所有内容

  • 终端在线。
  • 有有效的路由到终端。
  • API凭证有效。
use blockchyp;
use std::error::Error;

fn ping_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::PingRequest{
        terminal_name: "Test Terminal".to_string(),
        ..Default::default()
    };
    let (response, err) = client.ping(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    ping_example()?;
    println!("Example completed successfully!");
    Ok(())
}

终端定位

  • API凭证类型:商家
  • 所需角色:支付API访问

此端点返回终端的路由和位置信息。

结果将指示终端是否处于云中继模式,如果终端处于本地模式,将返回本地IP地址。

终端还将返回终端的公钥。

use blockchyp;
use std::error::Error;

fn locate_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::LocateRequest{
        terminal_name: "Test Terminal".to_string(),
        ..Default::default()
    };
    let (response, err) = client.locate(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    locate_example()?;
    println!("Example completed successfully!");
    Ok(())
}

终端清除

  • API凭证类型:商家
  • 所需角色:支付API访问

此API中断终端可能正在执行的操作,并将其返回到空闲状态。

use blockchyp;
use std::error::Error;

fn clear_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::ClearTerminalRequest{
        test: true,
        terminal_name: "Test Terminal".to_string(),
        ..Default::default()
    };
    let (response, err) = client.clear(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    clear_example()?;
    println!("Example completed successfully!");
    Ok(())
}

终端状态

  • API凭证类型:商家
  • 所需角色:支付API访问

此API返回支付终端的当前状态。通常用作在发送新交易之前确定终端是否忙碌的方法。

如果终端忙碌,idle 将为 false,并且 status 字段将返回一个短字符串,指示当前正在进行的交易类型。系统还会在 since 字段中返回最后状态变化的时间戳。

响应中的 cardInSlot 字段将指示卡片是否当前在读卡器插槽中。

如果系统正在运行支付交易,并且您明智地传递了交易引用,此 API 还将返回正在进行的交易的交易引用。

下表列出了所有可能的状态响应。

状态代码 描述
idle 终端空闲且准备进行交易。正在显示默认品牌。
activate 终端正在激活并与商户账户配对。
balance 终端上有一个待处理的余额检查(EBT或礼品卡)。
boolean-prompt 终端上有一个待处理的布尔提示(是/否)操作。
signature 有一个待处理的签名捕获。
crypto 有一个待处理的加密货币交易。
enroll 有一个待处理的令牌保险库注册操作。
gift-activate 有一个礼品卡激活操作正在进行。
message 终端正在显示自定义消息。
charge 终端正在执行充值交易。
preauth 终端正在执行预授权交易。
refund 终端正在执行退款交易。
survey 终端正在显示交易后调查问题。
terms-and-conditions 终端正在等待接受条款和条件并签名。
text-prompt 终端正在等待对文本输入提示的响应。
txdisplay 终端正在显示交易和/或行项目级详细信息。
use blockchyp;
use std::error::Error;

fn terminal_status_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::TerminalStatusRequest{
        terminal_name: "Test Terminal".to_string(),
        ..Default::default()
    };
    let (response, err) = client.terminal_status(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    terminal_status_example()?;
    println!("Example completed successfully!");
    Ok(())
}

Capture Signature

  • API凭证类型:商家
  • 所需角色:支付API访问

此端点从终端捕获手写签名并返回图像。

与条款和条件 API 不同,此端点执行基本的签名捕获,不显示协议或存档签名。

在底层,签名以专有矢量格式捕获,必须将其转换为常见光栅格式,才能用于大多数应用程序。至少,您必须使用 sigFormat 参数指定一个图像格式。目前支持 JPG 和 PNG。

默认情况下,图像以十六进制编码的二进制形式返回。您可以使用 sigFile 参数将二进制图像输出重定向到文件。

您还可以通过传递 sigWidth 参数来缩放输出图像到您首选的宽度。图像将缩放到该宽度,同时保留原始图像的纵横比。

use blockchyp;
use std::error::Error;

fn capture_signature_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::CaptureSignatureRequest{
        terminal_name: "Test Terminal".to_string(),
        sig_format: blockchyp::SignatureFormat::PNG,
        sig_width: 200,
        ..Default::default()
    };
    let (response, err) = client.capture_signature(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    capture_signature_example()?;
    println!("Example completed successfully!");
    Ok(())
}

New Transaction Display

  • API凭证类型:商家
  • 所需角色:支付API访问

此 API 将总计和行项目级数据发送到终端。

至少,您应将总计信息作为显示请求的一部分发送,包括 totaltaxsubtotal

您还可以发送行项目级数据,每个行项目都可以有一个 descriptionqtypriceextended 价格。

如果您未能发送扩展价格,BlockChyp 将将 qty 乘以 price。然而,我们强烈建议您自己预先计算所有字段,以确保一致性。例如,您对浮点数乘法和舍入的处理可能与 BlockChyp 的略有不同。

折扣

您可以选择在显示上以单独的行项目形式显示折扣,其中包含负值,或者将折扣与特定的行项目关联。您可以为带有描述和金额的单独行项目应用任意数量的折扣。

use blockchyp;
use std::error::Error;

fn new_transaction_display_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::TransactionDisplayRequest{
        test: true,
        terminal_name: "Test Terminal".to_string(),
        transaction: Some(blockchyp::TransactionDisplayTransaction{
            subtotal: "60.00".to_string(),
            tax: "5.00".to_string(),
            total: "65.00".to_string(),
            items: Some(vec![
                blockchyp::TransactionDisplayItem{
                    description: "Leki Trekking Poles".to_string(),
                    price: "35.00".to_string(),
                    quantity: 2.0,
                    extended: "70.00".to_string(),
                    discounts: Some(vec![
                        blockchyp::TransactionDisplayDiscount{
                            description: "memberDiscount".to_string(),
                            amount: "10.00".to_string(),
                            ..Default::default()
                        },

                    ]),
                    ..Default::default()
                },

            ]),
            ..Default::default()
        }),
        ..Default::default()
    };
    let (response, err) = client.new_transaction_display(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    new_transaction_display_example()?;
    println!("Example completed successfully!");
    Ok(())
}

更新交易显示

  • API凭证类型:商家
  • 所需角色:支付API访问

类似于新建交易显示,此变体允许开发人员更新当前在终端上显示的行项目级别数据。

此功能旨在在扫描项目时更新终端显示。您只需向终端发送已更改的信息,通常意味着新的行项目和更新的总计。

如果终端不在行项目显示模式下,并且您调用此端点,第一次调用将表现得像新建交易显示调用。

至少,您应将总计信息作为显示请求的一部分发送,包括 totaltaxsubtotal

您还可以发送行项目级数据,每个行项目都可以有一个 descriptionqtypriceextended 价格。

如果您未能发送扩展价格,BlockChyp 将将 qty 乘以 price。然而,我们强烈建议您自己预先计算所有字段,以确保一致性。例如,您对浮点数乘法和舍入的处理可能与 BlockChyp 的略有不同。

折扣

您可以选择在显示上以单独的行项目形式显示折扣,其中包含负值,或者将折扣与特定的行项目关联。您可以为带有描述和金额的单独行项目应用任意数量的折扣。

use blockchyp;
use std::error::Error;

fn update_transaction_display_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::TransactionDisplayRequest{
        test: true,
        terminal_name: "Test Terminal".to_string(),
        transaction: Some(blockchyp::TransactionDisplayTransaction{
            subtotal: "60.00".to_string(),
            tax: "5.00".to_string(),
            total: "65.00".to_string(),
            items: Some(vec![
                blockchyp::TransactionDisplayItem{
                    description: "Leki Trekking Poles".to_string(),
                    price: "35.00".to_string(),
                    quantity: 2.0,
                    extended: "70.00".to_string(),
                    discounts: Some(vec![
                        blockchyp::TransactionDisplayDiscount{
                            description: "memberDiscount".to_string(),
                            amount: "10.00".to_string(),
                            ..Default::default()
                        },

                    ]),
                    ..Default::default()
                },

            ]),
            ..Default::default()
        }),
        ..Default::default()
    };
    let (response, err) = client.update_transaction_display(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    update_transaction_display_example()?;
    println!("Example completed successfully!");
    Ok(())
}

显示消息

  • API凭证类型:商家
  • 所需角色:支付API访问

此API在支付终端上显示消息。

只需指定目标终端和消息,使用message参数。

use blockchyp;
use std::error::Error;

fn message_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::MessageRequest{
        test: true,
        terminal_name: "Test Terminal".to_string(),
        message: "Thank you for your business.".to_string(),
        ..Default::default()
    };
    let (response, err) = client.message(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    message_example()?;
    println!("Example completed successfully!");
    Ok(())
}

布尔提示

  • API凭证类型:商家
  • 所需角色:支付API访问

此API提示客户回答是或否的问题。

您可以使用prompt参数指定问题或提示,响应返回在response字段中。

这可以用于多种用例,包括启动忠诚度注册工作流程或面向客户的推荐销售提示。

自定义标题

您可以使用yesCaptionnoCaption请求参数覆盖“是”和“否”按钮的标题。

use blockchyp;
use std::error::Error;

fn boolean_prompt_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::BooleanPromptRequest{
        test: true,
        terminal_name: "Test Terminal".to_string(),
        prompt: "Would you like to become a member?".to_string(),
        yes_caption: "Yes".to_string(),
        no_caption: "No".to_string(),
        ..Default::default()
    };
    let (response, err) = client.boolean_prompt(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    boolean_prompt_example()?;
    println!("Example completed successfully!");
    Ok(())
}

文本提示

  • API凭证类型:商家
  • 所需角色:支付API访问

此API提示客户输入数字或字母数字数据。

由于PCI规则,当响应可以是任何有效字符串时,不允许使用自由格式提示。原因是恶意开发者(当然不是您)可能会使用文本提示要求客户输入卡号或PIN码。

这意味着您不是提供提示,而是提供一个promptType

目前支持以下提示类型:

  • phone:捕获电话号码。
  • email:捕获电子邮件地址。
  • first-name:捕获名字。
  • last-name:捕获姓氏。
  • customer-number:捕获客户编号。
  • rewards-number:捕获奖励编号。

您可以使用promptType参数指定提示,响应返回在response字段中。

use blockchyp;
use std::error::Error;

fn text_prompt_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::TextPromptRequest{
        test: true,
        terminal_name: "Test Terminal".to_string(),
        prompt_type: blockchyp::PromptType::Email,
        ..Default::default()
    };
    let (response, err) = client.text_prompt(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    text_prompt_example()?;
    println!("Example completed successfully!");
    Ok(())
}

列出终端

  • API凭证类型:商家 & 合作伙伴
  • 所需角色:终端管理

此API返回与商家账户关联的终端的详细信息。

返回所有终端的状态和资源信息,包括终端上当前显示的品牌预览图像。

use blockchyp;
use std::error::Error;

fn terminals_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::TerminalProfileRequest{

        ..Default::default()
    };
    let (response, err) = client.terminals(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    terminals_example()?;
    println!("Example completed successfully!");
    Ok(())
}

停用终端

  • API凭证类型:商家 & 合作伙伴
  • 所需角色:终端管理

此API停用支付终端。

如果终端存在并且当前在线,它将从商家的终端库存中删除。终端将被远程清除并恢复出厂设置。

use blockchyp;
use std::error::Error;

fn deactivate_terminal_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::TerminalDeactivationRequest{
        terminal_id: "<TERMINAL ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.deactivate_terminal(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    deactivate_terminal_example()?;
    println!("Example completed successfully!");
    Ok(())
}

激活终端

  • API凭证类型:商家 & 合作伙伴
  • 所需角色:终端管理

此API激活支付终端。

如果成功,支付终端将重新启动,生成新的加密密钥,并下载为添加到该终端的商家账户中的任何活动品牌资产。

激活请求需要激活代码和唯一的终端名称。所有终端名称必须在商家账户中唯一。

可选参数

  • merchantId:对于合作伙伴范围API凭证,需要一个商家ID。对于商家范围API凭证,商家ID是隐含的,不能覆盖。
  • cloudRelay:在云中继模式下激活终端。
use blockchyp;
use std::error::Error;

fn activate_terminal_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::TerminalActivationRequest{
        terminal_name: "Test Terminal".to_string(),
        activation_code: "<ACTIVATION CODE>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.activate_terminal(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    activate_terminal_example()?;
    println!("Example completed successfully!");
    Ok(())
}

重启终端

  • API凭证类型:商家
  • 所需角色:支付API访问

此API重启终端。

use blockchyp;
use std::error::Error;

fn reboot_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::PingRequest{
        terminal_name: "Test Terminal".to_string(),
        ..Default::default()
    };
    let (response, err) = client.reboot(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    reboot_example()?;
    println!("Example completed successfully!");
    Ok(())
}

条款 & 条件端点

开发者可以使用BlockChyp来显示和捕捉与交易相关的合同或协议的接受情况。这些协议可以是任何形式的长期合同,从租赁协议到HIPAA披露。

捕捉条款和条件的两种基本方法。商家可以将合同模板存储在BlockChyp中,或者在每个API调用中将完整的协议文本作为部分发送。正确的方法将主要取决于与BlockChyp集成的系统是否已经有一个组织和管理的协议机制。对于已经内置此功能的系统,可能没有必要使用条款和条件。

当协议在终端上显示时,消费者可以滚动阅读整个协议并提供签名。结果作为API响应的一部分返回,但BlockChyp还存储了协议的记录,包括签名图像、时间戳以及同意的协议全文。

条款和条件日志API可用于搜索和检索接受记录。如果原始API请求中提供了事务ID,这些记录还可以链接到一个事务。

条款和条件捕捉

  • API凭证类型:商家
  • 必需角色:条款和条件管理

此API允许您在终端上提示客户接受法律协议,并(通常)捕捉他们的签名。

协议内容可以通过两种方式指定。您可以使用先前配置的T&C模板,或者在每次请求中传递完整的协议文本。

使用模板

如果您的应用程序不跟踪协议,您可以使用BlockChyp的模板系统。您可以在商家仪表板上创建任意数量的T&C模板,并传递tcAlias标志来指定应显示哪个。

原始内容

如果您的系统跟踪协议语言或执行复杂的合并和渲染逻辑,您可以绕过我们的模板系统,并在每次交易中传递完整的文本。使用tcName传递协议名称,并使用tcContent传递合同文本。请注意,仅支持纯文本。

绕过签名

默认情况下会捕捉签名图像。如果出于某种原因这不符合您的用例,并且您希望在实际上不捕捉签名图像的情况下捕捉接受情况,请将请求中的disableSignature标志设置为。

条款和条件日志

每次用户在终端上接受协议时,签名图像(如果已捕捉)将被上传到网关。该图像还将添加到日志中,包括协议的全文。这可以在标准协议或模板随时间变化时保留历史记录。

将协议与交易关联

要将条款和条件日志条目与事务关联,只需传递相关事务的事务ID或事务引用。

use blockchyp;
use std::error::Error;

fn terms_and_conditions_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::TermsAndConditionsRequest{
        test: true,
        terminal_name: "Test Terminal".to_string(),
        tc_alias: "hippa".to_string(),
        tc_name: "HIPPA Disclosure".to_string(),
        tc_content: "Full contract text".to_string(),
        sig_format: blockchyp::SignatureFormat::PNG,
        sig_width: 200,
        sig_required: true,
        ..Default::default()
    };
    let (response, err) = client.terms_and_conditions(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    terms_and_conditions_example()?;
    println!("Example completed successfully!");
    Ok(())
}

列出模板

  • API凭证类型:商家
  • 必需角色:条款和条件管理

此API返回与商家账户关联的所有条款和条件模板。

use blockchyp;
use std::error::Error;

fn tc_templates_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::TermsAndConditionsTemplateRequest{

        ..Default::default()
    };
    let (response, err) = client.tc_templates(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    tc_templates_example()?;
    println!("Example completed successfully!");
    Ok(())
}

获取模板

  • API凭证类型:商家
  • 必需角色:条款和条件管理

此API返回单个条款和条件模板。

use blockchyp;
use std::error::Error;

fn tc_template_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::TermsAndConditionsTemplateRequest{
        template_id: "<TEMPLATE ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.tc_template(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    tc_template_example()?;
    println!("Example completed successfully!");
    Ok(())
}

更新模板

  • API凭证类型:商家
  • 必需角色:条款和条件管理

此API更新或创建条款和条件模板。

条款和条件模板相对简单,本质上包括名称、内容和别名。

名称是将在屏幕顶部显示的标题。别名是将在后续API调用中用于引用模板的代码或简短描述。

内容是合同或协议的全文。目前不支持特殊格式化或合并行为。仅支持纯文本。

use blockchyp;
use std::error::Error;

fn tc_update_template_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::TermsAndConditionsTemplate{
        alias: "HIPPA".to_string(),
        name: "HIPPA Disclosure".to_string(),
        content: "Lorem ipsum dolor sit amet.".to_string(),
        ..Default::default()
    };
    let (response, err) = client.tc_update_template(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    tc_update_template_example()?;
    println!("Example completed successfully!");
    Ok(())
}

删除模板

  • API凭证类型:商家
  • 必需角色:条款和条件管理

此API删除条款和条件模板。

如果模板被删除,其别名可以被重用,并且从被删除的模板生成的任何先前的“条款和条件”日志条目将被完全保留,因为日志条目总是包括协议文本的完整独立副本。

use blockchyp;
use std::error::Error;

fn tc_delete_template_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::TermsAndConditionsTemplateRequest{
        template_id: "<TEMPLATE ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.tc_delete_template(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    tc_delete_template_example()?;
    println!("Example completed successfully!");
    Ok(())
}

条款和条件日志

  • API凭证类型:商家
  • 必需角色:条款和条件管理

此API允许开发者搜索和排序条款和条件日志条目。

不带参数的默认API调用将按降序返回最后250个日志条目。

可以使用可选参数来过滤和查询数据集。

  • transactionId: 如果提供,则仅返回与特定交易关联的日志条目。如果使用此参数,则忽略分页和日期过滤器。
  • maxResults: 单页中返回的最大结果数。默认为250,最大值为250。
  • startIndex 要返回的结果在完整结果集中的零基起始索引。用于前进页面。例如,如果页面大小为10,并且您希望返回结果的第2页,则发送startIndex为10。
  • startDate:一个可选的开始日期,作为ISO 8601时间戳提供。例如:(2022-05-24T13:51:38+00:00)
  • endDate:一个可选的结束日期,作为ISO 8601时间戳提供。例如:(2022-05-24T13:51:38+00:00)
use blockchyp;
use std::error::Error;

fn tc_log_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::TermsAndConditionsLogRequest{
        log_entry_id: "<LOG ENTRY ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.tc_log(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    tc_log_example()?;
    println!("Example completed successfully!");
    Ok(())
}

条款和条件详情

  • API凭证类型:商家
  • 必需角色:条款和条件管理

此API返回单个条款和条件日志条目的详细信息。要返回的记录的logEntryId是唯一必需的参数。

签名图像以Base 64编码的二进制形式返回,图像格式由sigFormat字段指定。默认格式为PNG。

use blockchyp;
use std::error::Error;

fn tc_entry_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::TermsAndConditionsLogRequest{
        log_entry_id: "<ENTRY ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.tc_entry(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    tc_entry_example()?;
    println!("Example completed successfully!");
    Ok(())
}

令牌管理

BlockChyp通过使用令牌支持已保存的支付和定期支付。令牌可以通过注册API或Web令牌生成器创建。一旦创建,这些令牌就可以用于后续的支付,或与客户记录关联作为已保存的支付方式。

默认情况下,令牌限制在单个商家,但可以通过与BlockChyp的特殊安排在多地点商家之间共享。请联系您的BlockChyp代表设置令牌共享。

注册

  • API凭证类型:商家
  • 所需角色:支付API访问

此API允许您在令牌保险库中令牌化和注册支付方式。您还可以传递客户信息,并将支付方式与客户记录关联。

响应中将返回一个令牌,可用于后续的收费、预授权和退款交易。

礼品卡和EBT

礼品卡和EBT卡不能进行令牌化。

电子商务令牌

注册API和电子商务Web令牌生成器返回的令牌是相同的令牌,可以互换使用。

use blockchyp;
use std::error::Error;

fn enroll_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let mut request = blockchyp::EnrollRequest{
        test: true,
        terminal_name: "Test Terminal".to_string(),
        ..Default::default()
    };
    let (response, err) = client.enroll(&mut request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.approved {
		println!("approved");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    enroll_example()?;
    println!("Example completed successfully!");
    Ok(())
}

令牌元数据

  • API凭证类型:商家
  • 所需角色:支付API访问

此API检索有关令牌的状态和元数据信息,包括任何与客户记录的链接。

这还将返回与令牌后面的卡片相关的任何客户记录。如果底层卡片被令牌化多次,将返回与卡片相关的所有客户,即使这些客户关联与其他令牌有关。

use blockchyp;
use std::error::Error;

fn token_metadata_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::TokenMetadataRequest{
        token: "<TOKEN>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.token_metadata(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    token_metadata_example()?;
    println!("Example completed successfully!");
    Ok(())
}

  • API凭证类型:商家
  • 所需角色:支付API访问

此API将支付令牌与客户记录链接起来。通常,这只需要撤销先前的取消链接操作。

use blockchyp;
use std::error::Error;

fn link_token_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::LinkTokenRequest{
        token: "<TOKEN>".to_string(),
        customer_id: "<CUSTOMER ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.link_token(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    link_token_example()?;
    println!("Example completed successfully!");
    Ok(())
}

  • API凭证类型:商家
  • 所需角色:支付API访问

此API从客户记录中删除支付令牌链接。

这将删除客户记录与同一底层卡的所有令牌之间的链接。

use blockchyp;
use std::error::Error;

fn unlink_token_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::UnlinkTokenRequest{
        token: "<TOKEN>".to_string(),
        customer_id: "<CUSTOMER ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.unlink_token(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    unlink_token_example()?;
    println!("Example completed successfully!");
    Ok(())
}

删除令牌

  • API凭证类型:商家
  • 所需角色:支付API访问

此API从网关中删除支付令牌。如果令牌一年内未使用,则自动删除。

use blockchyp;
use std::error::Error;

fn delete_token_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::DeleteTokenRequest{
        token: "<TOKEN>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.delete_token(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    delete_token_example()?;
    println!("Example completed successfully!");
    Ok(())
}

客户端点

这些API允许开发者在BlockChyp中创建和管理客户记录。希望使用BlockChyp进行令牌化周期性付款的开发者,如果他们有自己的客户管理系统,可以直接使用令牌。然而,BlockChyp还提供额外的工具来管理客户并跟踪客户的保存支付令牌。

此外,如果使用客户功能,BlockChyp可以检测与现有客户关联的支付方式,并返回与支付交易相关的客户数据。这可以作为一种被动的方法来检测重复客户。

更新客户

  • API凭证类型:商家
  • 所需角色:支付API访问

此API添加或更新客户记录。

如果您传递客户信息(包括firstNamelastNameemailsms),但没有任何客户ID或客户引用,则会创建新的记录。

如果您传递customerRefcustomerId,如果存在客户记录,则会更新该记录。

客户引用

customerRef字段是可选的,但强烈推荐使用,因为这允许您使用自己的客户标识符,而不是在系统中存储BlockChyp的客户ID。

使用支付交易创建客户记录

如果在执行支付交易时可用客户信息,您可以直接将所有相同的客户信息传递给支付交易。BlockChyp将在捕获支付的同时创建客户记录。这种方法的优势在于,客户的支付卡可以一次性自动与客户记录相关联。如果客户将来使用这张支付卡,客户数据将自动返回。您不需要要求客户提供任何其他信息。

use blockchyp;
use std::error::Error;

fn update_customer_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::UpdateCustomerRequest{
        customer: blockchyp::Customer{
            id: "<CUSTOMER ID>".to_string(),
            customer_ref: "Customer reference string".to_string(),
            first_name: "FirstName".to_string(),
            last_name: "LastName".to_string(),
            company_name: "Company Name".to_string(),
            email_address: "[email protected]".to_string(),
            sms_number: "(123) 123-1231".to_string(),
            ..Default::default()
        },
        ..Default::default()
    };
    let (response, err) = client.update_customer(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    update_customer_example()?;
    println!("Example completed successfully!");
    Ok(())
}

检索客户

  • API凭证类型:商家
  • 所需角色:支付API访问

使用此API,您可以检索有关客户记录的详细信息,包括如果有的话,保存的支付方式。

客户可以通过customerIdcustomerRef进行查找。

use blockchyp;
use std::error::Error;

fn customer_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::CustomerRequest{
        customer_id: "<CUSTOMER ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.customer(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    customer_example()?;
    println!("Example completed successfully!");
    Ok(())
}

搜索客户

  • API凭证类型:商家
  • 所需角色:支付API访问

此API搜索客户数据库并返回匹配的结果。

使用query传递搜索字符串,系统将返回所有姓名中包含查询字符串的结果。

use blockchyp;
use std::error::Error;

fn customer_search_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::CustomerSearchRequest{
        query: "(123) 123-1234".to_string(),
        ..Default::default()
    };
    let (response, err) = client.customer_search(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    customer_search_example()?;
    println!("Example completed successfully!");
    Ok(())
}

删除客户

  • API凭证类型:商家
  • 所需角色:支付API访问

此API删除客户记录。

use blockchyp;
use std::error::Error;

fn delete_customer_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::DeleteCustomerRequest{
        customer_id: "<CUSTOMER ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.delete_customer(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    delete_customer_example()?;
    println!("Example completed successfully!");
    Ok(())
}

调查参考

这些API用于处理交易后调查和调查数据。

商家可以选择配置可缩放(1-5)或是/否问题,这些问题可以在每笔批准的收费和预授权交易后向消费者展示。调查不需要任何自定义编程,商家可以简单地配置它们,无需销售点系统进行任何额外定制。

然而,这些API允许销售点或第三方系统开发人员将调查问题配置或结果可视化集成到自己的系统中。

列出问题

  • API凭证类型:商家
  • 所需角色:调查管理

此API返回终端上将要展示的所有调查问题。

所有问题都返回,无论是否启用。

use blockchyp;
use std::error::Error;

fn survey_questions_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::SurveyQuestionRequest{

        ..Default::default()
    };
    let (response, err) = client.survey_questions(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    survey_questions_example()?;
    println!("Example completed successfully!");
    Ok(())
}

问题详情

  • API凭证类型:商家
  • 所需角色:调查管理

此API返回单个调查问题及其响应数据。questionId是必需的。

use blockchyp;
use std::error::Error;

fn survey_question_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::SurveyQuestionRequest{
        question_id: "<QUESTION ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.survey_question(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    survey_question_example()?;
    println!("Example completed successfully!");
    Ok(())
}

更新问题

  • API凭证类型:商家
  • 所需角色:调查管理

此API更新或创建调查问题。questionTextquestionType是必填字段。以下值是questionType的有效值。

  • yes_no:用于简单的是/否问题。
  • scaled:显示带有按钮的问题,允许客户以1到5的值响应。

问题默认禁用。传递enabled以启用问题。

ordinal字段用于控制多个问题启用时的问题顺序。我们建议将问题数量保持在最少。

use blockchyp;
use std::error::Error;

fn update_survey_question_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::SurveyQuestion{
        id: "<QUESTION ID>".to_string(),
        ordinal: 1,
        question_text: "Would you shop here again?".to_string(),
        question_type: "yes_no".to_string(),
        enabled: true,
        ..Default::default()
    };
    let (response, err) = client.update_survey_question(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    update_survey_question_example()?;
    println!("Example completed successfully!");
    Ok(())
}

删除问题

  • API凭证类型:商家
  • 所需角色:调查管理

该API用于删除调查问题。 questionId 是必填参数。

use blockchyp;
use std::error::Error;

fn delete_survey_question_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::SurveyQuestionRequest{
        question_id: "<QUESTION ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.delete_survey_question(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    delete_survey_question_example()?;
    println!("Example completed successfully!");
    Ok(())
}

调查结果

  • API凭证类型:商家
  • 所需角色:调查管理

该API返回单个问题的调查结果。

返回的结果包括响应率,即消费者提供答案后的交易百分比。

responses 数组根据答案分解结果,提供总响应次数、答案占总数的百分比以及与特定答案相关的平均交易金额。

默认情况下,将返回基于所有响应的所有结果。但是,开发者可以选择提供 startDateendDate 参数,以仅返回特定日期范围内的响应。

startDateendDate 可以为 MM/DD/YYYY 或 YYYY-MM-DD 格式。

use blockchyp;
use std::error::Error;

fn survey_results_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::SurveyResultsRequest{
        question_id: "<QUESTION ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.survey_results(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    survey_results_example()?;
    println!("Example completed successfully!");
    Ok(())
}

媒体和品牌控制

BlockChyp 拥有一个复杂的终端媒体和品牌控制平台。终端可以配置为在空闲时显示标志、图片、视频和幻灯片。如果需要,可以在合作伙伴、组织和商户级别配置品牌资产,并具有按小时细粒度的计划。

从概念上讲,所有品牌和媒体都从媒体库开始。商户、合作伙伴和组织可以上传图片或视频,并从上传的媒体创建品牌资产。

幻灯片可以将媒体库中的图片组合成一个循环播放的图像序列。

品牌资产可以用来将媒体或幻灯片与优先级和定时规则结合起来,以创建我们所说的“终端品牌堆栈”。

我们称一组品牌资产为“终端品牌堆栈”,因为存在关于哪些品牌资产具有优先级的隐式规则。例如,没有配置品牌资产的商户将继承其可能属于的任何组织的品牌规则。如果商户不属于任何组织或组织未配置品牌规则,则系统将退回到由销售点或拥有商户的软件合作伙伴建立的默认品牌。

此功能使合作伙伴和组织(多店运营商和大型全国连锁店)能够从单个界面配置可能成千上万的终端的品牌。

终端品牌也可以在单个终端级别进行配置,商户的终端车队可以分成组,并在组级别配置品牌。在终端级别配置的品牌将始终覆盖任何较高级别组的品牌。

终端品牌堆栈的优先级顺序如下。

  • 终端
  • 终端组
  • 商户
  • 组织(地区、连锁店等)
  • 合作伙伴
  • BlockChyp 默认标志

媒体库

  • API凭证类型: 商户、合作伙伴和组织
  • 所需角色: 媒体管理

此API返回与API凭证(商户、合作伙伴或组织)关联的整个媒体库。媒体库结果将包括用于在幻灯片和品牌资产中引用媒体资产的ID,以及完整的文件URL和缩略图。

use blockchyp;
use std::error::Error;

fn media_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::MediaRequest{

        ..Default::default()
    };
    let (response, err) = client.media(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    media_example()?;
    println!("Example completed successfully!");
    Ok(())
}

上传媒体

  • API凭证类型: 商户、合作伙伴和组织
  • 所需角色: 媒体管理

此API支持媒体库上传。根据SDK平台,此API的操作略有不同。在所有情况下,目的是允许使用可能的最底层I/O原语将文件的二进制数据传递到SDK,以支持开发人员不处理实际文件的情况。使用缓冲区、原始字节或流可能更方便。

例如,Go实现接受一个 io.Reader,Java实现接受一个 java.io.InputStream。CLI接受通过 -file 命令行参数的文本文件URL。

以下文件格式被视为有效的上传

  • .png
  • .jpg
  • .jpeg
  • .gif
  • .mov
  • .mpg
  • .mp4
  • .mpeg

UploadMetadata对象允许开发者传递关于上传的附加元数据,包括fileNamefileSizeuploadId

这些值都不是必需的,但提供它们可以解锁一些与媒体上传相关的附加功能。fileName将用于记录媒体库中的原始文件名。fileSizeuploadId用于支持上传状态跟踪,这对于大型视频文件上传尤其有用。

fileSize应该是文件的完整大小(以字节为单位)。

uploadId值可以是任何随机字符串。这是您将通过Upload Status API检查上传状态时使用的值。此API将返回驱动上传进度反馈所需的信息,并返回视频转码信息。

use blockchyp;
use std::error::Error;
use std::fs::File;
fn upload_media_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::UploadMetadata{
        file_name: "aviato.png".to_string(),
        file_size: 18843,
        upload_id: "<RANDOM ID>".to_string(),
        ..Default::default()
    };
    let mut file = File::open("aviato.png")?;
    let (response, err) = client.upload_media(&request, &mut file);


    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    upload_media_example()?;
    println!("Example completed successfully!");
    Ok(())
}

上传状态

  • API凭证类型: 商户、合作伙伴和组织
  • 所需角色: 媒体管理

此API返回有关正在进行或最近完成的上传的状态和进度信息。

在调用此API之前,开发者必须首先使用fileSizeuploadId参数启动文件上传。

返回的数据结构将包括文件大小、已上传字节数、叙述状态以及指示上传是否完成或上传后处理是否正在进行的状态标志。
如果上传已完成,则还会返回分配给媒体资产的ID以及缩略图链接。

use blockchyp;
use std::error::Error;

fn upload_status_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::UploadStatusRequest{
        upload_id: "<UPLOAD ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.upload_status(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    upload_status_example()?;
    println!("Example completed successfully!");
    Ok(())
}

获取媒体资产

  • API凭证类型: 商户、合作伙伴和组织
  • 所需角色: 媒体管理

此API返回详细的媒体资产。返回的数据包括与完整媒体库端点返回的完全相同的媒体信息,包括指向原始媒体文件和缩略图的完全限定URL。

use blockchyp;
use std::error::Error;

fn media_asset_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::MediaRequest{
        media_id: "<MEDIA ASSET ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.media_asset(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    media_asset_example()?;
    println!("Example completed successfully!");
    Ok(())
}

删除媒体资产

  • API凭证类型: 商户、合作伙伴和组织
  • 所需角色: 媒体管理

此API删除媒体资产。请注意,如果媒体资产正在幻灯片放映或终端品牌堆栈中使用,则无法删除。

use blockchyp;
use std::error::Error;

fn delete_media_asset_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::MediaRequest{
        media_id: "<MEDIA ASSET ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.delete_media_asset(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    delete_media_asset_example()?;
    println!("Example completed successfully!");
    Ok(())
}

列出幻灯片放映

  • API凭证类型: 商户、合作伙伴和组织
  • 所需角色: 媒体管理

此API返回所有幻灯片放映。

请注意,此API不返回幻灯片级别的数据。使用Get Slide Show API获取幻灯片级别的详细信息。

use blockchyp;
use std::error::Error;

fn slide_shows_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::SlideShowRequest{

        ..Default::default()
    };
    let (response, err) = client.slide_shows(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    slide_shows_example()?;
    println!("Example completed successfully!");
    Ok(())
}

获取幻灯片放映

  • API凭证类型: 商户、合作伙伴和组织
  • 所需角色: 媒体管理

此API返回单个幻灯片放映。每个幻灯片的完全限定缩略图URL都会返回幻灯片级别的详细信息。

slideShowId是唯一的必需参数。

use blockchyp;
use std::error::Error;

fn slide_show_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::SlideShowRequest{
        slide_show_id: "<SLIDE SHOW ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.slide_show(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    slide_show_example()?;
    println!("Example completed successfully!");
    Ok(())
}

更新幻灯片放映

  • API凭证类型: 商户、合作伙伴和组织
  • 所需角色: 媒体管理

此API更新或创建幻灯片放映。namedelayslides是必需的。

幻灯片属性是一个幻灯片数组。幻灯片数据结构有顺序和缩略图URL字段,但在更新或创建幻灯片放映时,这些字段不是必需的。在更新或创建幻灯片放映时,仅需要mediaId字段。

当使用CLI时,可以通过发送逗号分隔的媒体ID列表通过-mediaId参数指定幻灯片。

use blockchyp;
use std::error::Error;

fn update_slide_show_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::SlideShow{
        name: "Test Slide Show".to_string(),
        delay: 5,
        slides: Some(vec![
            blockchyp::Slide{
                media_id: "<MEDIA ID>".to_string(),
                ..Default::default()
            },

        ]),
        ..Default::default()
    };
    let (response, err) = client.update_slide_show(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    update_slide_show_example()?;
    println!("Example completed successfully!");
    Ok(())
}

删除幻灯片放映

  • API凭证类型: 商户、合作伙伴和组织
  • 所需角色: 媒体管理

此API删除幻灯片放映。唯一的必需参数是slideShowId

use blockchyp;
use std::error::Error;

fn delete_slide_show_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::SlideShowRequest{
        slide_show_id: "<SLIDE SHOW ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.delete_slide_show(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    delete_slide_show_example()?;
    println!("Example completed successfully!");
    Ok(())
}

终端品牌

  • API凭证类型: 商户、合作伙伴和组织
  • 所需角色: 媒体管理

此API返回给定API作用域中按优先级排序的完整品牌堆栈。

此API的消费者应特别注意editable字段。此字段指示特定API凭证作用域中品牌资产是否为只读。

可以使用thumbnailpreviewImage属性来支持构建用于管理品牌堆栈的用户界面。previewImagethumbnail不同,因为预览图像的目的是显示资产在实际显示在终端时的外观。

activeAsset返回当前在终端上可见的资产。

use blockchyp;
use std::error::Error;

fn terminal_branding_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::BrandingAssetRequest{

        ..Default::default()
    };
    let (response, err) = client.terminal_branding(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    terminal_branding_example()?;
    println!("Example completed successfully!");
    Ok(())
}

更新品牌资产

  • API凭证类型: 商户、合作伙伴和组织
  • 所需角色: 媒体管理

此API更新或创建单个品牌资产。

品牌资产代表终端品牌堆栈的单个元素。品牌资产可以是视频或图片,在这种情况下,必须提供一个引用媒体库中资产的mediaId。品牌资产也可以是幻灯片,在这种情况下,必须提供slideShowId。品牌资产必须有一个有效的mediaId或有效的slideShowId。可选的notes字段可以用来为品牌资产提供简短注释和描述。

可见性标志

为了使品牌资产在终端上可见,必须将enabled标志设置为true,并将preview关闭。preview的目的是在不将其推送到实时终端的情况下显示建议的品牌资产的行为。BlockChyp商家门户中的发布按钮实际上关闭了preview设置。

顺序和排序

使用ordinal字段来指定品牌资产的优先级。具有较高ordinal值的资产将优先。

填充图像

对于纯图像,添加边距有时很有帮助。这对于没有在图像内容与图像文件边缘之间留有空白或边距的标志或任何图像文件特别有帮助。如果您想BlockChyp在终端上显示图像时自动应用边距,请将padded标志设置为true。

调度

默认情况下,放置在品牌堆栈顶部的品牌资产,如果它处于enabled状态并且不在preview模式下,将立即在终端上全天候显示。

品牌资产可以安排在特定日期和时间显示,以适应季节性活动。这些资产还可以安排在特定时间和特定工作日显示。

  • startDate: 可选日期,在此日期之后品牌资产才有资格显示。可以是MM/DD/YYYY或YYYY-MM-DD格式。
  • endDate: 可选日期,在此日期之前品牌资产才有资格显示。可以是MM/DD/YYYY或YYYY-MM-DD格式。
  • startTime: 可选时间,在此时间之后品牌资产才有资格显示。必须是24小时时间格式:HH:MM。
  • endTime: 可选时间,在此时间之前品牌资产才有资格显示。必须是24小时时间格式:HH:MM。
  • daysOfWeek: 对于只在某些工作日显示的品牌资产,此字段是工作日常量的数组。(常量因SDK平台而异。)

只读字段

当检索品牌资产时,品牌资产数据结构有多个只读字段返回。但尝试作为更新的一部分发送时,这些字段将被忽略。这些是派生或计算字段,有助于在管理用户界面中显示品牌资产,但不能通过API调用进行更改。

这些字段包括

  • ownerId
  • merchantId
  • organizationId
  • partnerId
  • userId
  • userName
  • thumbnail
  • lastModified
  • editable
  • assetType
  • ownerType
  • ownerTypeCaption
  • previewImage
  • narrativeEffectiveDates
  • narrativeDisplayPeriod
use blockchyp;
use std::error::Error;

fn update_branding_asset_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::BrandingAsset{
        media_id: "<MEDIA ID>".to_string(),
        padded: true,
        ordinal: 10,
        start_date: "01/06/2021".to_string(),
        start_time: "14:00".to_string(),
        end_date: "11/05/2024".to_string(),
        end_time: "16:00".to_string(),
        notes: "Test Branding Asset".to_string(),
        preview: false,
        enabled: true,
        ..Default::default()
    };
    let (response, err) = client.update_branding_asset(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    update_branding_asset_example()?;
    println!("Example completed successfully!");
    Ok(())
}

删除品牌资产

  • API凭证类型: 商户、合作伙伴和组织
  • 所需角色: 媒体管理

此API从品牌堆栈中删除品牌资产。

请注意,删除品牌资产并不会从媒体库中删除底层媒体或从幻灯片库中删除幻灯片。

use blockchyp;
use std::error::Error;

fn delete_branding_asset_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::BrandingAssetRequest{
        asset_id: "<BRANDING ASSET ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.delete_branding_asset(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    delete_branding_asset_example()?;
    println!("Example completed successfully!");
    Ok(())
}

商家管理

这些API允许合作伙伴管理和配置他们的商家组合。

使用这些API(除商家资料API外)需要合作伙伴级别的API凭证,这些凭证具有特殊角色和权限,可能需要与BlockChyp进行特殊安排。

例如,合作伙伴通常不能直接登机商家,而必须使用标准承保流程通过报价代码和邀请来登机商家。

商家资料

  • API凭证类型:商家
  • 所需角色:支付API访问

API返回有关商家配置的详细元数据,包括基本身份信息、终端设置、存储和转发设置以及支持分账的商家的银行账户信息。

其中一些字段可以通过更新商家API进行更新,但许多字段由承保和风险过程控制,无法在承保和风险过程之外更改。

商家描述字段

以下字段是基本描述字段,可用于描述和识别商家。

  • companyName: 商家的官方企业实体名称。
  • dbaName: 企业的DBA(营业名称)。
  • contactName: 商家主要控制联系人的姓名。
  • contactNumber: 主要控制联系人的电话号码。
  • locationName: 多地点运营商的可选位置名称。
  • storeNumber: 多地点运营商的可选店铺号码。
  • partnerRef: 合作伙伴可以添加到商家记录的可选参考号码。通常是合作伙伴对商家的自身标识符。
  • timeZone: 商家的Unix风格本地时区。例如:America/New_York。
  • publicKey: 只读字段。商家的区块链公钥。在商家账户首次创建时生成和分配。
  • billingAddress: 账单和书面通讯的地址。
  • shippingAddress: 实际的物理发货地址。通常是企业的实际街道地址。
  • status: 商家账户的当前状态。
  • tcDisabled: 禁用商家仪表板中的所有条款和条件功能。如果合作伙伴未选择支持该功能,则用于隐藏该功能。
  • gatewayOnly: 表示商家已在网关模式下登机。不常见。

批量和处理设置

以下字段用于控制批量关闭和高级终端配置。

  • batchCloseTime: 批量将在商家本地时间以24小时HH:MM格式自动关闭的时间。默认为凌晨3点。
  • autoBatchClose: 标志确定是否自动关闭批量。默认为true。
  • disableBatchEmails: 标志可选地关闭自动批量关闭通知电子邮件。
  • cooldownTimeout: 在终端上显示交易响应后,经过的时间(以秒为单位)。冷却期结束后,终端将恢复到空闲状态并显示当前活动的终端品牌。
  • surveyTimeout: 在终端上显示调查问题之前的时间(以秒为单位),然后恢复到空闲屏幕。
  • pinEnabled: 启用借记卡、EBT卡和具有PIN CVM的EMV卡的PIN码输入。如果终端未注入正确的加密密钥,则将被忽略。
  • pinBypassEnabled: 启用借记交易的PIN码绕过。
  • cashBackEnabled: 启用借记交易的现金返还。
  • cashbackPresets: 当启用现金返还时,现金返还金额的四个默认值数组。
  • storeAndForwardEnabled: 在网络中断期间启用自动存储和转发。存储和转发不支持现金返还、退款、EBT或礼品卡交易。
  • storeAndForwardFloorLimit: 存储和转发交易的最大美元价值。
  • ebtEnabled: 在BlockChyp终端上启用EBT(SNAP)。
  • tipEnabled: 在终端上启用小费输入。
  • promptForTip: 如果为true,终端将始终提示输入小费,即使API调用没有请求小费提示。
  • tipDefaults: 一个包含三个百分比数组的对象,用于计算默认小费金额。
  • giftCardsDisabled: 禁用BlockChyp礼品卡。通常仅在商家使用替代礼品卡系统时使用。
  • digitalSignaturesEnabled: 启用磁条卡和带有签名CVM的EMV卡的电子签名捕获。
  • digitalSignatureReversal: 如果消费者拒绝提供签名,将自动撤销交易。
  • manualEntryEnabled: 启用手动卡输入。
  • manualEntryPromptZip: 对于手动卡输入,需要基于邮编的地址验证。
  • manualEntryPromptStreetNumber: 对于手动卡输入,需要基于街道/地址的验证。

卡品牌和交易设置

  • freeRangeRefundsEnabled: 启用不引用先前交易的直接退款。
  • partialAuthEnabled: 表示已启用部分授权(通常用于礼品卡支持)。
  • splitBankAccountsEnabled: 仅用于律师事务所的商家。
  • contactlessEmv: 在终端上启用非接触式/轻触式交易。默认为true。
  • visa: 启用Visa交易。
  • masterCard: 启用MasterCard交易。
  • amex: 启用美国运通交易。
  • discover: 启用Discover交易。
  • jcb: 启用JCB(日本信用卡局)交易。
  • unionPay: 启用中国银联交易。
use blockchyp;
use std::error::Error;

fn merchant_profile_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::MerchantProfileRequest{

        ..Default::default()
    };
    let (response, err) = client.merchant_profile(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    merchant_profile_example()?;
    println!("Example completed successfully!");
    Ok(())
}

获取商家

  • API凭证类型: 合作伙伴 & 组织
  • 所需角色: 商家管理

这是一个合作伙伴或组织级别的API,可以用来返回商家组合。

默认返回实时商家。使用test标志只返回测试商家。返回的结果包括详细的设置,包括承保控制的标志。

默认返回250家商家。对于大型商家组合,可以使用maxResultsstartIndex字段来减少页面大小并浏览多页结果。

use blockchyp;
use std::error::Error;

fn get_merchants_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::GetMerchantsRequest{
        test: true,
        ..Default::default()
    };
    let (response, err) = client.get_merchants(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    get_merchants_example()?;
    println!("Example completed successfully!");
    Ok(())
}

更新商家

  • API凭证类型: 商户、合作伙伴和组织
  • 所需角色: 商家管理

可以使用此API更新或创建商家账户。

商家级别的API凭证可以用来更新商家账户设置。

合作伙伴级别的API凭证可以用来更新商家,创建新的测试商家或加入新的网关商家。

商家描述字段

以下字段是基本描述字段,可用于描述和识别商家。

  • companyName: 商家的官方企业实体名称。
  • dbaName: 商业DBA(作为)名称。
  • contactName: 商家主要控制联系人的姓名。
  • contactNumber: 主要控制联系人的电话号码。
  • locationName: 对于多地点运营商,可选的地点名称。
  • storeNumber: 对于多地点运营商,可选的店铺编号。
  • partnerRef: 合作伙伴可以添加到商家记录的可选参考号码。通常是合作伙伴对商家的自身标识符。
  • timeZone: 商家的Unix风格本地时区。例如:America/New_York。
  • publicKey: 只读字段。商家的区块链公钥。在商家账户首次创建时生成和分配。
  • billingAddress: 账单和书面通讯的地址。
  • shippingAddress: 实际的物理发货地址。通常是企业的实际街道地址。
  • status: 商家账户的当前状态。
  • tcDisabled: 禁用商家仪表板中的所有条款和条件功能。如果合作伙伴未选择支持该功能,则用于隐藏该功能。
  • gatewayOnly: 表示商家已在网关模式下登机。不常见。

批量和处理设置

以下字段用于控制批量关闭和高级终端配置。

  • batchCloseTime: 批量将在商家本地时间以24小时HH:MM格式自动关闭的时间。默认为凌晨3点。
  • autoBatchClose: 标志确定是否自动关闭批量。默认为true。
  • disableBatchEmails: 标志可选地关闭自动批量关闭通知电子邮件。
  • cooldownTimeout: 在终端上显示交易响应后,经过的时间(以秒为单位)。冷却期结束后,终端将恢复到空闲状态并显示当前活动的终端品牌。
  • surveyTimeout: 在终端上显示调查问题之前的时间(以秒为单位),然后恢复到空闲屏幕。
  • pinEnabled: 启用借记卡、EBT卡和具有PIN CVM的EMV卡的PIN码输入。如果终端未注入正确的加密密钥,则将被忽略。
  • pinBypassEnabled: 启用借记交易的PIN码绕过。
  • cashBackEnabled: 启用借记交易的现金返还。
  • cashbackPresets: 当启用现金返还时,现金返还金额的四个默认值数组。
  • storeAndForwardEnabled: 在网络中断期间启用自动存储和转发。存储和转发不支持现金返还、退款、EBT或礼品卡交易。
  • storeAndForwardFloorLimit: 存储和转发交易的最大美元价值。
  • ebtEnabled: 在BlockChyp终端上启用EBT(SNAP)。
  • tipEnabled: 在终端上启用小费输入。
  • promptForTip: 如果为true,终端将始终提示输入小费,即使API调用没有请求小费提示。
  • tipDefaults: 一个包含三个百分比数组的对象,用于计算默认小费金额。
  • giftCardsDisabled: 禁用BlockChyp礼品卡。通常仅在商家使用替代礼品卡系统时使用。
  • digitalSignaturesEnabled: 启用磁条卡和带有签名CVM的EMV卡的电子签名捕获。
  • digitalSignatureReversal: 如果消费者拒绝提供签名,将自动撤销交易。
  • manualEntryEnabled: 启用手动卡输入。
  • manualEntryPromptZip: 对于手动卡输入,需要基于邮编的地址验证。
  • manualEntryPromptStreetNumber: 对于手动卡输入,需要基于街道/地址的验证。

卡品牌和交易设置

  • freeRangeRefundsEnabled: 启用不引用先前交易的直接退款。
  • partialAuthEnabled: 表示已启用部分授权(通常用于礼品卡支持)。
  • splitBankAccountsEnabled: 仅用于律师事务所的商家。
  • contactlessEmv: 在终端上启用非接触式/轻触式交易。默认为true。
  • visa: 启用Visa交易。
  • masterCard: 启用MasterCard交易。
  • amex: 启用美国运通交易。
  • discover: 启用Discover交易。
  • jcb: 启用JCB(日本信用卡局)交易。
  • unionPay: 启用中国银联交易。
use blockchyp;
use std::error::Error;

fn update_merchant_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::MerchantProfile{
        merchant_id: "<MERCHANT ID>".to_string(),
        test: true,
        dba_name: "Test Merchant".to_string(),
        company_name: "Test Merchant".to_string(),
        billing_address: blockchyp::Address{
            address_1: "1060 West Addison".to_string(),
            city: "Chicago".to_string(),
            state_or_province: "IL".to_string(),
            postal_code: "60613".to_string(),
            ..Default::default()
        },
        ..Default::default()
    };
    let (response, err) = client.update_merchant(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    update_merchant_example()?;
    println!("Example completed successfully!");
    Ok(())
}

商家用户

  • API凭证类型: 合作伙伴 & 组织
  • 所需角色: 商家管理

此API返回与商家账户相关联的所有用户和待处理邀请,包括任何分配的角色代码。

use blockchyp;
use std::error::Error;

fn merchant_users_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::MerchantProfileRequest{
        merchant_id: "<MERCHANT ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.merchant_users(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    merchant_users_example()?;
    println!("Example completed successfully!");
    Ok(())
}

邀请商家用户

  • API凭证类型: 合作伙伴 & 组织
  • 所需角色: 商家管理

邀请新用户加入商家账户。emailfirstNamelastName是必需的。

用户将收到一封邀请电子邮件,其中包含创建BlockChyp账户并将其与商家账户链接的步骤。如果用户已经拥有BlockChyp用户账户,则将跳过新用户注册,并将现有用户账户链接到商家账户。

开发者可以选择通过发送一个或多个角色代码来限制用户的访问级别。否则,用户将被赋予默认的商家用户角色。(STDMERCHANT)

use blockchyp;
use std::error::Error;

fn invite_merchant_user_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::InviteMerchantUserRequest{
        email: "Email address for the invite".to_string(),
        ..Default::default()
    };
    let (response, err) = client.invite_merchant_user(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    invite_merchant_user_example()?;
    println!("Example completed successfully!");
    Ok(())
}

添加测试商家

  • API凭证类型: 合作伙伴
  • 所需角色: 商家管理

这是一个合作伙伴级别的API,可以用来创建测试商家账户。这将创建一个带有默认设置的测试商家。

可以使用更新商家API来更改设置。

use blockchyp;
use std::error::Error;

fn add_test_merchant_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::AddTestMerchantRequest{
        dba_name: "DBA Name".to_string(),
        company_name: "Corporate Entity Name".to_string(),
        ..Default::default()
    };
    let (response, err) = client.add_test_merchant(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    add_test_merchant_example()?;
    println!("Example completed successfully!");
    Ok(())
}

删除测试商家

  • API凭证类型: 合作伙伴
  • 所需角色: 商家管理

此合作伙伴API可用于删除未使用的测试商户账户。merchantId是一个必需参数。

use blockchyp;
use std::error::Error;

fn delete_test_merchant_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::MerchantProfileRequest{
        merchant_id: "<MERCHANT ID>".to_string(),
        ..Default::default()
    };
    let (response, err) = client.delete_test_merchant(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    delete_test_merchant_example()?;
    println!("Example completed successfully!");
    Ok(())
}

合作伙伴实用工具

这些仅合作伙伴API为ISV合作伙伴提供高级报告和用于管理其投资组合的工具。

以下大多数API用于投资组合报告,范围从基本的合作伙伴佣金报表到包含所有底层卡品牌数据的个人报表。

我们还提供定价政策API,使合作伙伴能够拉取其投资组合中任何商户当前生效的定价规则。

检索定价政策

  • API凭证类型: 合作伙伴
  • 必需角色:合作伙伴API访问

该API返回商户的当前定价政策。此API适用于合作伙伴范围API凭证,且merchantId是必需参数。默认情况下,此API返回商户当前生效的定价政策,但可以通过提供id参数返回其他非活动政策。

对于交换加价和固定费率定价,始终返回买入汇率,但只有与定价模型类型(固定费率或交换加价)相关的定价实际上用于费用计算。

每个定价级别返回三个值:buyRatecurrentlimit。商户实际支付的金额在current字段中给出。其他值反映了合作伙伴在更改价格时可以使用的合同最低价(buyRate)和最高价(limit)范围。

use blockchyp;
use std::error::Error;

fn pricing_policy_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::PricingPolicyRequest{

        ..Default::default()
    };
    let (response, err) = client.pricing_policy(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    pricing_policy_example()?;
    println!("Example completed successfully!");
    Ok(())
}

合作伙伴报表

  • API凭证类型: 合作伙伴
  • 必需角色:合作伙伴API访问

该API返回合作伙伴剩余报表的列表。默认情况下,所有报表按最新报表顺序列出。可选日期参数(startDateendDate)可以过滤报表到特定日期范围。

报表列表返回有关报表的基本信息,如交易量、交易次数和赚取的佣金。

使用每个报表摘要中返回的id合作伙伴报表详情API一起使用,以拉取完整详情。

use blockchyp;
use std::error::Error;

fn partner_statements_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::PartnerStatementListRequest{

        ..Default::default()
    };
    let (response, err) = client.partner_statements(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    partner_statements_example()?;
    println!("Example completed successfully!");
    Ok(())
}

合作伙伴报表详情

  • API凭证类型: 合作伙伴
  • 必需角色:合作伙伴API访问

该API返回有关特定合作伙伴报表的详细信息。返回汇总数据和每个底层商户报表的行项级别数据。

使用商户发票ID与商户报表详情API和合作伙伴佣金分解API一起使用,分别获取商户报表和卡品牌费用分解。

use blockchyp;
use std::error::Error;

fn partner_statement_detail_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::PartnerStatementDetailRequest{

        ..Default::default()
    };
    let (response, err) = client.partner_statement_detail(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    partner_statement_detail_example()?;
    println!("Example completed successfully!");
    Ok(())
}

商户发票

  • API凭证类型:合作伙伴或商户
  • 必需角色:合作伙伴API访问或商户API

该API返回商户报表和发票的列表。默认情况下,所有发票按最新报表顺序列出。可选日期参数(startDateendDate)可用于按日期范围过滤报表。

invoiceType参数还可以用于按类型过滤发票。发票可以是传统发票,例如在订购终端或礼品卡时生成,或者发票可以是商户报表。

use blockchyp;
use std::error::Error;

fn merchant_invoices_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::MerchantInvoiceListRequest{

        ..Default::default()
    };
    let (response, err) = client.merchant_invoices(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    merchant_invoices_example()?;
    println!("Example completed successfully!");
    Ok(())
}

商户发票详情

  • API凭证类型: 合作伙伴
  • 必需角色:合作伙伴API访问

该API返回有关特定商户报表或发票的详细信息。

所有行项以地形排序的树形结构返回,建模发票的嵌套行项结构。返回有关针对发票发布的任何付款的详细信息。

如果发票是商户对账单,则还会返回对账单期间发生的每个商户存款的详细信息。

use blockchyp;
use std::error::Error;

fn merchant_invoice_detail_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::MerchantInvoiceDetailRequest{

        ..Default::default()
    };
    let (response, err) = client.merchant_invoice_detail(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    merchant_invoice_detail_example()?;
    println!("Example completed successfully!");
    Ok(())
}

合作伙伴佣金分解

  • API凭证类型: 合作伙伴
  • 必需角色:合作伙伴API访问

此API允许合作伙伴拉取用于计算特定商户对账单的合作伙伴佣金的低级数据。

statementId是必需的,并且必须是类型为statement的有效商户发票的ID。

use blockchyp;
use std::error::Error;

fn partner_commission_breakdown_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::PartnerCommissionBreakdownRequest{

        ..Default::default()
    };
    let (response, err) = client.partner_commission_breakdown(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    partner_commission_breakdown_example()?;
    println!("Example completed successfully!");
    Ok(())
}

商户凭证生成

  • API凭证类型: 合作伙伴
  • 必需角色:合作伙伴API访问

此API允许合作伙伴为商户生成API凭证。

merchantId是必需的,并且必须是有效商户的ID。

默认情况下,凭证不受删除保护。通过传递deleteProtected启用删除保护。

可选的notes字段将在凭证中填充备注。

默认情况下,除非在roles字段中传递有效的、以逗号分隔的角色代码,否则不会分配任何角色。

use blockchyp;
use std::error::Error;

fn merchant_credential_generation_example() -> Result<(), Box<dyn Error>> {
    // sample credentials
    let creds = blockchyp::APICredentials {
        api_key: "ZDSMMZLGRPBPRTJUBTAFBYZ33Q".to_string(),
        bearer_token: "ZLBW5NR4U5PKD5PNP3ZP3OZS5U".to_string(),
        signing_key: "9c6a5e8e763df1c9256e3d72bd7f53dfbd07312938131c75b3bfd254da787947".to_string(),
    };

    // instantiate the client
    let client = blockchyp::Client::new(creds);

    let request = blockchyp::MerchantCredentialGenerationRequest{

        ..Default::default()
    };
    let (response, err) = client.merchant_credential_generation(&request);

    if let Some(e) = err {
        eprintln!("Unexpected error occurred: {:?}", e);
        return Err(e)
    }

    if response.success {
		println!("Success");
	}

    println!("Response: {:?}", response);
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    merchant_credential_generation_example()?;
    println!("Example completed successfully!");
    Ok(())
}

运行集成测试

如果您想运行集成测试,请在您的系统上创建一个名为sdk-itest-config.json的新文件,其中包含您将要使用的API凭证,如下例所示。

{
 "gatewayHost": "https://api.blockchyp.com",
 "testGatewayHost": "https://test.blockchyp.com",
 "apiKey": "PZZNEFK7HFULCB3HTLA7HRQDJU",
 "bearerToken": "QUJCHIKNXOMSPGQ4QLT2UJX5DI",
 "signingKey": "f88a72d8bc0965f193abc7006bbffa240663c10e4d1dc3ba2f81e0ca10d359f5"
}

此文件可以位于几个不同的位置,但通常位于<USER_HOME>/.config/blockchyp/sdk-itest-config.json。所有BlockChyp SDK都使用相同的配置文件。

要使用make运行集成测试套件,请键入以下命令

makeintegration

通过命令行运行集成测试

如果您想绕过make并直接运行集成测试套件,请使用以下命令

cargo test --tests --no-fail-fast

如果您想运行单个测试,请尝试以下命令

cargo test --test terminal_charge_tests

贡献

BlockChyp欢迎开源社区的贡献,但请注意,此存储库是由我们的内部SDK生成器工具生成的。如果我们选择接受PR或贡献,您的代码将被移动到我们的SDK生成器项目,这是一个私有存储库。

许可证

版权所有 BlockChyp, Inc., 2019

根据MIT许可证分发,blockchyp-rust是免费和开源软件。

其他SDK

BlockChyp已官方支持八个不同的开发平台,并仍在增加。以下是完整列表,包括其GitHub存储库的链接。

Go SDK

Node.js/JavaScript SDK

Typescript SDK

Java SDK

.net/C# SDK

Ruby SDK

PHP SDK

Python SDK

iOS (Objective-C/Swift) SDK

Rust SDK

依赖关系

~6–18MB
~273K SLoC