Sndapay.class.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <?php
  2. defined('IN_PHPCMS') or exit('No permission resources.');
  3. if (isset($set_modules) && $set_modules == TRUE)
  4. {
  5. $i = isset($modules) ? count($modules) : 0;
  6. $modules[$i]['code'] = basename(__FILE__, '.class.php');
  7. $modules[$i]['name'] = L('sndapay', '', 'pay');
  8. $modules[$i]['desc'] = L('sndapay_tip', '', 'pay');
  9. $modules[$i]['is_cod'] = '0';
  10. $modules[$i]['is_online'] = '1';
  11. $modules[$i]['author'] = 'PHPCMS开发团队';
  12. $modules[$i]['website'] = 'http://www.sdo.com';
  13. $modules[$i]['version'] = '1.0.0';
  14. $modules[$i]['config'] = array(
  15. array('name' => 'sndapay_account','type' => 'text','value' => ''),
  16. array('name' => 'sndapay_key','type' => 'text','value' => ''),
  17. );
  18. return;
  19. }
  20. pc_base::load_app_class('pay_abstract','','0');
  21. class Sndapay extends paymentabstract{
  22. public function __construct($config = array()) {
  23. if (!empty($config)) $this->set_config($config);
  24. $this->config['gateway_url'] = 'https://mas.sdo.com/web-acquire-channel/cashier30.htm';
  25. $this->config['gateway_method'] = 'POST';
  26. $this->config['notify_url'] = return_url('sndapay',1);
  27. $this->config['return_url'] = return_url('sndapay');
  28. }
  29. public function getpreparedata() {
  30. $prepare_data['Version'] = '3.0'; //gateway version
  31. $prepare_data['CurrencyType'] = 'RMB';
  32. $prepare_data['NotifyUrlType'] = 'http';
  33. $prepare_data['MerchantNo'] = $this->config['sndapay_account'];
  34. $prepare_data['MerchantUserId'] = '';
  35. $prepare_data['SignType'] = '2';
  36. $prepare_data['NotifyUrl'] = $this->config['notify_url'];
  37. $prepare_data['PostBackUrl'] = $this->config['return_url'];
  38. $prepare_data['BackUrl'] = '';
  39. $prepare_data['PayChannel'] = '';
  40. $prepare_data['DefaultChannel'] = '04';
  41. // 商品信息
  42. $prepare_data['ProductDesc'] = $this->product_info['name'];
  43. $prepare_data['Amount'] = $this->product_info['price'];
  44. $prepare_data['ProductNo'] = '';
  45. $prepare_data['ProductUrl'] = '';
  46. //订单信息
  47. $prepare_data['OrderNo'] = $this->order_info['id'];
  48. $prepare_data['OrderTime'] = date('YmdHis',$this->order_info['order_time']);
  49. //买家信息
  50. $prepare_data['Remark1'] = $this->product_info['body'];
  51. $data = $prepare_data['Version'].$prepare_data['Amount'].$prepare_data['OrderNo'].$prepare_data['MerchantNo'].$prepare_data['MerchantUserId'].$prepare_data['PayChannel'].$prepare_data['PostBackUrl'].$prepare_data['NotifyUrl'].$prepare_data['BackUrl'].$prepare_data['OrderTime'].$prepare_data['CurrencyType'].$prepare_data['NotifyUrlType'].$prepare_data['SignType'].$prepare_data['ProductNo'].$prepare_data['ProductDesc'].$prepare_data['Remark1'].$prepare_data['DefaultChannel'].$prepare_data['ProductUrl'];
  52. // 数字签名
  53. $prepare_data['MAC'] = md5($data.$this->config['sndapay_key']);
  54. return $prepare_data;
  55. }
  56. /**
  57. * 客户端接收数据
  58. * 状态码说明 (0 交易完成 1 交易失败 2 交易超时 3 交易处理中 4 交易未支付)
  59. */
  60. public function receive() {
  61. $amount=$_POST["Amount"];
  62. $payamount=$_POST["PayAmount"];
  63. $orderid=$_POST["OrderNo"];
  64. $serialno=$_POST["serialno"];//注意大小写,客服端回调首字母大写,服务端回调首字母小写
  65. $status=$_POST["Status"];
  66. $merid=$_POST["MerchantNo"];
  67. $paychannel=$_POST["PayChannel"];
  68. $discount=$_POST["Discount"];
  69. $signtype=$_POST["SignType"];
  70. $paytime=$_POST["PayTime"];
  71. $ctype=$_POST["CurrencyType"];
  72. $prono=$_POST["ProductNo"];
  73. $prodesc=$_POST["ProductDesc"];
  74. $remark1=$_POST["Remark1"];
  75. $remark2=$_POST["Remark2"];
  76. $ex=$_POST["ExInfo"];
  77. $mac=$_POST["MAC"];
  78. $signString=$amount."|".$payamount."|".$orderid."|".$serialno."|".$status."|".$merid."|".$paychannel."|".$discount."|".$signtype."|".$paytime."|".$ctype."|".$prono."|".$prodesc."|".$remark1."|".$remark2."|".$ex;
  79. if($signtype=="2") {
  80. $md5key=$this->config['sndapay_key'];
  81. $mac2 =md5($signString."|".$md5key);
  82. $ok = (strtoupper($mac)==strtoupper($mac2));
  83. }
  84. if ($ok == 1) {
  85. $return_data['order_id'] = $orderid;
  86. $return_data['order_total'] = $amount;
  87. $return_data['price'] = $payamount;
  88. $return_data['order_status'] = 0;
  89. return $return_data;
  90. } elseif ($ok == 0) {
  91. showmessage(L('illegal_notice'));
  92. return false;
  93. } else {
  94. error_log(date('m-d H:i:s',SYS_TIME).'| GET: illegality notice : flase |'."\r\n", 3, CACHE_PATH.'pay_error_log.php');
  95. showmessage(L('illegal_sign'));
  96. return false;
  97. }
  98. }
  99. /**
  100. * POST接收数据
  101. * 状态码说明 (0 交易完成 1 交易失败 2 交易超时 3 交易处理中 4 交易未支付)
  102. */
  103. public function notify() {
  104. $amount=$_POST["Amount"];
  105. $payamount=$_POST["PayAmount"];
  106. $orderid=$_POST["OrderNo"];
  107. $serialno=$_POST["serialno"];//注意大小写,客服端回调首字母大写,服务端回调首字母小写
  108. $status=$_POST["Status"];
  109. $merid=$_POST["MerchantNo"];
  110. $paychannel=$_POST["PayChannel"];
  111. $discount=$_POST["Discount"];
  112. $signtype=$_POST["SignType"];
  113. $paytime=$_POST["PayTime"];
  114. $ctype=$_POST["CurrencyType"];
  115. $prono=$_POST["ProductNo"];
  116. $prodesc=$_POST["ProductDesc"];
  117. $remark1=$_POST["Remark1"];
  118. $remark2=$_POST["Remark2"];
  119. $ex=$_POST["ExInfo"];
  120. $mac=$_POST["MAC"];
  121. $signString=$amount."|".$payamount."|".$orderid."|".$serialno."|".$status."|".$merid."|".$paychannel."|".$discount."|".$signtype."|".$paytime."|".$ctype."|".$prono."|".$prodesc."|".$remark1."|".$remark2."|".$ex;
  122. if($signtype=="2") {
  123. $md5key=$this->config['sndapay_key'];
  124. $mac2 =md5($signString."|".$md5key);
  125. $ok = (strtoupper($mac)==strtoupper($mac2));
  126. }
  127. if ($ok == 1) {
  128. $return_data['order_id'] = $orderid;
  129. $return_data['order_total'] = $amount;
  130. $return_data['price'] = $payamount;
  131. $return_data['order_status'] = 0;
  132. return $return_data;
  133. } elseif ($ok == 0) {
  134. return false;
  135. } else {
  136. error_log(date('m-d H:i:s',SYS_TIME).'| POST: illegality notice : flase |'."\r\n", 3, CACHE_PATH.'pay_error_log.php');
  137. return false;
  138. }
  139. }
  140. /**
  141. * 相应服务器应答状态
  142. * @param $result
  143. */
  144. public function response($result) {
  145. if (FALSE == $result) echo 'bad';
  146. else echo 'ok';
  147. }
  148. /**
  149. * 返回字符过滤
  150. * @param $parameter
  151. */
  152. private function filterParameter($parameter)
  153. {
  154. $para = array();
  155. foreach ($parameter as $key => $value)
  156. {
  157. if ('sign' == $key || 'sign_type' == $key || '' == $value || 'm' == $key || 'a' == $key || 'c' == $key || 'code' == $key ) continue;
  158. else $para[$key] = $value;
  159. }
  160. return $para;
  161. }
  162. }
  163. ?>