php 引數排序 計算sign sign計算

2021-10-20 23:44:40 字數 2968 閱讀 8866

## sign簽名計算

### 1) 簽名說明

> 將所有傳遞的引數名(不包含sign和timestamp引數)按照字母公升序排序,然後進行url拼接,然後再取其md5碼

> 注意:**sign和timestamp引數不參與md5**

### 2) 舉例:

* 要使用 **查詢授權** api,通過查閱api文件可以知道要傳遞**op、key_cp、user**三個引數

* 即:***op=query&key_cp=aaaaaaaa&user=1330166565***

* 其中的key_cp是對應產品的key,假設我們的後台介面加密key是**bbbbbbbb**

* 首先對**op=query&key_cp=aaaaaaaa&user=1330166565**進行**引數排序**

* 即:**key_cp=aaaaaaaa&op=query&&user=1330166565**

* 然後加上後台介面加密key:**bbbbbbbb**

* 即:***key_cp=aaaaaaaa&op=query&&user=1330166565bbbbbbbb***

* 然後取其md5

* 即:**3862154e10af3d5f63d286b7f2dd03bf** 此值即為**sign**引數的值

* 然後原引數加上**sign**引數,再加上**timestamp**引數

* 即全部引數如下:**op=query&key_cp=aaaaaaaa&user=1330166565&sign=3862154e10af3d5f63d286b7f2dd03bf×tamp=1571578592**

### 3) 固定引數說明:

|欄位名稱 |字段說明 |型別 |必填 |備註 |

|sign|簽名|string|y|簽名|

|timestamp|10位時間戳|string|y|10位時間戳|

### 4) php簽名示例:

function getsign($secret, $data) {

// 對陣列的值按key排序

ksort($data);

// 生成url的形式

// 生成sign

$sign = md5($params . $secret);

return $sign;

$data = array(

'op' => 'change_name',

'name_new' => $name_new,

'key_user' => $key_user,

//$apikey是後台介面加密key

### 5) 易語言簽名示例:

.版本 2

.支援庫 dp1

.子程式 sign計算, 文字型, 公開, 用於提交資料時的sign計算

.引數 params, 文字型, , 提交資料

.引數 key, 文字型, , 後台加密key

.區域性變數 signpars, 文字型

.區域性變數 分割, 文字型, , "0"

.區域性變數 x, 整數型

.區域性變數 k, 文字型

.區域性變數 v, 文字型

.區域性變數 sign, 文字型

分割 = 分割文字 (params, 「&」, )

陣列_排序 (分割, 0, )

.計次迴圈首 (取陣列成員數 (分割), x)

k = 文字_取左邊 (分割 [x], 「=」, , )

v = 文字_取右邊 (分割 [x], 「=」, , )

.如果真 (k ≠ 「sign」 且 v ≠ 「」)

.如果 (x = 取陣列成員數 (分割))

signpars = signpars + k + 「=」 + v

.否則signpars = signpars + k + 「=」 + v + 「&」

.如果結束

.如果真結束

.計次迴圈尾 ()

signpars = signpars + key

sign = 取資料摘要 (到位元組集 (signpars))

返回 (「&sign=」 + sign)

.版本 2

.支援庫 internet

param = 「op=change_name&name_new=」 + 編碼_url編碼 (name_new,,真) + 「&key_user=」 + key_user

return = 編碼_usc2到ansi(到文字 (http讀檔案 (「http://」+**網域名稱+「/api/api_url.php?」 + param + sign計算 (param, 後台介面加密key) + 「×tamp=」 + 時間_取現行時間戳 (真))))

### 6) 常見錯誤:

~~~[api]

常見錯誤1

"status": "0",

"message": "傳送的資料簽名不存在"

常見錯誤2

"status": "0",

"message": "傳送的資料引數不合法"

常見錯誤3

"status": "0",

"message": "驗證失效,請重新傳送請求"

常見錯誤4

"status": "0",

"message": "請求不合法"

php 命令引數

f file 解析並執行 f 選項給定的檔名。該引數為可選引數,可以省略,僅指明需要執行的檔名即可。以下是 php 二進位制檔案 即 php.exe 程式 提供的命令列模式的選項引數,您隨時可以通過 php h 命令來查詢這些引數。usage php options f args.php optio...

php傳入引數

專案中時常會使用php編寫指令碼,進行一些統計與批量更新的需求需要進行操作 其中使用的方式主要是getopt函式,寫法如下 opt getopt m n value m opt m value n opt n 命令列下執行的方式是php test.php m hisen n king if argc...

PHP可變引數

php 在使用者自定義函式中支援可變數量的引數列表。在 php 5.6 及以上的版本中,由 語法實現 在 php 5.5 及更早版本中,使用函式 func num args func get arg 和 func get args function b numbers return acc echo...