Patch.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. /**
  3. * User lin
  4. * Class Patch
  5. * @package helper
  6. */
  7. class Patch
  8. {
  9. // 签名
  10. public static function sign($param, $key)
  11. {
  12. try{
  13. if(isset($param['sign'])) unset($param['sign']);
  14. ksort($param);
  15. $stringA = '';
  16. foreach ($param as $k=>$v){
  17. $stringA .= $k.'='.urlencode($v).'&';
  18. }
  19. $stringA .= 'key='.$key;
  20. $sign = base64_encode(md5($stringA));
  21. return $sign;
  22. }catch (\Exception $e){
  23. return false;
  24. }
  25. }
  26. // 验签并返回解析结果
  27. public static function checkSign($stream, $key)
  28. {
  29. try{
  30. if(!$stream) return false;
  31. $json = base64_decode($stream);
  32. $param = json_decode($json, true);
  33. $stream_sign = $param['sign'];
  34. $sign = self::sign($param, $key);
  35. if($sign != $stream_sign) return false;
  36. return $param;
  37. }catch (\Exception $e){
  38. return false;
  39. }
  40. }
  41. // 打补丁
  42. public static function packPatch($name, $desc, $exec, $ver, $key)
  43. {
  44. $param = [];
  45. // 补丁名称
  46. $param['name'] = $name;
  47. // 补丁描述
  48. $param['desc'] = $desc;
  49. // 补丁适用版本,适用于在此版本之前的版本升级到此版本时使用
  50. $param['ver'] = $ver;
  51. // 补丁发行日期
  52. $param['date'] = date('Y-m-d H:i:s');
  53. // 补丁代码 - php
  54. $param['exec'] = self::packExec($exec);
  55. // 签名
  56. $param['sign'] = self::sign($param, $key);
  57. return base64_encode(json_encode($param));
  58. }
  59. // 编码补丁代码
  60. private static function packExec($exec)
  61. {
  62. $stringA = urlencode(htmlspecialchars($exec));
  63. $stringB = base64_encode($stringA);
  64. return $stringB;
  65. }
  66. // 解码补丁代码
  67. public static function unpackExec($exec)
  68. {
  69. $stringA = base64_decode($exec);
  70. $stringB = htmlspecialchars_decode(urldecode($stringA));
  71. return $stringB;
  72. }
  73. }