alipay.func.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. /**
  3. *功能:支付宝接口公用函数
  4. *详细:该页面是请求、通知返回两个文件所调用的公用函数核心处理文件,不需要修改
  5. *版本:3.0
  6. *修改日期:2010-05-24
  7. '说明:
  8. '以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
  9. '该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
  10. */
  11. /**
  12. * 生成签名结果
  13. * @param $array要加密的数组
  14. * @param return 签名结果字符串
  15. */
  16. function build_mysign($sort_array,$security_code,$sign_type = "MD5") {
  17. $prestr = create_linkstring($sort_array); //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
  18. $prestr = $prestr.$security_code; //把拼接后的字符串再与安全校验码直接连接起来
  19. $mysgin = sign($prestr,$sign_type); //把最终的字符串加密,获得签名结果
  20. return $mysgin;
  21. }
  22. /**
  23. * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
  24. * @param $array 需要拼接的数组
  25. * @param return 拼接完成以后的字符串
  26. */
  27. function create_linkstring($array) {
  28. $arg = "";
  29. while (list ($key, $val) = each ($array)) {
  30. $arg.=$key."=".$val."&";
  31. }
  32. $arg = substr($arg,0,count($arg)-2); //去掉最后一个&字符
  33. return $arg;
  34. }
  35. /********************************************************************************/
  36. /**除去数组中的空值和签名参数
  37. * @param $parameter 加密参数组
  38. * @param return 去掉空值与签名参数后的新加密参数组
  39. */
  40. function para_filter($parameter) {
  41. $para = array();
  42. while (list ($key, $val) = each ($parameter)) {
  43. if($key == "sign" || $key == "sign_type" || $val == "")continue;
  44. else $para[$key] = $parameter[$key];
  45. }
  46. return $para;
  47. }
  48. /********************************************************************************/
  49. /**对数组排序
  50. * @param $array 排序前的数组
  51. * @param return 排序后的数组
  52. */
  53. function arg_sort($array) {
  54. ksort($array);
  55. reset($array);
  56. return $array;
  57. }
  58. /********************************************************************************/
  59. /**加密字符串
  60. * @param $prestr 需要加密的字符串
  61. * @param return 加密结果
  62. */
  63. function sign($prestr,$sign_type) {
  64. $sign='';
  65. if($sign_type == 'MD5') {
  66. $sign = md5($prestr);
  67. }elseif($sign_type =='DSA') {
  68. //DSA 签名方法待后续开发
  69. die(L('dsa', 'pay'));
  70. }else {
  71. die(L('alipay_error','pay'));
  72. }
  73. return $sign;
  74. }
  75. // 日志消息,把支付宝返回的参数记录下来
  76. function log_result($word) {
  77. $fp = fopen("log.txt","a");
  78. flock($fp, LOCK_EX) ;
  79. fwrite($fp, L('execute_date', 'pay').":".strftime("%Y%m%d%H%M%S",time())."\n".$word."\n");
  80. flock($fp, LOCK_UN);
  81. fclose($fp);
  82. }
  83. /**实现多种字符编码方式
  84. * @param $input 需要编码的字符串
  85. * @param $_output_charset 输出的编码格式
  86. * @param $_input_charset 输入的编码格式
  87. * @param return 编码后的字符串
  88. */
  89. function charset_encode($input,$_output_charset ,$_input_charset) {
  90. $output = "";
  91. if(!isset($_output_charset) )$_output_charset = $_input_charset;
  92. if($_input_charset == $_output_charset || $input ==null ) {
  93. $output = $input;
  94. } elseif (function_exists("mb_convert_encoding")) {
  95. $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
  96. } elseif(function_exists("iconv")) {
  97. $output = iconv($_input_charset,$_output_charset,$input);
  98. } else die("sorry, you have no libs support for charset change.");
  99. return $output;
  100. }
  101. /********************************************************************************/
  102. /**实现多种字符解码方式
  103. * @param $input 需要解码的字符串
  104. * @param $_output_charset 输出的解码格式
  105. * @param $_input_charset 输入的解码格式
  106. * @param return 解码后的字符串
  107. */
  108. function charset_decode($input,$_input_charset ,$_output_charset) {
  109. $output = "";
  110. if(!isset($_input_charset) )$_input_charset = $_input_charset ;
  111. if($_input_charset == $_output_charset || $input ==null ) {
  112. $output = $input;
  113. } elseif (function_exists("mb_convert_encoding")) {
  114. $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
  115. } elseif(function_exists("iconv")) {
  116. $output = iconv($_input_charset,$_output_charset,$input);
  117. } else die("sorry, you have no libs support for charset changes.");
  118. return $output;
  119. }
  120. /*********************************************************************************/
  121. /**用于防钓鱼,调用接口query_timestamp来获取时间戳的处理函数
  122. 注意:由于低版本的PHP配置环境不支持远程XML解析,因此必须服务器、本地电脑中装有高版本的PHP配置环境。建议本地调试时使用PHP开发软件
  123. * @param $partner 合作身份者ID
  124. * @param return 时间戳字符串
  125. */
  126. function query_timestamp($partner) {
  127. $URL = "https://mapi.alipay.com/gateway.do?service=query_timestamp&partner=".$partner;
  128. $encrypt_key = "";
  129. return $encrypt_key;
  130. }
  131. ?>