alipay_core.function.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <?php
  2. /* *
  3. * 支付宝接口公用函数
  4. * 详细:该类是请求、通知返回两个文件所调用的公用函数核心处理文件
  5. * 版本:3.3
  6. * 日期:2012-07-19
  7. * 说明:
  8. * 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
  9. * 该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
  10. */
  11. /**
  12. * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
  13. * @param $para 需要拼接的数组
  14. * return 拼接完成以后的字符串
  15. */
  16. function createLinkstring($para) {
  17. $arg = "";
  18. /*while (list ($key, $val) = each ($para)) { //each PHP版本7.2以上已被废弃
  19. $arg.=$key."=".$val."&";
  20. }*/
  21. foreach($para as $key=>$val){
  22. $arg.=$key."=".$val."&";
  23. }
  24. if(is_array($arg)){
  25. //去掉最后一个&字符
  26. $arg = substr($arg,0,count($arg)-2);
  27. }else{
  28. //去掉最后一个&字符
  29. $arg = substr($arg,0,strlen($arg)-1);
  30. }
  31. //如果存在转义字符,那么去掉转义
  32. if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
  33. return $arg;
  34. }
  35. /**
  36. * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对字符串做urlencode编码
  37. * @param $para 需要拼接的数组
  38. * return 拼接完成以后的字符串
  39. */
  40. function createLinkstringUrlencode($para) {
  41. $arg = "";
  42. /*while (list ($key, $val) = each ($para)) { //each PHP版本7.2以上已被废弃
  43. $arg.=$key."=".urlencode($val)."&";
  44. }*/
  45. foreach($para as $key=>$val){
  46. $arg.=$key."=".urlencode($val)."&";
  47. }
  48. //去掉最后一个&字符
  49. $arg = substr($arg,0,count($arg)-2);
  50. //如果存在转义字符,那么去掉转义
  51. if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
  52. return $arg;
  53. }
  54. /**
  55. * 除去数组中的空值和签名参数
  56. * @param $para 签名参数组
  57. * return 去掉空值与签名参数后的新签名参数组
  58. */
  59. function paraFilter($para) {
  60. $para_filter = array();
  61. /*while (list ($key, $val) = each ($para)) { //each PHP版本7.2以上已被废弃
  62. if($key == "sign" || $key == "sign_type" || $val == "")continue;
  63. else $para_filter[$key] = $para[$key];
  64. }*/
  65. foreach($para as $key=>$val){
  66. if($key == "sign" || $key == "sign_type" || $val == "")continue;
  67. else $para_filter[$key] = $para[$key];
  68. }
  69. return $para_filter;
  70. }
  71. /**
  72. * 对数组排序
  73. * @param $para 排序前的数组
  74. * return 排序后的数组
  75. */
  76. function argSort($para) {
  77. ksort($para);
  78. reset($para);
  79. return $para;
  80. }
  81. /**
  82. * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
  83. * 注意:服务器需要开通fopen配置
  84. * @param $word 要写入日志里的文本内容 默认值:空值
  85. */
  86. function logResult($word='') {
  87. $fp = fopen("log.txt","a");
  88. flock($fp, LOCK_EX) ;
  89. fwrite($fp,"执行日期:".strftime("%Y%m%d%H%M%S",time())."\n".$word."\n");
  90. flock($fp, LOCK_UN);
  91. fclose($fp);
  92. }
  93. /**
  94. * 远程获取数据,POST模式
  95. * 注意:
  96. * 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了
  97. * 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\\cacert.pem'
  98. * @param $url 指定URL完整路径地址
  99. * @param $cacert_url 指定当前工作目录绝对路径
  100. * @param $para 请求的数据
  101. * @param $input_charset 编码格式。默认值:空值
  102. * return 远程输出的数据
  103. */
  104. function getHttpResponsePOST($url, $cacert_url, $para, $input_charset = '') {
  105. if (trim($input_charset) != '') {
  106. $url = $url."_input_charset=".$input_charset;
  107. }
  108. $curl = curl_init($url);
  109. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证
  110. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证
  111. curl_setopt($curl, CURLOPT_CAINFO,$cacert_url);//证书地址
  112. curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头
  113. curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
  114. curl_setopt($curl,CURLOPT_POST,true); // post传输数据
  115. curl_setopt($curl,CURLOPT_POSTFIELDS,$para);// post传输数据
  116. $responseText = curl_exec($curl);
  117. //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容
  118. curl_close($curl);
  119. return $responseText;
  120. }
  121. /**
  122. * 远程获取数据,GET模式
  123. * 注意:
  124. * 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了
  125. * 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\\cacert.pem'
  126. * @param $url 指定URL完整路径地址
  127. * @param $cacert_url 指定当前工作目录绝对路径
  128. * return 远程输出的数据
  129. */
  130. function getHttpResponseGET($url,$cacert_url) {
  131. $curl = curl_init($url);
  132. curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头
  133. curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
  134. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证
  135. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证
  136. curl_setopt($curl, CURLOPT_CAINFO,$cacert_url);//证书地址
  137. $responseText = curl_exec($curl);
  138. //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容
  139. curl_close($curl);
  140. return $responseText;
  141. }
  142. /**
  143. * 实现多种字符编码方式
  144. * @param $input 需要编码的字符串
  145. * @param $_output_charset 输出的编码格式
  146. * @param $_input_charset 输入的编码格式
  147. * return 编码后的字符串
  148. */
  149. function charsetEncode($input,$_output_charset ,$_input_charset) {
  150. $output = "";
  151. if(!isset($_output_charset) )$_output_charset = $_input_charset;
  152. if($_input_charset == $_output_charset || $input ==null ) {
  153. $output = $input;
  154. } elseif (function_exists("mb_convert_encoding")) {
  155. $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
  156. } elseif(function_exists("iconv")) {
  157. $output = iconv($_input_charset,$_output_charset,$input);
  158. } else die("sorry, you have no libs support for charset change.");
  159. return $output;
  160. }
  161. /**
  162. * 实现多种字符解码方式
  163. * @param $input 需要解码的字符串
  164. * @param $_output_charset 输出的解码格式
  165. * @param $_input_charset 输入的解码格式
  166. * return 解码后的字符串
  167. */
  168. function charsetDecode($input,$_input_charset ,$_output_charset) {
  169. $output = "";
  170. if(!isset($_input_charset) )$_input_charset = $_input_charset ;
  171. if($_input_charset == $_output_charset || $input ==null ) {
  172. $output = $input;
  173. } elseif (function_exists("mb_convert_encoding")) {
  174. $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
  175. } elseif(function_exists("iconv")) {
  176. $output = iconv($_input_charset,$_output_charset,$input);
  177. } else die("sorry, you have no libs support for charset changes.");
  178. return $output;
  179. }
  180. ?>