# 加签验签 ## 密钥分发 在开始接入前, 您首先需要生成RSA密钥对,保留好私钥并将公钥交给PayKKa平台相关对接人员。 生产密钥分发流程:todo待定 ## 构造签名串 签名串一共有五行,每一行为一个参数。结尾以`\n` (换行符,ASCII编码值为0x0A)结束,不包括最后一行。 `注意:签名串的结构规则:每行一个元素,该行元素若是缺省不用传,但是换行符需要,保持结构不变。始终遵循一行一个元素,没有元素,还是得换行,最后一个元素除外` ```text 请求路径\n 请求时间戳(timestamp)\n 请求随机串(nonce)\n 商户号\n 请求报文主体 ``` ### 请求或响应不包含报文主体 ```text 请求路径\n 请求时间戳(timestamp)\n 请求随机串(nonce)\n 商户号 ``` ### 请求的资源不涉及商户号 可以不用传商户号,但是换行符还是需要 ```text 请求路径\n 请求时间戳(timestamp)\n 请求随机串(nonce)\n \n 请求报文主体 ``` ### 文件上传的加签验签 文件上传的加签验签方式与其他基于文本的API不同, 在计算签名时使用的body为meta的json字符串 ```text 请求路径\n 请求时间戳(timestamp)\n 请求随机串(nonce)\n 商户号\n 请求meta的json字符串 ``` ## 计算签名值 绝大多数编程语言提供的签名函数支持对签名数据进行签名。强烈建议客户调用该类函数,使用客户私钥对待签名串进行`SHA256withRSA` 签名,并对签名结果进行`Base64编码`得到签名值。 ## 设置HTTP头 - 在所请求内容归属于商户的情况下, 需要设置`X-Merch-Id`请求头, 内容是 **Paykka跨境收款开放平台** 分配的**商户号** ( 生成方式) - 请求通过HTTP`Authorization`头来传递签名, 其内容是一个经过`URLEncode`的`JSON`对象, 包含以下字段: | key | 格式 | 说明 | | --- | --- | --- | | sign_type | String | 签名方式(SHA256_WITH_RSA) | | timestamp | String | 请求生成时的毫秒时间戳值(Milliseconds since Unix Epoch) | | nonce | String(6-32) | 请求生成时, 随机生成的字符串, 用于请求防重 | | key_id | String | 平台侧分配的密钥id, 对应客户 | | signature | String | 请求签名 |