alipay_core.function.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <?php
  2. /* *
  3. * 兑换宝接口公用函数
  4. * 详细:该类是请求、通知返回两个文件所调用的公用函数核心处理文件
  5. * 版本:3.2
  6. * 日期:2011-03-25
  7. * 说明:
  8. * 以下代码只是为了方便用户测试而提供的样例代码,用户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
  9. * 该代码仅供学习和研究兑换宝接口使用,只是提供一个参考。
  10. */
  11. /**
  12. * 生成签名结果
  13. * @param $sort_para 要签名的数组
  14. * @param $key 兑换宝交易安全校验码
  15. * @param $sign_type 签名类型 默认值:MD5
  16. * return 签名结果字符串
  17. */
  18. function buildMysign($sort_para,$key,$sign_type = "MD5") {
  19. //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
  20. $prestr = createLinkstring($sort_para);
  21. //把拼接后的字符串再与安全校验码直接连接起来
  22. $prestr = $prestr.$key;
  23. //把最终的字符串签名,获得签名结果
  24. $mysgin = sign($prestr,$sign_type);
  25. return $mysgin;
  26. }
  27. /**
  28. * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
  29. * @param $para 需要拼接的数组
  30. * return 拼接完成以后的字符串
  31. */
  32. function createLinkstring($para) {
  33. $arg = "";
  34. while (list ($key, $val) = each ($para)) {
  35. $arg.=$key."=".$val."&";
  36. }
  37. //去掉最后一个&字符
  38. $arg = substr($arg,0,count($arg)-2);
  39. //如果存在转义字符,那么去掉转义
  40. if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
  41. return $arg;
  42. }
  43. /**
  44. * 除去数组中的空值和签名参数
  45. * @param $para 签名参数组
  46. * return 去掉空值与签名参数后的新签名参数组
  47. */
  48. function paraFilter($para) {
  49. $para_filter = array();
  50. while (list ($key, $val) = each ($para)) {
  51. if($key == "sign" || $key == "sign_type" || $val == "")continue;
  52. else $para_filter[$key] = $para[$key];
  53. }
  54. return $para_filter;
  55. }
  56. /**
  57. * 对数组排序
  58. * @param $para 排序前的数组
  59. * return 排序后的数组
  60. */
  61. function argSort($para) {
  62. ksort($para);
  63. reset($para);
  64. return $para;
  65. }
  66. /**
  67. * 签名字符串
  68. * @param $prestr 需要签名的字符串
  69. * @param $sign_type 签名类型 默认值:MD5
  70. * return 签名结果
  71. */
  72. function sign($prestr,$sign_type='MD5') {
  73. $sign='';
  74. if($sign_type == 'MD5') {
  75. $sign = md5($prestr);
  76. }elseif($sign_type =='DSA') {
  77. //DSA 签名方法待后续开发
  78. die("DSA 签名方法待后续开发,请先使用MD5签名方式");
  79. }else {
  80. die("兑换宝暂不支持".$sign_type."类型的签名方式");
  81. }
  82. return $sign;
  83. }
  84. /**
  85. * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
  86. * 注意:服务器需要开通fopen配置
  87. * @param $word 要写入日志里的文本内容 默认值:空值
  88. */
  89. function logResult($word='') {
  90. $fp = fopen("log.txt","a");
  91. flock($fp, LOCK_EX) ;
  92. fwrite($fp,"执行日期:".strftime("%Y%m%d%H%M%S",time())."\n".$word."\n");
  93. flock($fp, LOCK_UN);
  94. fclose($fp);
  95. }
  96. /**
  97. * 远程获取数据
  98. * 注意:该函数的功能可以用curl来实现和代替。curl需自行编写。
  99. * $url 指定URL完整路径地址
  100. * @param $input_charset 编码格式。默认值:空值
  101. * @param $time_out 超时时间。默认值:60
  102. * return 远程输出的数据
  103. */
  104. function getHttpResponse($url, $input_charset = '', $time_out = "60") {
  105. $urlarr = parse_url($url);
  106. $errno = "";
  107. $errstr = "";
  108. $transports = "";
  109. $responseText = "";
  110. if($urlarr["scheme"] == "https") {
  111. $transports = "ssl://";
  112. $urlarr["port"] = "443";
  113. } else {
  114. $transports = "tcp://";
  115. $urlarr["port"] = "80";
  116. }
  117. $fp=@fsockopen($transports . $urlarr['host'],$urlarr['port'],$errno,$errstr,$time_out);
  118. if(!$fp) {
  119. die("ERROR: $errno - $errstr<br />\n");
  120. } else {
  121. if (trim($input_charset) == '') {
  122. fputs($fp, "POST ".$urlarr["path"]." HTTP/1.1\r\n");
  123. }
  124. else {
  125. fputs($fp, "POST ".$urlarr["path"].'?_input_charset='.$input_charset." HTTP/1.1\r\n");
  126. }
  127. fputs($fp, "Host: ".$urlarr["host"]."\r\n");
  128. fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
  129. fputs($fp, "Content-length: ".strlen($urlarr["query"])."\r\n");
  130. fputs($fp, "Connection: close\r\n\r\n");
  131. fputs($fp, $urlarr["query"] . "\r\n\r\n");
  132. while(!feof($fp)) {
  133. $responseText .= @fgets($fp, 1024);
  134. }
  135. fclose($fp);
  136. $responseText = trim(stristr($responseText,"\r\n\r\n"),"\r\n");
  137. return $responseText;
  138. }
  139. }
  140. /**
  141. * 实现多种字符编码方式
  142. * @param $input 需要编码的字符串
  143. * @param $_output_charset 输出的编码格式
  144. * @param $_input_charset 输入的编码格式
  145. * return 编码后的字符串
  146. */
  147. function charsetEncode($input,$_output_charset ,$_input_charset) {
  148. $output = "";
  149. if(!isset($_output_charset) )$_output_charset = $_input_charset;
  150. if($_input_charset == $_output_charset || $input ==null ) {
  151. $output = $input;
  152. } elseif (function_exists("mb_convert_encoding")) {
  153. $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
  154. } elseif(function_exists("iconv")) {
  155. $output = iconv($_input_charset,$_output_charset,$input);
  156. } else die("sorry, you have no libs support for charset change.");
  157. return $output;
  158. }
  159. /**
  160. * 实现多种字符解码方式
  161. * @param $input 需要解码的字符串
  162. * @param $_output_charset 输出的解码格式
  163. * @param $_input_charset 输入的解码格式
  164. * return 解码后的字符串
  165. */
  166. function charsetDecode($input,$_input_charset ,$_output_charset) {
  167. $output = "";
  168. if(!isset($_input_charset) )$_input_charset = $_input_charset ;
  169. if($_input_charset == $_output_charset || $input ==null ) {
  170. $output = $input;
  171. } elseif (function_exists("mb_convert_encoding")) {
  172. $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
  173. } elseif(function_exists("iconv")) {
  174. $output = iconv($_input_charset,$_output_charset,$input);
  175. } else die("sorry, you have no libs support for charset changes.");
  176. return $output;
  177. }
  178. ?>