otpd/libotpd-php

OTPD Authentication SDK for PHP

1.0.1 2025-02-17 07:01 UTC

This package is not auto-updated.

Last update: 2025-06-23 09:06:03 UTC


README

概述

密令通服务端PHP语言SDK (原生开发),适用于PHP>=7.2。此SDK包含了以下几个功能:

  • 提供动态令牌申请
  • 动态口令验证等相关功能。

安装

你可以通过以下几种方式安装SDK,我们推荐通过 Composer 方式安装.

  • 使用 Composer 安装 Composer是 PHP 依赖管理工具。你可以在自己的项目中声明所依赖的外部工具库,Composer 会自动帮你安装这些依赖的库文件。 运行 Composer 命令安装最新稳定版本的 SDK:
    composer require otpd/libotpd-php
    

    Require Composer 生成的 autoloader:

    <?php
     require 'vendor/autoload.php';
    
  • 下载源代码包 直接下载源代码压缩包并解压安装使用是另一种 SDK 的安装方法。不过因为有版本更新的维护问题,这种安装方法并不推荐,仅作为万一 Composer 安装有问题的情况下的一种备选。

使用方法

安装好 SDK 后,接下来介绍如何使用 SDK。在使用 SDK 之前,

    1. 联系密令通后台服务管理员,获得服务端地址
    1. 申请一个应用,取得该应用的 appId 和 appSecret

实例化客户端对象

通过服务端地址、应用appId 和 appSecret初始化一个Client对象,它提供了申请动态令牌、验证口令两个函数

$otpdClient = new Client($serverUrl,$appId,$appSecret);

申请动态令牌

调用客户端的applyCredential函数

  • 输入参数 $userId 为用户唯一标识
  • 输出参数为一个数组,包含两个元素,元素1表示种子密钥,元素2为错误信息,如果错误信息不为NULL,种子密钥信息不可取。
    list($ret, $err) = $otpdClient->applyCredential($userId);
    

    动态令牌申请成功后,需要在密令通移动端手动或扫码输入令牌激活。

示例代码:

<?php
require_once __DIR__ . '/vendor/autoload.php';
use Otpd\Client;
use Otpd\Http\Error;
/**
 * 申请令牌示例代码
 */
$serverUrl="http://192.168.10.89:9130";
$appId="80bcdef329ef4ceeabf6dfa439e7b93a";
$appSecret="f780a18e8ed84f1d81e1dbe032f2e0f3";
$userId= "175****5150";

$otpdClient = new Client($serverUrl,$appId,$appSecret);
list($ret, $err) = $otpdClient->applyCredential($userId);
if ($err !== null) {
    if($err instanceof Error){
        echo $err->code() . " " .$err->message();
    }
} else {
    echo "SEED KEY:" .$ret;
}

验证口令

调用客户端的verifyCredential函数

  • 输入参数 $userId 为用户唯一标识,$code为密令通移动端生成的动态口令
  • 输出参数为一个错误信息,值为NULL视为成功,其他表示失败
    $err = $otpdClient->verifyCredential($userId,$code);
    

    示例代码:

    <?php
    require_once __DIR__ . '/vendor/autoload.php';
    

use Otpd\Client; use Otpd\Http\Error; use Otpd\SM\RtSm4;

/**

  • 验证动态口令示例代码 / $serverUrl="http://192.168.10.89:9130"; $appId="80bcdef329ef4ceeabf6dfa439e7b93a"; $appSecret="f780a18e8ed84f1d81e1dbe032f2e0f3"; $userId= "175***5150";

$otpdClient = new Client($serverUrl,$appId,$appSecret); $err = $otpdClient->verifyCredential($userId,"311338"); if ($err !== null) {

if($err instanceof Error){
    echo $err->code() . " " .$err->message();
}else{
    var_dump($err);
}

}else{

echo "Your code has been successfully verified";

}


## 注意事项
在应用系统显示用户输入动态口令的界面上,要显示提示信息“提示:尚未申请组工密令? 请点击这里”,并指向组工密令服务端地址,使得用户可以去组工密令系统申请组工密令。

### 跳转说明
- **组工密令服务端地址**:`http://192.168.x.x:9130/`
- **跳转 URL**:`http://192.168.x.x:9130/#/open/apply?appId=xxx`
    - `/open/apply` 是密令通服务端对外提供的令牌申请界面。
    - `appId=xxx` 为在密令通服务端注册应用的 appId。
    - 如果不传递 `appId`,则使用默认应用。

### `appId` 说明
- 申请令牌需要提供 **手机号码** 和 **`appId`**。
- 如果多个应用需要使用 **相同** 的动态口令,只需使用同一个 `appId`。
- 如果不同应用需要使用 **不同** 的动态口令,则需创建多个应用,使用独立的 `appId`。