Zm.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. if( !defined('BASEPATH') )
  3. {
  4. exit( 'No direct script access allowed' );
  5. }
  6. class Pays_zfb
  7. {
  8. public function __construct()
  9. {
  10. $this->partner = CT_Pay_ID;
  11. $this->SKey = CT_Pay_Key;
  12. $this->return_url = "http://" . Web_Url . links("pay", "return_url/alipay");
  13. $this->notify_url = "http://" . Web_Url . links("pay", "notify_url/alipay");
  14. }
  15. public function get_link($dingdan, $body, $total_fee)
  16. {
  17. $params = array( "service" => "create_direct_pay_by_user", "partner" => $this->partner, "seller_id" => $this->partner, "payment_type" => 1, "notify_url" => $this->notify_url . "/md5", "return_url" => $this->return_url . "/md5", "out_trade_no" => $dingdan, "subject" => $body, "total_fee" => $total_fee, "body" => $body, "_input_charset" => "utf-8" );
  18. $params["sign"] = $this->md5_sign($params);
  19. $params["sign_type"] = "MD5";
  20. $url = "https://mapi.alipay.com/gateway.do?";
  21. foreach( $params as $k => $v )
  22. {
  23. $url .= $k . "=" . urlencode($v) . "&";
  24. }
  25. $url = substr($url, 0, -1);
  26. header('location:' . $url);
  27. exit();
  28. }
  29. public function md5_sign($para)
  30. {
  31. $para_filter = array( );
  32. foreach( $para as $key => $val )
  33. {
  34. if( $key == "sign" || $key == "sign_type" || $val == "" )
  35. {
  36. continue;
  37. }
  38. $para_filter[$key] = $para[$key];
  39. }
  40. ksort($para_filter);
  41. reset($para_filter);
  42. $prestr = $this->createLinkstring($para_filter) . $this->SKey;
  43. return md5($prestr);
  44. }
  45. public function is_sign()
  46. {
  47. $para = (isset($_POST["sign"]) ? $_POST : $_GET);
  48. $sign = $para["sign"];
  49. $mysgin = $this->md5_sign($para);
  50. if( $mysgin == $sign )
  51. {
  52. if( $para["trade_status"] == "TRADE_SUCCESS" )
  53. {
  54. return $para["out_trade_no"];
  55. }
  56. }
  57. return false;
  58. }
  59. public function getsignstr($params, $n = 0)
  60. {
  61. ksort($params);
  62. $stringToBeSigned = "";
  63. $i = 0;
  64. foreach( $params as $k => $v )
  65. {
  66. if( !empty($v) && "@" != substr($v, 0, 1) )
  67. {
  68. $v = $this->characet($v);
  69. if( $i == 0 )
  70. {
  71. $stringToBeSigned .= (string) $k . "=" . (string) $v;
  72. }
  73. else
  74. {
  75. $stringToBeSigned .= "&" . (string) $k . "=" . (string) $v;
  76. }
  77. $i++;
  78. }
  79. }
  80. unset($k);
  81. unset($v);
  82. return $stringToBeSigned;
  83. }
  84. public function characet($data, $targetCharset = "utf-8")
  85. {
  86. if( !empty($data) )
  87. {
  88. $fileType = "utf-8";
  89. if( strcasecmp($fileType, $targetCharset) != 0 )
  90. {
  91. $data = mb_convert_encoding($data, $targetCharset, $fileType);
  92. }
  93. }
  94. return $data;
  95. }
  96. public function createLinkstring($para)
  97. {
  98. $arg = "";
  99. while( list($key, $val) = each($para) )
  100. {
  101. $arg .= $key . "=" . $val . "&";
  102. }
  103. $arg = substr($arg, 0, count($arg) - 2);
  104. if( get_magic_quotes_gpc() )
  105. {
  106. $arg = stripslashes($arg);
  107. }
  108. return $arg;
  109. }
  110. }