PageRenderTime 43ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/Quản lý website tin tức PHP/discuznews/api/trade/api_alipay.php

https://gitlab.com/phamngsinh/baitaplon_sinhvien
PHP | 296 lines | 266 code | 24 blank | 6 comment | 63 complexity | d1dcd7115dbce6b5e32824c9b7485617 MD5 | raw file
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: api_alipay.php 30091 2012-05-10 03:26:33Z zhengqingpeng $
  7. */
  8. define('IN_API', true);
  9. define('CURSCRIPT', 'api');
  10. if(!defined('IN_DISCUZ')) {
  11. exit('Access Denied');
  12. }
  13. list($ec_contract, $ec_securitycode, $ec_partner, $ec_creditdirectpay) = explode("\t", authcode($_G['setting']['ec_contract'], 'DECODE', $_G['config']['security']['authkey']));
  14. define('DISCUZ_PARTNER', $ec_partner);
  15. define('DISCUZ_SECURITYCODE', $ec_securitycode);
  16. define('DISCUZ_DIRECTPAY', $ec_creditdirectpay);
  17. define('STATUS_SELLER_SEND', 4);
  18. define('STATUS_WAIT_BUYER', 5);
  19. define('STATUS_TRADE_SUCCESS', 7);
  20. define('STATUS_REFUND_CLOSE', 17);
  21. function credit_payurl($price, &$orderid) {
  22. global $_G;
  23. $orderid = dgmdate(TIMESTAMP, 'YmdHis').random(18);
  24. $args = array(
  25. 'subject' => $_G['setting']['bbname'].' - '.$_G['member']['username'].' - '.lang('forum/misc', 'credit_payment'),
  26. 'body' => lang('forum/misc', 'credit_forum_payment').' '.$_G['setting']['extcredits'][$_G['setting']['creditstrans']]['title'].' '.intval($price * $_G['setting']['ec_ratio']).' '.$_G['setting']['extcredits'][$_G['setting']['creditstrans']]['unit'].' ('.$_G['clientip'].')',
  27. 'service' => 'trade_create_by_buyer',
  28. 'partner' => DISCUZ_PARTNER,
  29. 'notify_url' => $_G['siteurl'].'api/trade/notify_credit.php',
  30. 'return_url' => $_G['siteurl'].'api/trade/notify_credit.php',
  31. 'show_url' => $_G['siteurl'],
  32. '_input_charset' => CHARSET,
  33. 'out_trade_no' => $orderid,
  34. 'price' => $price,
  35. 'quantity' => 1,
  36. 'seller_email' => $_G['setting']['ec_account'],
  37. 'extend_param' => 'isv^dz11'
  38. );
  39. if(DISCUZ_DIRECTPAY) {
  40. $args['service'] = 'create_direct_pay_by_user';
  41. $args['payment_type'] = '1';
  42. } else {
  43. $args['logistics_type'] = 'EXPRESS';
  44. $args['logistics_fee'] = 0;
  45. $args['logistics_payment'] = 'SELLER_PAY';
  46. $args['payment_type'] = 1;
  47. }
  48. return trade_returnurl($args);
  49. }
  50. function invite_payurl($amount, $price, &$orderid) {
  51. global $_G;
  52. $orderid = dgmdate(TIMESTAMP, 'YmdHis').random(18);
  53. $args = array(
  54. 'subject' => $_G['setting']['bbname'].' - '.lang('forum/misc', 'invite_payment'),
  55. 'body' => lang('forum/misc', 'invite_forum_payment').'_'.intval($amount).'_'.lang('forum/misc', 'invite_forum_payment_unit').'_('.$_G['clientip'].')',
  56. 'service' => 'trade_create_by_buyer',
  57. 'partner' => DISCUZ_PARTNER,
  58. 'notify_url' => $_G['siteurl'].'api/trade/notify_invite.php',
  59. 'return_url' => $_G['siteurl'].'api/trade/notify_invite.php',
  60. 'show_url' => $_G['siteurl'],
  61. '_input_charset' => CHARSET,
  62. 'out_trade_no' => $orderid,
  63. 'price' => $price,
  64. 'quantity' => 1,
  65. 'seller_email' => $_G['setting']['ec_account'],
  66. 'extend_param' => 'isv^dz11'
  67. );
  68. if(DISCUZ_DIRECTPAY) {
  69. $args['service'] = 'create_direct_pay_by_user';
  70. $args['payment_type'] = '1';
  71. } else {
  72. $args['logistics_type'] = 'EXPRESS';
  73. $args['logistics_fee'] = 0;
  74. $args['logistics_payment'] = 'SELLER_PAY';
  75. $args['payment_type'] = 1;
  76. }
  77. return trade_returnurl($args);
  78. }
  79. function trade_payurl($pay, $trade, $tradelog) {
  80. global $_G;
  81. $args = array(
  82. 'service' => 'trade_create_by_buyer',
  83. 'partner' => DISCUZ_PARTNER,
  84. 'notify_url' => $_G['siteurl'].'api/trade/notify_trade.php',
  85. 'return_url' => $_G['siteurl'].'api/trade/notify_trade.php',
  86. 'show_url' => $tradelog['tid'] ? $_G['siteurl'].'forum.php?mod=viewthread&do=tradeinfo&tid='.$tradelog['tid'].'&pid='.$tradelog['pid'] : $_G['siteurl'],
  87. '_input_charset' => CHARSET,
  88. 'subject' => $trade['subject'],
  89. 'body' => $trade['subject'],
  90. 'out_trade_no' => $tradelog['orderid'],
  91. 'price' => $tradelog['baseprice'],
  92. 'quantity' => $tradelog['number'],
  93. 'logistics_type' => $pay['logistics_type'],
  94. 'logistics_fee' => $tradelog['transportfee'],
  95. 'logistics_payment' => $pay['transport'],
  96. 'payment_type' => $trade['itemtype'],
  97. 'seller_email' => $trade['account'],
  98. 'extend_param' => 'isv^dz11'
  99. );
  100. if($pay['logistics_type'] == 'VIRTUAL') {
  101. if(DISCUZ_DIRECTPAY) {
  102. $args['service'] = 'create_direct_pay_by_user';
  103. $args['payment_type'] = '1';
  104. unset($args['logistics_type'], $args['logistics_fee'], $args['logistics_payment']);
  105. } else {
  106. $args['logistics_type'] = 'EXPRESS';
  107. $args['logistics_payment'] = 'SELLER_PAY';
  108. $args['payment_type'] = '1';
  109. }
  110. }
  111. return trade_returnurl($args);
  112. }
  113. function trade_returnurl($args) {
  114. global $_G;
  115. ksort($args);
  116. $urlstr = $sign = '';
  117. foreach($args as $key => $val) {
  118. $sign .= '&'.$key.'='.$val;
  119. $urlstr .= $key.'='.rawurlencode($val).'&';
  120. }
  121. $sign = substr($sign, 1);
  122. $sign = md5($sign.DISCUZ_SECURITYCODE);
  123. return 'https://www.alipay.com/cooperate/gateway.do?'.$urlstr.'sign='.$sign.'&sign_type=MD5';
  124. }
  125. function trade_notifycheck($type) {
  126. global $_G;
  127. if(!empty($_POST)) {
  128. $notify = $_POST;
  129. $location = FALSE;
  130. } elseif(!empty($_GET)) {
  131. $notify = $_GET;
  132. $location = TRUE;
  133. } else {
  134. exit('Access Denied');
  135. }
  136. unset($notify['diy']);
  137. if(dfsockopen("http://notify.alipay.com/trade/notify_query.do?partner=".DISCUZ_PARTNER."&notify_id=".$notify['notify_id'], 60) !== 'true') {
  138. exit('Access Denied');
  139. }
  140. if($type == 'trade') {
  141. $urlstr = '';
  142. foreach($notify as $key => $val) {
  143. $urlstr .= $key.'='.rawurlencode($val).'&';
  144. }
  145. } else {
  146. if(!DISCUZ_SECURITYCODE) {
  147. exit('Access Denied');
  148. }
  149. ksort($notify);
  150. $sign = '';
  151. foreach($notify as $key => $val) {
  152. if($key != 'sign' && $key != 'sign_type') $sign .= "&$key=$val";
  153. }
  154. if($notify['sign'] != md5(substr($sign,1).DISCUZ_SECURITYCODE)) {
  155. exit('Access Denied');
  156. }
  157. }
  158. if(($type == 'credit' || $type == 'invite') && (!DISCUZ_DIRECTPAY && $notify['notify_type'] == 'trade_status_sync' && ($notify['trade_status'] == 'WAIT_SELLER_SEND_GOODS' || $notify['trade_status'] == 'TRADE_FINISHED') || DISCUZ_DIRECTPAY && ($notify['trade_status'] == 'TRADE_FINISHED' || $notify['trade_status'] == 'TRADE_SUCCESS'))
  159. || $type == 'trade' && $notify['notify_type'] == 'trade_status_sync') {
  160. return array(
  161. 'validator' => TRUE,
  162. 'status' => trade_getstatus(!empty($notify['refund_status']) ? $notify['refund_status'] : $notify['trade_status'], 1),
  163. 'order_no' => $notify['out_trade_no'],
  164. 'price' => !DISCUZ_DIRECTPAY && $notify['price'] ? $notify['price'] : $notify['total_fee'],
  165. 'trade_no' => $notify['trade_no'],
  166. 'notify' => 'success',
  167. 'location' => $location
  168. );
  169. } else {
  170. return array(
  171. 'validator' => FALSE,
  172. 'notify' => 'fail',
  173. 'location' => $location
  174. );
  175. }
  176. }
  177. function trade_getorderurl($orderid) {
  178. return 'https://www.alipay.com/trade/query_trade_detail.htm?trade_no='.$orderid;
  179. }
  180. function trade_typestatus($method, $status = -1) {
  181. switch($method) {
  182. case 'buytrades' : $methodvalue = array(1, 5, 11, 12);break;
  183. case 'selltrades' : $methodvalue = array(2, 4, 10, 13);break;
  184. case 'successtrades' : $methodvalue = array(7);break;
  185. case 'tradingtrades' : $methodvalue = array(1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16);break;
  186. case 'closedtrades' : $methodvalue = array(8, 17);break;
  187. case 'refundsuccess' : $methodvalue = array(17);break;
  188. case 'refundtrades' : $methodvalue = array(14, 15, 16, 17, 18);break;
  189. case 'unstarttrades' : $methodvalue = array(0);break;
  190. case 'eccredittrades' : $methodvalue = array(7, 17);break;
  191. }
  192. return $status != -1 ? in_array($status, $methodvalue) : $methodvalue;
  193. }
  194. function trade_getstatus($key, $method = 2) {
  195. $language = lang('forum/misc');
  196. $status[1] = array(
  197. 'WAIT_BUYER_PAY' => 1,
  198. 'WAIT_SELLER_CONFIRM_TRADE' => 2,
  199. 'WAIT_SYS_CONFIRM_PAY' => 3,
  200. 'WAIT_SELLER_SEND_GOODS' => 4,
  201. 'WAIT_BUYER_CONFIRM_GOODS' => 5,
  202. 'WAIT_SYS_PAY_SELLER' => 6,
  203. 'TRADE_FINISHED' => 7,
  204. 'TRADE_CLOSED' => 8,
  205. 'WAIT_SELLER_AGREE' => 10,
  206. 'SELLER_REFUSE_BUYER' => 11,
  207. 'WAIT_BUYER_RETURN_GOODS' => 12,
  208. 'WAIT_SELLER_CONFIRM_GOODS' => 13,
  209. 'WAIT_ALIPAY_REFUND' => 14,
  210. 'ALIPAY_CHECK' => 15,
  211. 'OVERED_REFUND' => 16,
  212. 'REFUND_SUCCESS' => 17,
  213. 'REFUND_CLOSED' => 18
  214. );
  215. $status[2] = array(
  216. 0 => $language['trade_unstart'],
  217. 1 => $language['trade_waitbuyerpay'],
  218. 2 => $language['trade_waitsellerconfirm'],
  219. 3 => $language['trade_sysconfirmpay'],
  220. 4 => $language['trade_waitsellersend'],
  221. 5 => $language['trade_waitbuyerconfirm'],
  222. 6 => $language['trade_syspayseller'],
  223. 7 => $language['trade_finished'],
  224. 8 => $language['trade_closed'],
  225. 10 => $language['trade_waitselleragree'],
  226. 11 => $language['trade_sellerrefusebuyer'],
  227. 12 => $language['trade_waitbuyerreturn'],
  228. 13 => $language['trade_waitsellerconfirmgoods'],
  229. 14 => $language['trade_waitalipayrefund'],
  230. 15 => $language['trade_alipaycheck'],
  231. 16 => $language['trade_overedrefund'],
  232. 17 => $language['trade_refundsuccess'],
  233. 18 => $language['trade_refundclosed']
  234. );
  235. return $method == -1 ? $status[2] : $status[$method][$key];
  236. }
  237. function trade_setprice($data, &$price, &$pay, &$transportfee) {
  238. if($data['transport'] == 1) {
  239. $pay['transport'] = 'SELLER_PAY';
  240. } elseif($data['transport'] == 2) {
  241. $pay['transport'] = 'BUYER_PAY';
  242. } elseif($data['transport'] == 3) {
  243. $pay['logistics_type'] = 'VIRTUAL';
  244. } else {
  245. $pay['transport'] = 'BUYER_PAY_AFTER_RECEIVE';
  246. }
  247. if($data['transport'] != 3) {
  248. if($data['fee'] == 1) {
  249. $pay['logistics_type'] = 'POST';
  250. $pay['logistics_fee'] = $data['trade']['ordinaryfee'];
  251. if($data['transport'] == 2) {
  252. $price = $price + $data['trade']['ordinaryfee'];
  253. $transportfee = $data['trade']['ordinaryfee'];
  254. }
  255. } elseif($data['fee'] == 2) {
  256. $pay['logistics_type'] = 'EMS';
  257. $pay['logistics_fee'] = $data['trade']['emsfee'];
  258. if($data['transport'] == 2) {
  259. $price = $price + $data['trade']['emsfee'];
  260. $transportfee = $data['trade']['emsfee'];
  261. }
  262. } else {
  263. $pay['logistics_type'] = 'EXPRESS';
  264. $pay['logistics_fee'] = $data['trade']['expressfee'];
  265. if($data['transport'] == 2) {
  266. $price = $price + $data['trade']['expressfee'];
  267. $transportfee = $data['trade']['expressfee'];
  268. }
  269. }
  270. }
  271. }
  272. ?>