e签宝认证服务API PHP请求签名鉴权生成

官方文档

记录日期于2022-12-08,官方可能会随时更新计算方法,以官方为准;一千年以后请忽略此文。
e签宝请求签名鉴权官方文档地址

官方给出了JAVA示例,但对JAVA不熟悉,难理解,搞得折腾浪费了一整天的时间,记录错误便于后来者。

PHP示例

生成待签字符串

  • 此处刚开始做的时候,犯了低级错误,所有数据都对了,就是写错了$Accept的值 文档要求的是*/*,我写成/;导致请求一直被拒绝,拒绝到怀疑人生。
  • 官方文档说的 URL也需要谨慎:不含主机信息,如:/v2/identity/auth/web/indivAuthUrl
  • 在我的使用中 签名的计算没有有用到 Headers,所以下列代码$headersStr的正确性没有进行验证。
/**
 * 生成请求签名
 * @param string $HTTPMethod 请求类型
 */
private function getSignature(string $HTTPMethod, string $ContentMD5, string $Url, string $ContentType="application/json;charset=UTF-8", string $Accept="*/*",  $Date = null, array $Headers = null)
{
    $signString = "$HTTPMethod\n$Accept\n$ContentMD5\n$ContentType\n$Date\n";
    $headersStr = "";
    if (!empty($Headers)) {
      foreach ($Headers as $key => $val) {
        $headersStr .= "$key:$val\n";
      }
    }

    if (!empty($headersStr)) {
      $signString .= $headersStr."\n";
    }
    $signString .= $Url;

    // Log::write("signString: $signString","info");

    $signature = hash_hmac("sha256",utf8_encode($signString), utf8_encode($this->secret), true);
    $signatureBase64 = base64_encode($signature);

    return $signatureBase64;
}//getSignature end

生成Content-MD5

/**
 * 获取 ContentMD5 数据
 */
private function getContentMD5($data)
{
  $datastr = json_encode($data);
  //官方给的示例代码是用 md5_file,但md5_file只针对文件,如果请求是json的话,还是需要用md5
  $md5Data = md5($datastr, true);
  return base64_encode($md5Data);
}//getContentMD5 end

其他

请求头,参照文档拼接上去即可,容易理解。
有一哥们进行了封装:其他大佬封装的代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值