消息签名#
SHA 签名规则#
报文 Header 中的 Authorization 字段是对报文 Body 内容的签名。 以 POST Payment 接口为例:第一步:构造待签名字符串#
在计算签名结果之前,接入方需要构造一个待签名的字符串。将 Header.MethodType、Header.Path、Header.DateTime、Key、Header.MsgID 和 HTTP Body指定参数 按固定顺序用换行符 (\n) 连接起来,得到待签名字符串.按照以下方法构造的待签名的字符串,待签名的字符串有6行。每行都包含一个参数并以换行符结尾(最后一行没有换行符)。如果一行为空,则该行将不存在,并且不需要换行符。HTTP Body指定参数:使用Body中的参数merchantTransInfo.merchantTransID,paymentMethod.card.cardInfoEncryptMethod,pspInfo.sponsorCode,transAmount.currency,transAmount.value排序后使用‘&’符号连接,如下;
merchantTransInfo.merchantTransID=1234567890&paymentMethod.card.cardInfoEncryptMethod=xxxxx&pspInfo.sponsorCode=432156&transAmount.currency=CNY&transAmount.value=2.1GET查询类的请求没有Body,请求计算签名事,则不需要将Body内容参与计算,仅到Header.MsgID即可。
| 待签名字符串参数 | 描述 |
|---|
| Header.MethodType | POST/GET/PUT/DELETE。与请求 Header 中的 MethodType 一致。 |
| Header.Path | 请求路径+查询参数字符串。与请求 Header 中的 Path 一致。 |
| Header.DateTime | 请求发送的 时间。与请求 Header 中的 DateTime 一致。 |
| Key | 由 EVO Cloud 分配的签名密钥。 |
| Header.MsgID | 消息 ID。与请求 Header 中的 MsgID 一致。 |
| HTTP body | 您要在请求报文 Body 中发送的指定参数。merchantTransInfo.merchantTransID,paymentMethod.card.cardInfoEncryptMethod(仅在请求中使用,应答不使用该参数),pspInfo.sponsorCode,transAmount.currency,transAmount.value |
POST
/g2/v0/payment/acq/10130014/evo.e-commerce.payment
2024-03-05T17:58:25+08:00
NeTQlv6okyBmbelQP1RujxYmnp0S4GtA
M20240305175825926
merchantTransInfo.merchantTransID=T20240305175317143&paymentMethod.card.cardInfoEncryptMethod=xxxxx&pspInfo.sponsorCode=432156&transAmount.currency=CNY&transAmount.value=2.1
第二步:计算签名密文#
使用Header中SignType的签名算法计算待签名字符串的哈希值。将得到哈希值作为签名值。
例如,使用Header.SignType为SHA256,对第一步中的待签名字符串进行签名,得到的签名值为 38b1ec91c86c546450060ece0ab92a2ea92da390b4f0ef4357f6ca8030290760将 HTTP Header 中的 SignType 设置为您使用的签名算法,将 Authorization 设置为第二步中计算得到的签名值,最终得到最终要发送的 HTTP 请求报文:POST /g2/v0/payment/acq/10130014/evo.e-commerce.payment HTTP/1.1
Host: {EVO_Cloud_DOMAIN_NAME.com}
DateTime: 2024-03-05T17:58:25+08:00
MsgID: M20240305175825926
SignType: SHA256
Authorization: 38b1ec91c86c546450060ece0ab92a2ea92da390b4f0ef4357f6ca8030290760
Content-Type: application/json
{"merchantTransInfo":{"merchantTransID":"T20240305175317143","merchantTransTime":"2024-03-05T17:53:17+08:00"},"paymentMethod":{"type":"card","card":{"cardInfoEncryptMethod":"xxxxx"}},"transAmount":{"currency":"CNY","value":"2.1"},"captureAfterHours":"0","pspInfo":{"mcc":"5499","sponsorCode":"432156","merchantID":"202106305812001","merchantName":"Test","street":"Test street","city":"ShangHai","postCode":"202000","nation":"CHN"}}
验签规则#
当您收到来自 EVO Cloud 的应答或异步通知时,建议您对报文 Header 中的签名结果进行验签,验签流程如下:2.
对待签名字符串进行哈希值计算,使用的算法与您请求时的算法一致。
3.
将第2步的结果与报文 Header 中的 Authorization 进行对比,如果一致则为验签成功。
对应Refund,Capture,Cancel应答验证签名处理时,merchantTransInfo.merchantTransID,transAmount.currency,transAmount.value参数来源于对应refund Object,capture Object,cancel Object中对应的merchantTransInfo.merchantTransID,transAmount.currency,transAmount.value