llpay_core.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: tandunzhao
  5. * Date: 2017/12/27
  6. * Time: 下午7:59
  7. */
  8. namespace App\Libs\lianlianpay;
  9. class llpay_core
  10. {
  11. /**
  12. * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
  13. * @param $para 需要拼接的数组
  14. * @return mixed 拼接完成以后的字符串
  15. */
  16. public static function createLinkstring($para) {
  17. $arg = "";
  18. while (list ($key, $val) = each ($para)) {
  19. $arg.=$key."=".$val."&";
  20. }
  21. //去掉最后一个&字符
  22. $arg = substr($arg,0,count($arg)-2);
  23. //file_put_contents("log.txt","转义前:".$arg."\n", FILE_APPEND);
  24. //如果存在转义字符,那么去掉转义
  25. if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
  26. //file_put_contents("log.txt","转义后:".$arg."\n", FILE_APPEND);
  27. return $arg;
  28. }
  29. /**
  30. * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对字符串做urlencode编码
  31. * @param $para 需要拼接的数组
  32. * @return mixed 拼接完成以后的字符串
  33. */
  34. public static function createLinkstringUrlencode($para) {
  35. $arg = "";
  36. while (list ($key, $val) = each ($para)) {
  37. $arg.=$key."=".urlencode($val)."&";
  38. }
  39. //去掉最后一个&字符
  40. $arg = substr($arg,0,count($arg)-2);
  41. //如果存在转义字符,那么去掉转义
  42. if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
  43. return $arg;
  44. }
  45. /**
  46. * 除去数组中的空值和签名参数
  47. * @param $para 签名参数组
  48. * @return mixed 去掉空值与签名参数后的新签名参数组
  49. */
  50. public static function paraFilter($para) {
  51. $para_filter = array();
  52. while (list ($key, $val) = each ($para)) {
  53. if($key == "sign" || $val == "")continue;
  54. else $para_filter[$key] = $para[$key];
  55. }
  56. return $para_filter;
  57. }
  58. /**
  59. * 对数组排序
  60. * @param $para 排序前的数组
  61. * @return mixed 排序后的数组
  62. */
  63. public static function argSort($para) {
  64. ksort($para);
  65. reset($para);
  66. return $para;
  67. }
  68. /**
  69. * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
  70. * 注意:服务器需要开通fopen配置
  71. * @param string $word 要写入日志里的文本内容 默认值:空值
  72. */
  73. public static function logResult($word='') {
  74. $fp = fopen("log.txt","a");
  75. flock($fp, LOCK_EX) ;
  76. fwrite($fp,"执行日期:".strftime("%Y%m%d%H%M%S",time())."\n".$word."\n");
  77. flock($fp, LOCK_UN);
  78. fclose($fp);
  79. }
  80. /**
  81. * 远程获取数据,POST模式
  82. * 注意:
  83. * 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了
  84. * 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\\cacert.pem'
  85. * @param $url 指定URL完整路径地址
  86. * @param $cacert_url 指定当前工作目录绝对路径
  87. * @param $para 请求的数据
  88. * @param string $input_charset 编码格式。默认值:空值
  89. * @return mixed 远程输出的数据
  90. */
  91. public static function getHttpResponsePOST($url, $cacert_url, $para, $input_charset = '') {
  92. if (trim($input_charset) != '') {
  93. $url = $url."_input_charset=".$input_charset;
  94. }
  95. // file_put_contents("log.txt","请求报文:".$para."\n", FILE_APPEND);
  96. $curl = curl_init($url);
  97. // file_put_contents("log.txt","请求地址:".$curl."\n", FILE_APPEND);
  98. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证
  99. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证
  100. curl_setopt($curl, CURLOPT_CAINFO,$cacert_url);//证书地址
  101. curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头
  102. curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
  103. curl_setopt($curl,CURLOPT_POST,true); // post传输数据
  104. curl_setopt($curl,CURLOPT_POSTFIELDS,$para);// post传输数据
  105. $responseText = curl_exec($curl);
  106. //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容
  107. curl_close($curl);
  108. // file_put_contents("log.txt","返回值:".$responseText."\n", FILE_APPEND);
  109. return $responseText;
  110. }
  111. /**
  112. * 远程获取数据,POST模式
  113. * 注意:
  114. * @param $url 指定URL完整路径地址
  115. * @param $para 请求的数据
  116. * @return mixed 远程输出的数据
  117. */
  118. public static function getHttpResponseJSON($url, $para) {
  119. $json = json_encode($para);
  120. // dd($json);
  121. // var_dump($url);
  122. // var_dump($json);
  123. $curl = curl_init($url);
  124. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //信任任何证书
  125. curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
  126. curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
  127. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  128. curl_setopt($curl, CURLOPT_HTTPHEADER, array(
  129. 'Content-Type: application/json',
  130. 'Content-Length: ' . strlen($json))
  131. );
  132. $responseText = curl_exec($curl);
  133. // file_put_contents("log.txt",date('Y-m-d H:i:s')."返回值:".$responseText."\n", FILE_APPEND);
  134. curl_close($curl);
  135. return $responseText;
  136. }
  137. /**
  138. * 远程获取数据,GET模式
  139. * 注意:
  140. * 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了
  141. * 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\\cacert.pem'
  142. * @param $url 指定URL完整路径地址
  143. * @param $cacert_url 指定当前工作目录绝对路径
  144. * @return mixed 远程输出的数据
  145. */
  146. public static function getHttpResponseGET($url,$cacert_url) {
  147. $curl = curl_init($url);
  148. curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头
  149. curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
  150. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证
  151. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证
  152. curl_setopt($curl, CURLOPT_CAINFO,$cacert_url);//证书地址
  153. $responseText = curl_exec($curl);
  154. //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容
  155. curl_close($curl);
  156. return $responseText;
  157. }
  158. /**
  159. * 实现多种字符编码方式
  160. * @param $input 需要编码的字符串
  161. * @param $_output_charset 输出的编码格式
  162. * @param $_input_charset 输入的编码格式
  163. * @return null|string|string[] 编码后的字符串
  164. */
  165. public static function charsetEncode($input,$_output_charset ,$_input_charset) {
  166. $output = "";
  167. if(!isset($_output_charset) )$_output_charset = $_input_charset;
  168. if($_input_charset == $_output_charset || $input ==null ) {
  169. $output = $input;
  170. } elseif (function_exists("mb_convert_encoding")) {
  171. $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
  172. } elseif(function_exists("iconv")) {
  173. $output = iconv($_input_charset,$_output_charset,$input);
  174. } else die("sorry, you have no libs support for charset change.");
  175. return $output;
  176. }
  177. /**
  178. * 实现多种字符解码方式
  179. * @param $input 需要解码的字符串
  180. * @param $_input_charset 输入的解码格式
  181. * @param $_output_charset 输出的解码格式
  182. * @return null|string|string[] 解码后的字符串
  183. */
  184. public static function charsetDecode($input,$_input_charset ,$_output_charset) {
  185. $output = "";
  186. if(!isset($_input_charset) )$_input_charset = $_input_charset ;
  187. if($_input_charset == $_output_charset || $input ==null ) {
  188. $output = $input;
  189. } elseif (function_exists("mb_convert_encoding")) {
  190. $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
  191. } elseif(function_exists("iconv")) {
  192. $output = iconv($_input_charset,$_output_charset,$input);
  193. } else die("sorry, you have no libs support for charset changes.");
  194. return $output;
  195. }
  196. //格式化时间戳
  197. public static function local_date($format, $time = NULL) {
  198. if ($time === NULL)
  199. {
  200. $time = gmtime();
  201. }
  202. elseif ($time <= 0)
  203. {
  204. return '';
  205. }
  206. return date($format, $time);
  207. }
  208. }