手摸手生成前後端一致的簽名(初級)

 做簽名時,一定要先確定簽名的生成算法,相關步驟最好自己手寫,一步一步確認,不要想着一步登天!

前端代碼:

1,引入外部js文件

<script src="__STATIC__/h5/js/md5.js"></script> 
var paramsObj = { order_id: 20, mch_id: 1, body: 'test', MEMBER_ID: 1 };//要傳的參數(測試數據)
var sign = getSign(paramsObj); 
paramsObj.sign=sign
function getSign(params) {
    var arr = [];
    for (var i in params) {
        arr.push((i + "=" + params[i]));
    }
    return paramsStrSort(arr.join(("&")));
}
function paramsStrSort(paramsStr) {
        var urlStr = paramsStr.split("&").sort().join("&");
        var newUrl=urlStr;
        return $.md5(newUrl).toUpperCase();
}

var data=paramsObj;

function callpay()
{
    post("{:url('test/test')}",data,'','','',''); 
    console.log(123);
}

 後端代碼:

    public function test(Request $request)
    {
        $pData=$request->post();
        unset($pData['sign']);
        echo $this->MakeSign($pData);
    }
    /**
	 * 簡單生成簽名
     * @param  array   $arr(可以帶sign參數)
 	 * @return string  簽名(md5加密後轉成大寫)
	 */
	public function MakeSign($arr)
	{
		//簽名步驟一:按字典序排序參數
		ksort($arr);
		$string = $this->ToUrlParams($arr);
		//簽名步驟二:在string後加入KEY
        $string = $string;
		//簽名步驟三:MD5加密轉成大寫
		$string = strtoupper(md5($string));
        return $string;
    }

    /**
     * 格式化參數格式化成url參數
     * @param  array  $arr
     * @return string  MEMBER_ID=1&body=test&mch_id=1&order_id=2&key=123
	 */
	public function ToUrlParams($arr)
	{
		$buff = "";
		foreach ($arr as $k => $v)
		{
			if($k != "sign" && $v != "" && !is_array($v)){
				$buff .= $k . "=" . $v . "&";
			}
		}
		$buff = trim($buff, "&");
		return $buff;
    }

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章