签名算法
- 签名算法用于使用私钥对支付 API 请求进行签名,以提供额外安全性。
- 数据对象 需要排序, 嵌套对象 也需要排序.
步骤 1:准备请求参数
方法 :
POST
- 请参考您所调用的 API 端点,以下请求参数仅为示例。
创建支付链接示例
| 参数 | 类型 | 必填 | 描述 | 示例 |
|---|---|---|---|---|
order |
Object | 是 | 订单信息,包含键:[id, title, amount, currencyType, additionalData] | |
customer |
Object | 是 | 客户信息,包含键:[name, phone, email] | |
method |
String | 否 | 类型列表,请参阅 Deposit / Payment - Financial Process Exchange (FPX)。如果提供此字段,用户将被直接跳转至第三方支付页面;否则,将跳转至支付页面进行支付方式选择。 |
订单 [对象]
| 参数 | 类型 | 必填 | 描述 | 示例 |
|---|---|---|---|---|
title |
String | 是 | 订单标题,最多 32 字符 | "Deposit" |
additionalData |
String | 否 | 订单描述 | |
amount |
String | 是 | 订单金额(以元为单位)。100 = RM 100.00 | 100 |
currencyType |
String | 是 | 货币类型(目前仅支持 MYR , USDT) | "MYR" |
id |
String | 是 | 订单 ID |
客户 [对象]
| 参数 | 类型 | 必填 | 描述 | 示例 |
|---|---|---|---|---|
name |
String | 是 | 客户姓名 | "Long Wan" |
email |
String | 是 | 客户邮箱 | "" |
phone |
String | 是 | 客户手机号 | "" |
请求示例
{
"order": {
"id": "A20221111",
"title": "Payment",
"amount": "88.50",
"currencyType": "MYR",
"additionalData": ""
},
"customer": {
"name": "Long Wan",
"phone": "0123456789",
"email": "longwan@gmail.com"
},
"method": "CIMB_MY"
}
- 按字母顺序排序上述 JSON 键,并压缩格式。
步骤 2:将数据编码为 Base64 格式
ewogICAgIm9yZGVyIjogewogICAgCSJ0aXRsZSI6ICJoZWxsbyIsCiAgICAJImRldGFpbCI6ICIiLAogICAgCSJhZGRpdGlvbmFsRGF0YSI6ICJ3b3JsZCIsCgkgICAgImFtb3VudCI6IDEwLAoJICAgICJjdXJyZW5jeVR5cGUiOiAiTVlSIiwKCSAgICAiaWQiOiAgIjcyMTEiCiAgICB9LAogICAgImN1c3RvbWVyIjogewogICAgInVzZXJJZCI6ICIiLAogICAgImVtYWlsIjogIiIKfSwKICAgICJtZXRob2QiOltdLAogICAgInR5cGUiOiAiV0VCX1BBWU1FTlQiLAogICAgInN0b3JlSWQiOiAiMTYwODEyMzAzNTU2NDUzODEyMSIsCiAgICAicmVkaXJlY3RVcmwiOiAiaHR0cHM6Ly9yZXZlbnVlbW9uc3Rlci5teSIsCiAgICAibm90aWZ5VXJsIjogImh0dHBzOi8vZGV2LXJtLWFwaS5hcC5uZ3Jvay5pbyIsCiAgICAibGF5b3V0VmVyc2lvbiI6InYzIgp9
步骤 3:构建明文参数
- 如果 body 为空,则可跳过 data 参数。
| 参数 | 类型 | 必填 | 描述 | 示例 |
|---|---|---|---|---|
data |
String | 是 | 步骤 2 的 Base64 数据 | 参考步骤 2。 |
method |
String | 是 | 所使用的 HTTP 方法 | "post" |
nonceStr |
String | 是 | 随机字符串 | "VYNknZohxwicZMaWbNdBKUrnrxDtaRhN" |
requestURL |
String | 是 | 调用的 API URL 必须完全一致,包括 URL。 | gateway/v1/createPayment |
signType |
String | 是 | 签名类型,建议 SHA-256 | "sha256" |
timestamp |
String | 是 | 请求的 UNIX 时间戳 | "1527407052" |
示例
data=ewogICAgIm9yZGVyIjogewogICAgCSJ0aXRsZSI6ICJoZWxsbyIsCiAgICAJImRldGFpbCI6ICIiLAogICAgCSJhZGRpdGlvbmFsRGF0YSI6ICJ3b3JsZCIsCgkgICAgImFtb3VudCI6IDEwLAoJICAgICJjdXJyZW5jeVR5cGUiOiAiTVlSIiwKCSAgICAiaWQiOiAgIjcyMTEiCiAgICB9LAogICAgImN1c3RvbWVyIjogewogICAgInVzZXJJZCI6ICIiLAogICAgImVtYWlsIjogIiIKfSwKICAgICJtZXRob2QiOltdLAogICAgInR5cGUiOiAiV0VCX1BBWU1FTlQiLAogICAgInN0b3JlSWQiOiAiMTYwODEyMzAzNTU2NDUzODEyMSIsCiAgICAicmVkaXJlY3RVcmwiOiAiaHR0cHM6Ly9yZXZlbnVlbW9uc3Rlci5teSIsCiAgICAibm90aWZ5VXJsIjogImh0dHBzOi8vZGV2LXJtLWFwaS5hcC5uZ3Jvay5pbyIsCiAgICAibGF5b3V0VmVyc2lvbiI6InYzIgp9&method=post&nonceStr=VYNknZohxwicZMaWbNdBKUrnrxDtaRhN&requestUrl=gateway/v1/createPayment&signType=sha256×tamp=1527407052
步骤 4:使用客户端私钥签名
- 使用私钥对该内容执行
sha256签名,并确保公钥已上传到 SUPERPAY 商户后台
| 类型 | 必填 | 描述 | 示例 |
|---|---|---|---|
| 字符串 | 是 | 使用 PRIVATE_KEY 对步骤 3 的请求数据进行签名 | 响应示例如下 |
签名示例
sha256 IrBg6t73VsH7ieEnQDB4CXHFjMWUkp8Dtddpxqw+4Gvz6Tag7Dx6nrfAt2ofYK8xZN9aBCvAKAfmAOGWIXnsTXfhFBnMA2kadiga7ufUJ81ozyhllbiliRM2ugw1OcqSTLRHWBPhrVwhHBxgDiG9wbuI3FKURrz+CufYYakFoCw=
步骤 5:放入请求头中
将此签名放入请求头 X-Signature 中,构建请求并调用 API 端点