使用Alchemy Pay 进行法币购买加密货币支付
使用Alchemy Pay 服务快速实现加密货币的支付
简介
Alchemy Pay 是一个领先的加密支付解决方案,它将传统金融系统与区块链技术结合,允许用户通过法币购买加密货币并完成支付。无论是电子商务平台、应用程序,还是在线服务,集成 Alchemy Pay 都可以帮助您的用户使用他们熟悉的支付方式进行加密货币交易,从而简化用户体验并扩大您的市场。
优势
用户友好:用户可以使用熟悉的法币支付方式,无需过多学习成本即可完成加密货币购买。
快速集成:通过简单的 API 和开发者文档,您可以在短时间内完成 Alchemy Pay 的集成。
安全性:Alchemy Pay 采用多层加密和严格的风控系统,确保交易的安全和合法性。
参考示例
https://github.com/CocosTechLabs/flappy-bird
快速集成步骤
1. 商户注册并获取 API 密钥
首先,您需要前往 Alchemy Pay 官方网站 注册商户账户,获取 APPID
和 SECRETKEY
,这两个参数将在集成 API 签名和请求支付时使用。
2. 实现 API 签名
Alchemy Pay 所有的 API 请求都需要签名认证。API 签名逻辑是通过 HMAC-SHA256 加密生成的,签名过程要求按照特定格式拼接参数,并根据文档中的算法生成。
API 签名的实现代码如下:
import crypto from 'crypto';
import { URL } from 'url';
function apiSign(timestamp: string, method: string, requestUrl: string, body: string, secretkey: string): string {
const content = timestamp + method.toUpperCase() + getPath(requestUrl) + getJsonBody(body);
const signVal = crypto.createHmac('sha256', secretkey)
.update(content, 'utf8')
.digest('base64');
return signVal;
}
function getPath(requestUrl: string): string {
const uri = new URL(requestUrl);
const path = uri.pathname;
const params = Array.from(uri.searchParams.entries());
if (params.length === 0) {
return path;
} else {
const sortedParams = [...params].sort(([aKey], [bKey]) => aKey.localeCompare(bKey));
const queryString = sortedParams.map(([key, value]) => `${key}=${value}`).join('&');
return `${path}?${queryString}`;
}
}
function getJsonBody(body: string): string {
let map;
try {
map = JSON.parse(body);
} catch (error) {
map = {};
}
if (Object.keys(map).length === 0) {
return '';
}
map = removeEmptyKeys(map);
map = sortObject(map);
return JSON.stringify(map);
}
该函数 apiSign
用于生成签名,依赖于请求的 timestamp
、HTTP 方法、请求 URL 和请求体内容来生成唯一签名。您可以参考官方文档中的详细说明:API 签名。
3. 获取用户 Token
用户在进行支付操作前,必须获取该用户的 Token。此操作依赖于您在业务端提供的用户邮箱或者用户唯一标识符(UID)。您可以通过以下代码实现该功能:
export async function getAlchemyPayToken(params: GetTokenParams): Promise<GetTokenResponse> {
const timestamp = String(Date.now());
const method = 'POST';
const requestUrl = `${config.ALCHEMYPAY_DOMAIN}/open/api/v4/merchant/getToken`;
const body = JSON.stringify(params);
const sign = apiSign(timestamp, method, requestUrl, body, config.ALCHEMYPAY_SECRETKEY);
try {
const response = await axios.post<GetTokenResponse>(requestUrl, body, {
headers: {
'Content-Type': 'application/json',
'appid': config.ALCHEMYPAY_APPID,
'timestamp': timestamp,
'sign': sign
}
});
return response.data;
} catch (error) {
console.error('Error getting AlchemyPay token:', error);
throw error;
}
}
该函数接受用户的邮箱或 UID 作为参数,通过 API 获取该用户的 accessToken
,以便后续创建支付订单。
4. 创建支付订单
获取用户 Token 后,您可以通过 API 创建支付订单。订单生成后,您将会获得一个支付链接,用户可以通过该链接完成法币支付。下面是创建订单的代码示例:
export async function createAlchemyPayOrder(params: CreateOrderParams, accessToken: string): Promise<CreateOrderResponse> {
const timestamp = String(Date.now());
const method = 'POST';
const requestUrl = `${config.ALCHEMYPAY_DOMAIN}/open/api/v4/merchant/trade/create`;
const body = JSON.stringify(params);
const sign = apiSign(timestamp, method, requestUrl, body, config.ALCHEMYPAY_SECRETKEY);
try {
const response = await axios.post<CreateOrderResponse>(requestUrl, body, {
headers: {
'Content-Type': 'application/json',
'appid': config.ALCHEMYPAY_APPID,
'timestamp': timestamp,
'access-token': accessToken,
'sign': sign
}
});
return response.data;
} catch (error) {
console.error('Error creating AlchemyPay order:', error);
throw error;
}
}
创建订单的请求体包含支付金额、加密货币类型、商户订单号等详细信息。成功创建订单后,您会收到支付的 URL,用户可通过该链接进行支付。
5. 回调通知处理
支付完成后,Alchemy Pay 会根据您在订单中提供的回调地址通知您的系统,您需要实现处理支付结果的逻辑,确保支付的顺利进行。
总结
通过集成 Alchemy Pay Ramp,您可以为用户提供简单、快捷的法币购买加密货币的体验。本指南介绍了 API 签名、用户 Token 获取、创建订单的主要集成步骤,确保您能够快速上线支付功能。
更多详细内容,请参考官方文档:Alchemy Pay API 文档。