StringUtil.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace LdzfPay\Api\Common;
  3. use LdzfPay\Api\Common\HashMap;
  4. /**
  5. * 字符串处理工具类
  6. */
  7. Class StringUtil
  8. {
  9. /**
  10. * @param $map HashMap 使用&符号组织签名明文串排序a-z 包含sign_type字段 做了urlencode
  11. * @return string
  12. */
  13. public static function getPlainSortByAndWithSignType($map)
  14. {
  15. $arg = "";
  16. $paramter = array();
  17. if ((!$map->isEmpty()) && ($map->size() > 0)) {
  18. $keys = $map->keys();
  19. foreach ($keys as $key) {
  20. //sign_type 不需要参与RAS签名
  21. $paramter[$key . "=" . urlencode(trim($map->get($key)))] = $key . "=" . urlencode(trim($map->get($key)));
  22. }
  23. //字母a到z排序后的数组
  24. $sort_array = StringUtil::arg_sort($paramter);
  25. while (list ($key, $val) = each($sort_array)) {
  26. $arg .= $val . "&";
  27. }
  28. $arg = substr($arg, 0, count($arg) - 2); //去掉最后一个&字符
  29. return $arg;
  30. } else {
  31. die ("[UMF SDK]获取请求参数明文字符串失败:传入参数为空!");
  32. }
  33. }
  34. /**
  35. * @param $map HashMap 使用&符号组织签名明文串排序a-z 去除sign_type字段 不做urlencode
  36. * @return string
  37. */
  38. public static function getPlainSortByAndWithoutSignType($map)
  39. {
  40. $arg = "";
  41. $paramter = array();
  42. if ((!$map->isEmpty()) && ($map->size() > 0)) {
  43. $keys = $map->keys();
  44. foreach ($keys as $key) {
  45. //sign_type 不需要参与RAS签名
  46. if ("sign_type" != $key) {
  47. $paramter[$key . "=" . trim($map->get($key))] = $key . "=" . trim($map->get($key));
  48. }
  49. }
  50. //字母a到z排序后的数组
  51. $sort_array = StringUtil::arg_sort($paramter);
  52. foreach($sort_array as $v){
  53. if($arg){
  54. $arg .= "&".$v;
  55. }else{
  56. $arg .= $v;
  57. }
  58. }
  59. // while (list ($key, $val) = each($sort_array)) {
  60. // $arg .= $val . "&";
  61. // }
  62. // $arg = substr($arg, 0, count($arg) - 2); //去掉最后一个&字符
  63. return $arg;
  64. } else {
  65. die ("[UMF SDK]获取请求参数明文字符串失败:传入参数为空!");
  66. }
  67. }
  68. /**
  69. * 去除字符串前后空格,如果字符串为null则返回空串""
  70. */
  71. public static function trim($str){
  72. if ($str == null) {
  73. return "";
  74. } else {
  75. return trim($str);
  76. }
  77. }
  78. /**
  79. * @param $array array() 对数组进行a-z升序排列
  80. * @return mixed
  81. */
  82. public static function arg_sort($array){
  83. asort($array);
  84. return $array;
  85. }
  86. public static function String2Hex($string){
  87. $hex='';
  88. for ($i=0; $i < strlen($string); $i++){
  89. $hex .= dechex(ord($string[$i]));
  90. }
  91. return $hex;
  92. }
  93. public static function Hex2String($hex){
  94. $string='';
  95. for ($i=0; $i < strlen($hex)-1; $i+=2){
  96. $string .= chr(hexdec($hex[$i].$hex[$i+1]));
  97. }
  98. return $string;
  99. }
  100. }