做簽名時,一定要先確定簽名的生成算法,相關步驟最好自己手寫,一步一步確認,不要想着一步登天!
前端代碼:
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;
}
運行結果: