以下是使用 PHP 作为开发语言的版本的原始 Markdown 文本:
如何使用 PHP 接入 imsafu
imsafu 是一个支付处理服务,允许您创建和查询支付。本文档将引导您完成访问 imsafu 服务。
准备
在开始之前,请确保满足以下先决条件:
- 在您的计算机上安装了 PHP 环境。
- 具备基本的 PHP 开发知识。
安装依赖项
访问 imsafu 服务没有任何固定的依赖,在这里我们提供了一些默认的依赖库,您可以替换成任何有类似功能的其他库。
创建 imsafu 所需变量
与 imsafu 测试服务器连接可以使用以下变量。如果想要连接正式服务器,可以加入等待列表。
$options = array(
"url" => "https://devnet.imsafu.com",
"api" => "https://allowpay-api-devnet.fly.dev/v1",
"apiSecret" => "your-api-secret",
"receiver" => "your-wallet-account",
"merchantBrand" => "imsafu demo",
"merchantRedirectURL" => "https://merchant.com/redirect"
);
创建新的支付
首先,我们需要生成一个随机的长度为32个字符的十六进制字符串作为新订单的 ID。
function generateOrderID() {
return '0x' . str_pad(bin2hex(random_bytes(32)), 32, '0', STR_PAD_RIGHT);
}
要创建新的支付,我们需要实现一个 createPayment
函数。该函数接受支付金额作为参数,并返回一个解析为 PaymentResponse
对象
function createPayment($amount) {
global $options;
$newOrderID = generateOrderID();
$payload = array(
"payment" => array(
"orderID" => $newOrderID,
"receiver" => $options['receiver'],
"amount" => strval($amount),
),
"notifyURL" => $options['url'] . "/notify"
);
$headers = array(
"Content-Type: application/json",
"Authorization: Bearer " . $options['apiSecret']
);
$ch = curl_init($options['api'] . "/depositPay");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
if ($response === false) {
return null;
}
$responseData = json_decode($response, true);
return $responseData;
}
生成支付链接
首先,编写一个方法来生成支付链接。
function buildPaymentURL($itemMemo, $res) {
global $options;
$urlSearchParams = http_build_query(array(
"payID" => $res['payment']['payID'],
"brand" => $options['merchantBrand'],
"memo" => $itemMemo,
"redirect_url" => $options['merchantRedirectURL'],
"currency" => "USD"
));
$url = $options['url'] . "/payment_qrcode?" . $urlSearchParams;
return $url;
}
$amount = 100;
$createPaymentResponse = createPayment($amount);
$paymentURL = buildPaymentURL("test item", $createPaymentResponse);
用户支付
将生成的 paymentURL
显示给用户,用户点击后可以在网页打开支付界面。具体支付流程可以参考使用 imsafu 支付。
检索支付信息
在用户支付完成后,imsafu 会向创建订单时传入的 notifyURL
发送包含 payID
的 POST
请求。我们需要通过 getPayment
接口检索支付信息,并确认用户支付是否成功。
要检索支付信息,我们需要先实现一个 getPayment
函数。该函数接受支付ID(payID
)作为参数,并返回一个解析为 PaymentResponse
对象
function getPayment($payID) {
global $options;
$headers = array(
"Content-Type: application/json",
"Authorization: Bearer " . $options['apiSecret']
);
$ch = curl_init($options['api'] . "/depositPays/" . $payID);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
if ($response === false) {
return null;
}
$responseData = json_decode($response, true);
return $responseData;
}
// 从 notify 请求中获得 payID
$paymentResponse = getPayment($payID);
// 进行其他操作
附录:代码中使用的类型定义
class Payment {
public $payID;
public $orderID;
public $receiver;
public $amount;
public $originalAmount;
public $maxFeeAmount;
public $deadline;
}
class Chain {
public $id;
public $symbol;
public $name;
}
class Token {
public $symbol;
public $address;
}
class ReceiveTx {
public $chain;
public $txID;
public $confirmedAt;
public $amount;
public $feeAmount;
public $token;
}
class Deposit {
public $chainID;
public $token;
}
class PaymentResponse {
public $status;
public $payment;
public $owner;
public $depositAddress;
public $callID;
public $receiveTx;
public $deposits;
}
请注意,以上代码示例仅用于演示目的,实际使用时需要根据具体情况进行适当的调整和安全性增强。