alipay_core.function.php 7.6 KB

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