getSign.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. /**
  3. * 获取IP地址
  4. * return ip
  5. */
  6. function get_wx_ip(){
  7. $ip = "unknown";
  8. if(isset($_SERVER['REMOTE_ADDR'])){
  9. $ip = $_SERVER['REMOTE_ADDR'];
  10. }elseif(getenv("REMOTE_ADDR")){
  11. $ip = getenv("REMOTE_ADDR");
  12. }elseif(isset($_SERVER['HTTP_CLIENT_IP'])){
  13. $ip = $_SERVER['HTTP_CLIENT_IP'];
  14. } elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  15. $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
  16. $pos = array_search('unknown', $arr);
  17. if (false !== $pos)
  18. unset($arr[$pos]);
  19. $ip = trim($arr[0]);
  20. }
  21. return $ip;
  22. }
  23. /**
  24. * 除去数组中的空值和签名参数
  25. * @param $para 签名参数组
  26. * return 去掉空值与签名参数后的新签名参数组
  27. */
  28. function paraFilters($para) {
  29. $para_filter = array();
  30. if($para){
  31. foreach ($para as $key=>$val){
  32. if($key == "sign" || $key == "signature" || $val == "")
  33. continue;
  34. else
  35. $para_filter[$key] = $para[$key];
  36. }
  37. }
  38. return $para_filter;
  39. }
  40. /**
  41. * 对数组排序
  42. * @param $para 排序前的数组
  43. * return 排序后的数组
  44. */
  45. function argSorts($para) {
  46. ksort($para);
  47. reset($para);
  48. return $para;
  49. }
  50. /**
  51. * 签名验证-快接支付
  52. * $datas 数据数组
  53. * $key 密钥
  54. */
  55. function local_sign($datas = array(), $key = ''){
  56. $str = urldecode(http_build_query(argSorts(paraFilters($datas))));
  57. $sign = md5($str."&key=".$key);
  58. return $sign;
  59. }
  60. /**
  61. * 签名验证-快接支付
  62. * $datas 数据数组
  63. * $key 密钥
  64. */
  65. function getdata($url, $param){
  66. $content = '';
  67. $ch = curl_init();
  68. curl_setopt($ch, CURLOPT_URL, $url);
  69. curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
  70. curl_setopt($ch, CURLOPT_HEADER, false);
  71. curl_setopt($ch, CURLOPT_POST, true);
  72. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  73. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  74. curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
  75. curl_setopt($ch, CURLOPT_TIMEOUT,6);
  76. $content = curl_exec($ch);
  77. //如果发现异常,排查下curl错误
  78. //echo "curl错误:".curl_error($ch);
  79. curl_close($ch);
  80. return $content;
  81. }
  82. ?>