產生檢查碼範例程式
以下提供產生檢查碼的範例程式碼
1. PHP
php
function generate($arParameters = array(),$HashKey = '' ,$HashIV = '',$encType = 0) {
$sMacValue = '' ;
if(isset($arParameters))
{
// arParameters為傳出的參數,並且做字母A-Z排序
unset($arParameters['CheckMacValue']);
uksort($arParameters, array('Funpoint_CheckMacValue','merchantSort'));
// 組合字串
$sMacValue = 'HashKey=' . $HashKey ;
foreach($arParameters as $key => $value)
{
$sMacValue .= '&' . $key . '=' . $value ;
}
$sMacValue .= '&HashIV=' . $HashIV ;
// URL Encode編碼
$sMacValue = urlencode($sMacValue);
// 轉成小寫
$sMacValue = strtolower($sMacValue);
// 取代為與 dotNet 相符的字元
$sMacValue = str_replace('%2d', '-', $sMacValue);
$sMacValue = str_replace('%5f', '_', $sMacValue);
$sMacValue = str_replace('%2e', '.', $sMacValue);
$sMacValue = str_replace('%21', '!', $sMacValue);
$sMacValue = str_replace('%2a', '*', $sMacValue);
$sMacValue = str_replace('%28', '(', $sMacValue);
$sMacValue = str_replace('%29', ')', $sMacValue);
// 編碼
switch ($encType) {
case Funpoint_EncryptType::ENC_SHA256:
// SHA256 編碼
$sMacValue = hash('sha256', $sMacValue);
break;
case Funpoint_EncryptType::ENC_MD5:
default:
// MD5 編碼
$sMacValue = md5($sMacValue);
}
$sMacValue = strtoupper($sMacValue);
}
return $sMacValue ;
}2. .Net
csharp
<summary>
/// 產生檢查碼。
/// </summary>
/// <param name="parameters"></param>
/// <returns></returns>
private string BuildCheckMacValue(string parameters, int encryptType = 0)
{
string szCheckMacValue = String.Empty;
// 產生檢查碼。
szCheckMacValue = String.Format("HashKey={0}{1}&HashIV={2}", this.HashKey, parameters, this.HashIV);
szCheckMacValue = HttpUtility.UrlEncode(szCheckMacValue).ToLower();
if (encryptType == 1)
{
szCheckMacValue = SHA256Encoder.Encrypt(szCheckMacValue);
}
else
{
szCheckMacValue = MD5Encoder.Encrypt(szCheckMacValue);
}
return szCheckMacValue;
}