First commit
This commit is contained in:
296
api/trade/api_alipay.php
Normal file
296
api/trade/api_alipay.php
Normal file
@@ -0,0 +1,296 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Discuz!] (C)2001-2099 Comsenz Inc.
|
||||
* This is NOT a freeware, use is subject to license terms
|
||||
*
|
||||
* $Id: api_alipay.php 31606 2012-09-13 07:26:35Z monkey $
|
||||
*/
|
||||
|
||||
define('IN_API', true);
|
||||
define('CURSCRIPT', 'api');
|
||||
|
||||
if(!defined('IN_DISCUZ')) {
|
||||
exit('Access Denied');
|
||||
}
|
||||
list($ec_contract, $ec_securitycode, $ec_partner, $ec_creditdirectpay) = explode("\t", authcode($_G['setting']['ec_contract'], 'DECODE', $_G['config']['security']['authkey']));
|
||||
|
||||
define('DISCUZ_PARTNER', $ec_partner);
|
||||
define('DISCUZ_SECURITYCODE', $ec_securitycode);
|
||||
define('DISCUZ_DIRECTPAY', $ec_creditdirectpay);
|
||||
|
||||
define('STATUS_SELLER_SEND', 4);
|
||||
define('STATUS_WAIT_BUYER', 5);
|
||||
define('STATUS_TRADE_SUCCESS', 7);
|
||||
define('STATUS_REFUND_CLOSE', 17);
|
||||
|
||||
function credit_payurl($price, &$orderid) {
|
||||
global $_G;
|
||||
|
||||
$orderid = dgmdate(TIMESTAMP, 'YmdHis').random(18);
|
||||
|
||||
$args = array(
|
||||
'subject' => $_G['setting']['bbname'].' - '.$_G['member']['username'].' - '.lang('forum/misc', 'credit_payment'),
|
||||
'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'],
|
||||
'service' => 'trade_create_by_buyer',
|
||||
'partner' => DISCUZ_PARTNER,
|
||||
'notify_url' => $_G['siteurl'].'api/trade/notify_credit.php',
|
||||
'return_url' => $_G['siteurl'].'api/trade/notify_credit.php',
|
||||
'show_url' => $_G['siteurl'],
|
||||
'_input_charset' => CHARSET,
|
||||
'out_trade_no' => $orderid,
|
||||
'price' => $price,
|
||||
'quantity' => 1,
|
||||
'seller_email' => $_G['setting']['ec_account'],
|
||||
'extend_param' => 'isv^dz11'
|
||||
);
|
||||
if(DISCUZ_DIRECTPAY) {
|
||||
$args['service'] = 'create_direct_pay_by_user';
|
||||
$args['payment_type'] = '1';
|
||||
} else {
|
||||
$args['logistics_type'] = 'EXPRESS';
|
||||
$args['logistics_fee'] = 0;
|
||||
$args['logistics_payment'] = 'SELLER_PAY';
|
||||
$args['payment_type'] = 1;
|
||||
}
|
||||
return trade_returnurl($args);
|
||||
}
|
||||
|
||||
function invite_payurl($amount, $price, &$orderid) {
|
||||
global $_G;
|
||||
|
||||
$orderid = dgmdate(TIMESTAMP, 'YmdHis').random(18);
|
||||
|
||||
$args = array(
|
||||
'subject' => $_G['setting']['bbname'].' - '.lang('forum/misc', 'invite_payment'),
|
||||
'body' => lang('forum/misc', 'invite_forum_payment').' '.intval($amount).' '.lang('forum/misc', 'invite_forum_payment_unit'),
|
||||
'service' => 'trade_create_by_buyer',
|
||||
'partner' => DISCUZ_PARTNER,
|
||||
'notify_url' => $_G['siteurl'].'api/trade/notify_invite.php',
|
||||
'return_url' => $_G['siteurl'].'api/trade/notify_invite.php',
|
||||
'show_url' => $_G['siteurl'],
|
||||
'_input_charset' => CHARSET,
|
||||
'out_trade_no' => $orderid,
|
||||
'price' => $price,
|
||||
'quantity' => 1,
|
||||
'seller_email' => $_G['setting']['ec_account'],
|
||||
'extend_param' => 'isv^dz11'
|
||||
);
|
||||
if(DISCUZ_DIRECTPAY) {
|
||||
$args['service'] = 'create_direct_pay_by_user';
|
||||
$args['payment_type'] = '1';
|
||||
} else {
|
||||
$args['logistics_type'] = 'EXPRESS';
|
||||
$args['logistics_fee'] = 0;
|
||||
$args['logistics_payment'] = 'SELLER_PAY';
|
||||
$args['payment_type'] = 1;
|
||||
}
|
||||
return trade_returnurl($args);
|
||||
}
|
||||
|
||||
function trade_payurl($pay, $trade, $tradelog) {
|
||||
global $_G;
|
||||
|
||||
$args = array(
|
||||
'service' => 'trade_create_by_buyer',
|
||||
'partner' => DISCUZ_PARTNER,
|
||||
'notify_url' => $_G['siteurl'].'api/trade/notify_trade.php',
|
||||
'return_url' => $_G['siteurl'].'api/trade/notify_trade.php',
|
||||
'show_url' => $tradelog['tid'] ? $_G['siteurl'].'forum.php?mod=viewthread&do=tradeinfo&tid='.$tradelog['tid'].'&pid='.$tradelog['pid'] : $_G['siteurl'],
|
||||
'_input_charset' => CHARSET,
|
||||
'subject' => $trade['subject'],
|
||||
'body' => $trade['subject'],
|
||||
'out_trade_no' => $tradelog['orderid'],
|
||||
'price' => $tradelog['baseprice'],
|
||||
'quantity' => $tradelog['number'],
|
||||
'logistics_type' => $pay['logistics_type'],
|
||||
'logistics_fee' => $tradelog['transportfee'],
|
||||
'logistics_payment' => $pay['transport'],
|
||||
'payment_type' => $trade['itemtype'],
|
||||
'seller_email' => $trade['account'],
|
||||
'extend_param' => 'isv^dz11'
|
||||
);
|
||||
|
||||
if($pay['logistics_type'] == 'VIRTUAL') {
|
||||
if(DISCUZ_DIRECTPAY) {
|
||||
$args['service'] = 'create_direct_pay_by_user';
|
||||
$args['payment_type'] = '1';
|
||||
unset($args['logistics_type'], $args['logistics_fee'], $args['logistics_payment']);
|
||||
} else {
|
||||
$args['logistics_type'] = 'EXPRESS';
|
||||
$args['logistics_payment'] = 'SELLER_PAY';
|
||||
$args['payment_type'] = '1';
|
||||
}
|
||||
}
|
||||
return trade_returnurl($args);
|
||||
}
|
||||
|
||||
function trade_returnurl($args) {
|
||||
global $_G;
|
||||
ksort($args);
|
||||
$urlstr = $sign = '';
|
||||
foreach($args as $key => $val) {
|
||||
$sign .= '&'.$key.'='.$val;
|
||||
$urlstr .= $key.'='.rawurlencode($val).'&';
|
||||
}
|
||||
$sign = substr($sign, 1);
|
||||
$sign = md5($sign.DISCUZ_SECURITYCODE);
|
||||
return 'https://www.alipay.com/cooperate/gateway.do?'.$urlstr.'sign='.$sign.'&sign_type=MD5';
|
||||
}
|
||||
|
||||
function trade_notifycheck($type) {
|
||||
global $_G;
|
||||
if(!empty($_POST)) {
|
||||
$notify = $_POST;
|
||||
$location = FALSE;
|
||||
} elseif(!empty($_GET)) {
|
||||
$notify = $_GET;
|
||||
$location = TRUE;
|
||||
} else {
|
||||
exit('Access Denied');
|
||||
}
|
||||
unset($notify['diy']);
|
||||
if(dfsockopen("https://notify.alipay.com/trade/notify_query.do?partner=".DISCUZ_PARTNER."¬ify_id=".$notify['notify_id'], 60) !== 'true') {
|
||||
exit('Access Denied');
|
||||
}
|
||||
|
||||
if($type == 'trade') {
|
||||
$urlstr = '';
|
||||
foreach($notify as $key => $val) {
|
||||
$urlstr .= $key.'='.rawurlencode($val).'&';
|
||||
}
|
||||
} else {
|
||||
if(!DISCUZ_SECURITYCODE) {
|
||||
exit('Access Denied');
|
||||
}
|
||||
ksort($notify);
|
||||
$sign = '';
|
||||
foreach($notify as $key => $val) {
|
||||
if($key != 'sign' && $key != 'sign_type') $sign .= "&$key=$val";
|
||||
}
|
||||
if($notify['sign'] != md5(substr($sign,1).DISCUZ_SECURITYCODE)) {
|
||||
exit('Access Denied');
|
||||
}
|
||||
}
|
||||
|
||||
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'))
|
||||
|| $type == 'trade' && $notify['notify_type'] == 'trade_status_sync') {
|
||||
return array(
|
||||
'validator' => TRUE,
|
||||
'status' => trade_getstatus(!empty($notify['refund_status']) ? $notify['refund_status'] : $notify['trade_status'], 1),
|
||||
'order_no' => $notify['out_trade_no'],
|
||||
'price' => !DISCUZ_DIRECTPAY && $notify['price'] ? $notify['price'] : $notify['total_fee'],
|
||||
'trade_no' => $notify['trade_no'],
|
||||
'notify' => 'success',
|
||||
'location' => $location
|
||||
);
|
||||
} else {
|
||||
return array(
|
||||
'validator' => FALSE,
|
||||
'notify' => 'fail',
|
||||
'location' => $location
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function trade_getorderurl($orderid) {
|
||||
return 'https://www.alipay.com/trade/query_trade_detail.htm?trade_no='.$orderid;
|
||||
}
|
||||
|
||||
function trade_typestatus($method, $status = -1) {
|
||||
switch($method) {
|
||||
case 'buytrades' : $methodvalue = array(1, 5, 11, 12);break;
|
||||
case 'selltrades' : $methodvalue = array(2, 4, 10, 13);break;
|
||||
case 'successtrades' : $methodvalue = array(7);break;
|
||||
case 'tradingtrades' : $methodvalue = array(1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16);break;
|
||||
case 'closedtrades' : $methodvalue = array(8, 17);break;
|
||||
case 'refundsuccess' : $methodvalue = array(17);break;
|
||||
case 'refundtrades' : $methodvalue = array(14, 15, 16, 17, 18);break;
|
||||
case 'unstarttrades' : $methodvalue = array(0);break;
|
||||
case 'eccredittrades' : $methodvalue = array(7, 17);break;
|
||||
}
|
||||
return $status != -1 ? in_array($status, $methodvalue) : $methodvalue;
|
||||
}
|
||||
|
||||
function trade_getstatus($key, $method = 2) {
|
||||
$language = lang('forum/misc');
|
||||
$status[1] = array(
|
||||
'WAIT_BUYER_PAY' => 1,
|
||||
'WAIT_SELLER_CONFIRM_TRADE' => 2,
|
||||
'WAIT_SYS_CONFIRM_PAY' => 3,
|
||||
'WAIT_SELLER_SEND_GOODS' => 4,
|
||||
'WAIT_BUYER_CONFIRM_GOODS' => 5,
|
||||
'WAIT_SYS_PAY_SELLER' => 6,
|
||||
'TRADE_FINISHED' => 7,
|
||||
'TRADE_CLOSED' => 8,
|
||||
'WAIT_SELLER_AGREE' => 10,
|
||||
'SELLER_REFUSE_BUYER' => 11,
|
||||
'WAIT_BUYER_RETURN_GOODS' => 12,
|
||||
'WAIT_SELLER_CONFIRM_GOODS' => 13,
|
||||
'WAIT_ALIPAY_REFUND' => 14,
|
||||
'ALIPAY_CHECK' => 15,
|
||||
'OVERED_REFUND' => 16,
|
||||
'REFUND_SUCCESS' => 17,
|
||||
'REFUND_CLOSED' => 18
|
||||
);
|
||||
$status[2] = array(
|
||||
0 => $language['trade_unstart'],
|
||||
1 => $language['trade_waitbuyerpay'],
|
||||
2 => $language['trade_waitsellerconfirm'],
|
||||
3 => $language['trade_sysconfirmpay'],
|
||||
4 => $language['trade_waitsellersend'],
|
||||
5 => $language['trade_waitbuyerconfirm'],
|
||||
6 => $language['trade_syspayseller'],
|
||||
7 => $language['trade_finished'],
|
||||
8 => $language['trade_closed'],
|
||||
10 => $language['trade_waitselleragree'],
|
||||
11 => $language['trade_sellerrefusebuyer'],
|
||||
12 => $language['trade_waitbuyerreturn'],
|
||||
13 => $language['trade_waitsellerconfirmgoods'],
|
||||
14 => $language['trade_waitalipayrefund'],
|
||||
15 => $language['trade_alipaycheck'],
|
||||
16 => $language['trade_overedrefund'],
|
||||
17 => $language['trade_refundsuccess'],
|
||||
18 => $language['trade_refundclosed']
|
||||
);
|
||||
return $method == -1 ? $status[2] : $status[$method][$key];
|
||||
}
|
||||
|
||||
function trade_setprice($data, &$price, &$pay, &$transportfee) {
|
||||
if($data['transport'] == 1) {
|
||||
$pay['transport'] = 'SELLER_PAY';
|
||||
} elseif($data['transport'] == 2) {
|
||||
$pay['transport'] = 'BUYER_PAY';
|
||||
} elseif($data['transport'] == 3) {
|
||||
$pay['logistics_type'] = 'VIRTUAL';
|
||||
} else {
|
||||
$pay['transport'] = 'BUYER_PAY_AFTER_RECEIVE';
|
||||
}
|
||||
|
||||
if($data['transport'] != 3) {
|
||||
if($data['fee'] == 1) {
|
||||
$pay['logistics_type'] = 'POST';
|
||||
$pay['logistics_fee'] = $data['trade']['ordinaryfee'];
|
||||
if($data['transport'] == 2) {
|
||||
$price = $price + $data['trade']['ordinaryfee'];
|
||||
$transportfee = $data['trade']['ordinaryfee'];
|
||||
}
|
||||
} elseif($data['fee'] == 2) {
|
||||
$pay['logistics_type'] = 'EMS';
|
||||
$pay['logistics_fee'] = $data['trade']['emsfee'];
|
||||
if($data['transport'] == 2) {
|
||||
$price = $price + $data['trade']['emsfee'];
|
||||
$transportfee = $data['trade']['emsfee'];
|
||||
}
|
||||
} else {
|
||||
$pay['logistics_type'] = 'EXPRESS';
|
||||
$pay['logistics_fee'] = $data['trade']['expressfee'];
|
||||
if($data['transport'] == 2) {
|
||||
$price = $price + $data['trade']['expressfee'];
|
||||
$transportfee = $data['trade']['expressfee'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
582
api/trade/api_tenpay.php
Normal file
582
api/trade/api_tenpay.php
Normal file
@@ -0,0 +1,582 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Discuz!] (C)2001-2099 Comsenz Inc.
|
||||
* This is NOT a freeware, use is subject to license terms
|
||||
*
|
||||
* $Id: api_tenpay.php 32222 2012-12-03 02:28:43Z monkey $
|
||||
*/
|
||||
|
||||
|
||||
define('IN_API', true);
|
||||
define('CURSCRIPT', 'api');
|
||||
|
||||
if(!defined('IN_DISCUZ')) {
|
||||
exit('Access Denied');
|
||||
}
|
||||
|
||||
define('DISCUZ_PARTNER', $_G['setting']['ec_tenpay_bargainor']);
|
||||
define('DISCUZ_SECURITYCODE', $_G['setting']['ec_tenpay_key']);
|
||||
define('DISCUZ_AGENTID', '1204737401');
|
||||
|
||||
define('DISCUZ_TENPAY_OPENTRANS_CHNID', $_G['setting']['ec_tenpay_opentrans_chnid']);
|
||||
define('DISCUZ_TENPAY_OPENTRANS_KEY', $_G['setting']['ec_tenpay_opentrans_key']);
|
||||
|
||||
define('STATUS_SELLER_SEND', 3);
|
||||
define('STATUS_WAIT_BUYER', 4);
|
||||
define('STATUS_TRADE_SUCCESS', 5);
|
||||
define('STATUS_REFUND_CLOSE', 9);
|
||||
|
||||
class RequestHandler {
|
||||
|
||||
var $gateUrl;
|
||||
|
||||
var $key;
|
||||
|
||||
var $parameters;
|
||||
|
||||
var $debugInfo;
|
||||
|
||||
function __construct() {
|
||||
$this->RequestHandler();
|
||||
}
|
||||
|
||||
function RequestHandler() {
|
||||
$this->gateUrl = "https://www.tenpay.com/cgi-bin/med/show_opentrans.cgi";
|
||||
$this->key = "";
|
||||
$this->parameters = array();
|
||||
$this->debugInfo = "";
|
||||
}
|
||||
|
||||
function init() {
|
||||
}
|
||||
|
||||
function getGateURL() {
|
||||
return $this->gateUrl;
|
||||
}
|
||||
|
||||
function setGateURL($gateUrl) {
|
||||
$this->gateUrl = $gateUrl;
|
||||
}
|
||||
|
||||
function getKey() {
|
||||
return $this->key;
|
||||
}
|
||||
|
||||
function setKey($key) {
|
||||
$this->key = $key;
|
||||
}
|
||||
|
||||
function getParameter($parameter) {
|
||||
return $this->parameters[$parameter];
|
||||
}
|
||||
|
||||
function setParameter($parameter, $parameterValue) {
|
||||
$this->parameters[$parameter] = $parameterValue;
|
||||
}
|
||||
|
||||
function getAllParameters() {
|
||||
$this->createSign();
|
||||
|
||||
return $this->parameters;
|
||||
}
|
||||
|
||||
function getRequestURL() {
|
||||
$this->createSign();
|
||||
$reqPar = "";
|
||||
ksort($this->parameters);
|
||||
foreach($this->parameters as $k => $v) {
|
||||
$reqPar .= $k . "=" . urlencode($v) . "&";
|
||||
}
|
||||
|
||||
$reqPar = substr($reqPar, 0, strlen($reqPar)-1);
|
||||
$requestURL = $this->getGateURL() . "?" . $reqPar;
|
||||
return $requestURL;
|
||||
|
||||
}
|
||||
|
||||
function getDebugInfo() {
|
||||
return $this->debugInfo;
|
||||
}
|
||||
|
||||
function doSend() {
|
||||
header("Location:" . $this->getRequestURL());
|
||||
exit;
|
||||
}
|
||||
|
||||
function createSign() {
|
||||
$signPars = "";
|
||||
ksort($this->parameters);
|
||||
foreach($this->parameters as $k => $v) {
|
||||
if("" !== $v && "sign" !== $k) {
|
||||
$signPars .= $k . "=" . $v . "&";
|
||||
}
|
||||
}
|
||||
$signPars .= "key=" . $this->getKey();
|
||||
$sign = strtolower(md5($signPars));
|
||||
$this->setParameter("sign", $sign);
|
||||
$this->_setDebugInfo($signPars . " => sign:" . $sign);
|
||||
|
||||
}
|
||||
|
||||
function _setDebugInfo($debugInfo) {
|
||||
$this->debugInfo = $debugInfo;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class ResponseHandler {
|
||||
|
||||
var $key;
|
||||
|
||||
var $parameters;
|
||||
|
||||
var $debugInfo;
|
||||
|
||||
function __construct() {
|
||||
$this->ResponseHandler();
|
||||
}
|
||||
|
||||
function ResponseHandler() {
|
||||
$this->key = "";
|
||||
$this->parameters = array();
|
||||
$this->debugInfo = "";
|
||||
|
||||
foreach($_GET as $k => $v) {
|
||||
$this->setParameter($k, $v);
|
||||
}
|
||||
foreach($_POST as $k => $v) {
|
||||
$this->setParameter($k, $v);
|
||||
}
|
||||
}
|
||||
|
||||
function getKey() {
|
||||
return $this->key;
|
||||
}
|
||||
|
||||
function setKey($key) {
|
||||
$this->key = $key;
|
||||
}
|
||||
|
||||
function getParameter($parameter) {
|
||||
return $this->parameters[$parameter];
|
||||
}
|
||||
|
||||
function setParameter($parameter, $parameterValue) {
|
||||
$this->parameters[$parameter] = $parameterValue;
|
||||
}
|
||||
|
||||
function getAllParameters() {
|
||||
return $this->parameters;
|
||||
}
|
||||
|
||||
function isTenpaySign() {
|
||||
$signPars = "";
|
||||
|
||||
ksort($this->parameters);
|
||||
foreach($this->parameters as $k => $v) {
|
||||
if("sign" !== $k && "" !== $v) {
|
||||
$signPars .= $k . "=" . $v . "&";
|
||||
}
|
||||
}
|
||||
$signPars .= "key=" . $this->getKey();
|
||||
$sign = strtolower(md5($signPars));
|
||||
$tenpaySign = strtolower($this->getParameter("sign"));
|
||||
$this->_setDebugInfo($signPars . " => sign:" . $sign .
|
||||
" tenpaySign:" . $this->getParameter("sign"));
|
||||
|
||||
return $sign == $tenpaySign;
|
||||
|
||||
}
|
||||
|
||||
function getDebugInfo() {
|
||||
return $this->debugInfo;
|
||||
}
|
||||
|
||||
function _setDebugInfo($debugInfo) {
|
||||
$this->debugInfo = $debugInfo;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class MediPayRequestHandler extends RequestHandler {
|
||||
|
||||
function __construct() {
|
||||
$this->MediPayRequestHandler();
|
||||
}
|
||||
|
||||
function MediPayRequestHandler() {
|
||||
$this->setGateURL("https://www.tenpay.com/cgi-bin/med/show_opentrans.cgi");
|
||||
}
|
||||
|
||||
function init() {
|
||||
$this->setParameter("attach", "1");
|
||||
|
||||
$this->setParameter("chnid", "");
|
||||
|
||||
$this->setParameter("cmdno", "12");
|
||||
|
||||
$this->setParameter("encode_type", "1");
|
||||
|
||||
$this->setParameter("mch_desc", "");
|
||||
|
||||
$this->setParameter("mch_name", "");
|
||||
|
||||
$this->setParameter("mch_price", "");
|
||||
|
||||
$this->setParameter("mch_returl", "");
|
||||
|
||||
$this->setParameter("mch_type", "");
|
||||
|
||||
$this->setParameter("mch_vno", "");
|
||||
|
||||
$this->setParameter("need_buyerinfo", "");
|
||||
|
||||
$this->setParameter("seller", "");
|
||||
|
||||
$this->setParameter("show_url", "");
|
||||
|
||||
$this->setParameter("transport_desc", "");
|
||||
|
||||
$this->setParameter("transport_fee", "");
|
||||
|
||||
$this->setParameter("version", "2");
|
||||
|
||||
$this->setParameter("sign", "");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class MediPayResponseHandler extends ResponseHandler {
|
||||
|
||||
function doShow() {
|
||||
$strHtml = "<html><head>\r\n" .
|
||||
"<meta name=\"TENCENT_ONLINE_PAYMENT\" content=\"China TENCENT\">" .
|
||||
"</head><body></body></html>";
|
||||
|
||||
echo $strHtml;
|
||||
|
||||
exit;
|
||||
}
|
||||
function isTenpaySign() {
|
||||
|
||||
$signParameterArray = array(
|
||||
'attach',
|
||||
'buyer_id',
|
||||
'cft_tid',
|
||||
'chnid',
|
||||
'cmdno',
|
||||
'mch_vno',
|
||||
'retcode',
|
||||
'seller',
|
||||
'status',
|
||||
'total_fee',
|
||||
'trade_price',
|
||||
'transport_fee',
|
||||
'version'
|
||||
);
|
||||
|
||||
ksort($signParameterArray);
|
||||
|
||||
foreach($signParameterArray as $k ) {
|
||||
$v = $this->getParameter($k);
|
||||
if(isset($v)) {
|
||||
$signPars .= $k . "=" . urldecode($v) . "&";
|
||||
}
|
||||
}
|
||||
|
||||
$signPars .= "key=" . $this->getKey();
|
||||
|
||||
$sign = strtolower(md5($signPars));
|
||||
|
||||
$tenpaySign = strtolower($this->getParameter("sign"));
|
||||
|
||||
$this->_setDebugInfo($signPars . " => sign:" . $sign .
|
||||
" tenpaySign:" . $this->getParameter("sign"));
|
||||
|
||||
return $sign == $tenpaySign;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function credit_payurl($price, &$orderid, $bank = 'DEFAULT') {
|
||||
include_once DISCUZ_ROOT . './source/class/class_chinese.php';
|
||||
global $_G;
|
||||
|
||||
$date = dgmdate(TIMESTAMP, 'YmdHis');
|
||||
$suffix = dgmdate(TIMESTAMP, 'His').rand(1000, 9999);
|
||||
$transaction_id = DISCUZ_PARTNER.$date.$suffix;
|
||||
|
||||
$orderid = dgmdate(TIMESTAMP, 'YmdHis').random(14);
|
||||
|
||||
$chinese = new Chinese(strtoupper(CHARSET), 'GBK');
|
||||
$subject = $chinese->Convert(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']);
|
||||
|
||||
$reqHandler = new RequestHandler();
|
||||
$reqHandler->setGateURL("https://gw.tenpay.com/gateway/pay.htm");
|
||||
|
||||
$reqHandler->init();
|
||||
$reqHandler->setKey(DISCUZ_SECURITYCODE);
|
||||
|
||||
$reqHandler->setParameter("partner", DISCUZ_PARTNER);
|
||||
$reqHandler->setParameter("out_trade_no", $orderid);
|
||||
$reqHandler->setParameter("total_fee", $price * 100);
|
||||
$reqHandler->setParameter("return_url", $_G['siteurl'].'api/trade/notify_credit.php');
|
||||
$reqHandler->setParameter("notify_url", $_G['siteurl'].'api/trade/notify_credit.php');
|
||||
$reqHandler->setParameter("body", $subject);
|
||||
$reqHandler->setParameter("bank_type", $bank);
|
||||
|
||||
$reqHandler->setParameter("spbill_create_ip", $_G['clientip']);
|
||||
$reqHandler->setParameter("fee_type", "1");
|
||||
$reqHandler->setParameter("subject", $subject);
|
||||
|
||||
$reqHandler->setParameter("sign_type", "MD5");
|
||||
$reqHandler->setParameter("service_version", "1.0");
|
||||
$reqHandler->setParameter("input_charset", "GBK");
|
||||
$reqHandler->setParameter("sign_key_index", "1");
|
||||
|
||||
$reqHandler->setParameter("attach", "tenpay");
|
||||
$reqHandler->setParameter("time_start", $date);
|
||||
$reqHandler->setParameter("trade_mode","1");
|
||||
$reqHandler->setParameter("trans_type","1");
|
||||
$reqHandler->setParameter("agentid", DISCUZ_AGENTID);
|
||||
$reqHandler->setParameter("agent_type","2");
|
||||
|
||||
$reqUrl = $reqHandler->getRequestURL();
|
||||
return $reqUrl;
|
||||
}
|
||||
|
||||
function trade_payurl($pay, $trade, $tradelog) {
|
||||
global $_G;
|
||||
|
||||
$key = DISCUZ_TENPAY_OPENTRANS_KEY;
|
||||
|
||||
$chnid = DISCUZ_TENPAY_OPENTRANS_CHNID;
|
||||
|
||||
$seller = $trade['tenpayaccount'];
|
||||
|
||||
$mch_desc = $trade['subject'];
|
||||
|
||||
$mch_name = $trade['subject'];
|
||||
|
||||
$mch_price = $tradelog['baseprice'] * $tradelog['number'] * 100;
|
||||
|
||||
$mch_returl = $_G['siteurl'].'api/trade/notify_trade.php';
|
||||
|
||||
$mch_vno = $tradelog['orderid'];
|
||||
|
||||
$show_url = $_G['siteurl'].'api/trade/notify_trade.php';
|
||||
|
||||
$transport_desc = $pay['logistics_type'];
|
||||
|
||||
$transport_fee = $tradelog['transportfee'] * 100;
|
||||
|
||||
if(strtolower(CHARSET) == 'gbk') {
|
||||
$encode_type = '1';
|
||||
} else {
|
||||
$encode_type = '2';
|
||||
}
|
||||
|
||||
$mch_type = '1';
|
||||
$need_buyerinfo = '1';
|
||||
if($pay['logistics_type'] == 'VIRTUAL') {
|
||||
$mch_type = '2';
|
||||
$need_buyerinfo = '2';
|
||||
}
|
||||
|
||||
$reqHandler = new MediPayRequestHandler();
|
||||
$reqHandler->init();
|
||||
$reqHandler->setKey($key);
|
||||
|
||||
$reqHandler->setParameter("chnid", $chnid);
|
||||
$reqHandler->setParameter("encode_type", $encode_type);
|
||||
$reqHandler->setParameter("mch_desc", $mch_desc);
|
||||
$reqHandler->setParameter("mch_name", $mch_name);
|
||||
$reqHandler->setParameter("mch_price", $mch_price);
|
||||
$reqHandler->setParameter("mch_returl", $mch_returl);
|
||||
$reqHandler->setParameter("mch_type", $mch_type);
|
||||
$reqHandler->setParameter("mch_vno", $mch_vno);
|
||||
$reqHandler->setParameter("need_buyerinfo", $need_buyerinfo);
|
||||
$reqHandler->setParameter("seller", $seller);
|
||||
$reqHandler->setParameter("show_url", $show_url);
|
||||
$reqHandler->setParameter("transport_desc", $transport_desc);
|
||||
$reqHandler->setParameter("transport_fee", $transport_fee);
|
||||
$reqHandler->setParameter('attach', 'tenpay');
|
||||
|
||||
$reqUrl = $reqHandler->getRequestURL();
|
||||
return $reqUrl;
|
||||
}
|
||||
|
||||
|
||||
function invite_payurl($amount, $price, &$orderid, $bank = 'DEFAULT') {
|
||||
include_once DISCUZ_ROOT . './source/class/class_chinese.php';
|
||||
global $_G;
|
||||
|
||||
$date = dgmdate(TIMESTAMP, 'YmdHis');
|
||||
$suffix = dgmdate(TIMESTAMP, 'His').rand(1000, 9999);
|
||||
$transaction_id = DISCUZ_PARTNER.$date.$suffix;
|
||||
|
||||
$orderid = dgmdate(TIMESTAMP, 'YmdHis').random(14);
|
||||
|
||||
$chinese = new Chinese(strtoupper(CHARSET), 'GBK');
|
||||
$subject = $chinese->Convert(lang('forum/misc', 'invite_forum_payment').' '.intval($amount).' '.lang('forum/misc', 'invite_forum_payment_unit'));
|
||||
|
||||
$reqHandler = new RequestHandler();
|
||||
$reqHandler->setGateURL("https://gw.tenpay.com/gateway/pay.htm");
|
||||
|
||||
$reqHandler->init();
|
||||
$reqHandler->setKey(DISCUZ_SECURITYCODE);
|
||||
|
||||
$reqHandler->setParameter("partner", DISCUZ_PARTNER);
|
||||
$reqHandler->setParameter("out_trade_no", $orderid);
|
||||
$reqHandler->setParameter("total_fee", $price * 100);
|
||||
$reqHandler->setParameter("return_url", $_G['siteurl'].'api/trade/notify_invite.php');
|
||||
$reqHandler->setParameter("notify_url", $_G['siteurl'].'api/trade/notify_invite.php');
|
||||
$reqHandler->setParameter("body", $subject);
|
||||
$reqHandler->setParameter("bank_type", $bank);
|
||||
|
||||
$reqHandler->setParameter("spbill_create_ip", $_G['clientip']);
|
||||
$reqHandler->setParameter("fee_type", "1");
|
||||
$reqHandler->setParameter("subject", $subject);
|
||||
|
||||
$reqHandler->setParameter("sign_type", "MD5");
|
||||
$reqHandler->setParameter("service_version", "1.0");
|
||||
$reqHandler->setParameter("input_charset", "GBK");
|
||||
$reqHandler->setParameter("sign_key_index", "1");
|
||||
|
||||
$reqHandler->setParameter("attach", "tenpay");
|
||||
$reqHandler->setParameter("time_start", $date);
|
||||
$reqHandler->setParameter("trade_mode","1");
|
||||
$reqHandler->setParameter("trans_type","1");
|
||||
$reqHandler->setParameter("agentid", DISCUZ_AGENTID);
|
||||
$reqHandler->setParameter("agent_type","2");
|
||||
|
||||
$reqUrl = $reqHandler->getRequestURL();
|
||||
return $reqUrl;
|
||||
}
|
||||
function trade_notifycheck($type) {
|
||||
global $_G;
|
||||
|
||||
if($type == 'credit' || $type == 'invite') {
|
||||
if(!DISCUZ_SECURITYCODE) {
|
||||
exit('Access Denied');
|
||||
}
|
||||
$resHandler = new ResponseHandler();
|
||||
$resHandler->setKey(DISCUZ_SECURITYCODE);
|
||||
|
||||
$resHandler->setParameter("bankname", "");
|
||||
} else {
|
||||
if(!DISCUZ_TENPAY_OPENTRANS_KEY) {
|
||||
exit('Access Denied');
|
||||
}
|
||||
$resHandler = new MediPayResponseHandler();
|
||||
$resHandler->setKey(DISCUZ_TENPAY_OPENTRANS_KEY);
|
||||
}
|
||||
if($type == 'credit' || $type == 'invite') {
|
||||
if($resHandler->isTenpaySign() && DISCUZ_PARTNER == $_GET['partner']) {
|
||||
return array(
|
||||
'validator' => isset($_GET['trade_state']) ? !$_GET['trade_state'] : 0,
|
||||
'order_no' => $_GET['out_trade_no'],
|
||||
'trade_no' => isset($_GET['transaction_id']) ? $_GET['transaction_id'] : '',
|
||||
'price' => $_GET['total_fee'] / 100,
|
||||
'bargainor_id' => $_GET['partner'],
|
||||
'location' => true,
|
||||
);
|
||||
}
|
||||
} elseif($type == 'trade') {
|
||||
if($resHandler->isTenpaySign()) {
|
||||
return array(
|
||||
'validator' => $resHandler->getParameter('retcode') == '0',
|
||||
'order_no' => $resHandler->getParameter('mch_vno'),
|
||||
'trade_no' => $resHandler->getParameter('cft_tid'),
|
||||
'price' => $resHandler->getParameter('total_fee') / 100,
|
||||
'status' => $resHandler->getParameter('status'),
|
||||
'location' => true,
|
||||
);
|
||||
}
|
||||
} else {
|
||||
return array(
|
||||
'validator' => FALSE,
|
||||
'location' => 'forum.php?mod=memcp&action=credits&operation=addfunds&return=fail'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function trade_setprice($data, &$price, &$pay, &$transportfee) {
|
||||
if($data['transport'] == 3) {
|
||||
$pay['logistics_type'] = 'VIRTUAL';
|
||||
}
|
||||
|
||||
if($data['transport'] != 3) {
|
||||
if($data['fee'] == 1) {
|
||||
$pay['logistics_type'] = 'POST';
|
||||
$pay['logistics_fee'] = $data['trade']['ordinaryfee'];
|
||||
if($data['transport'] == 2) {
|
||||
$price = $price + $data['trade']['ordinaryfee'];
|
||||
$transportfee = $data['trade']['ordinaryfee'];
|
||||
}
|
||||
} elseif($data['fee'] == 2) {
|
||||
$pay['logistics_type'] = 'EMS';
|
||||
$pay['logistics_fee'] = $data['trade']['emsfee'];
|
||||
if($data['transport'] == 2) {
|
||||
$price = $price + $data['trade']['emsfee'];
|
||||
$transportfee = $data['trade']['emsfee'];
|
||||
}
|
||||
} else {
|
||||
$pay['logistics_type'] = 'EXPRESS';
|
||||
$pay['logistics_fee'] = $data['trade']['expressfee'];
|
||||
if($data['transport'] == 2) {
|
||||
$price = $price + $data['trade']['expressfee'];
|
||||
$transportfee = $data['trade']['expressfee'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function trade_getorderurl($orderid) {
|
||||
return "https://www.tenpay.com/med/tradeDetail.shtml?b=1&trans_id=$orderid";
|
||||
}
|
||||
|
||||
function trade_typestatus($method, $status = -1) {
|
||||
switch($method) {
|
||||
case 'buytrades' : $methodvalue = array(1, 3);break;
|
||||
case 'selltrades' : $methodvalue = array(2, 4);break;
|
||||
case 'successtrades' : $methodvalue = array(5);break;
|
||||
case 'tradingtrades' : $methodvalue = array(1, 2, 3, 4);break;
|
||||
case 'closedtrades' : $methodvalue = array(6, 10);break;
|
||||
case 'refundsuccess' : $methodvalue = array(9);break;
|
||||
case 'refundtrades' : $methodvalue = array(9, 10);break;
|
||||
case 'unstarttrades' : $methodvalue = array(0);break;
|
||||
}
|
||||
return $status != -1 ? in_array($status, $methodvalue) : $methodvalue;
|
||||
}
|
||||
|
||||
function trade_getstatus($key, $method = 2) {
|
||||
$language = lang('forum/misc');
|
||||
$status[1] = array(
|
||||
'WAIT_BUYER_PAY' => 1,
|
||||
'WAIT_SELLER_CONFIRM_TRADE' => 2,
|
||||
'WAIT_SELLER_SEND_GOODS' => 3,
|
||||
'WAIT_BUYER_CONFIRM_GOODS' => 4,
|
||||
'TRADE_FINISHED' => 5,
|
||||
'TRADE_CLOSED' => 6,
|
||||
'REFUND_SUCCESS' => 9,
|
||||
'REFUND_CLOSED' => 10,
|
||||
);
|
||||
$status[2] = array(
|
||||
0 => $language['trade_unstart'],
|
||||
1 => $language['trade_waitbuyerpay'],
|
||||
2 => $language['trade_waitsellerconfirm'],
|
||||
3 => $language['trade_waitsellersend'],
|
||||
4 => $language['trade_waitbuyerconfirm'],
|
||||
5 => $language['trade_finished'],
|
||||
6 => $language['trade_closed'],
|
||||
9 => $language['trade_refundsuccess'],
|
||||
10 => $language['trade_refundclosed']
|
||||
);
|
||||
return $method == -1 ? $status[2] : $status[$method][$key];
|
||||
}
|
||||
|
||||
?>
|
0
api/trade/index.htm
Normal file
0
api/trade/index.htm
Normal file
73
api/trade/notify_credit.php
Normal file
73
api/trade/notify_credit.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Discuz!] (C)2001-2099 Comsenz Inc.
|
||||
* This is NOT a freeware, use is subject to license terms
|
||||
*
|
||||
* $Id: notify_credit.php 34251 2013-11-25 03:10:11Z nemohou $
|
||||
*/
|
||||
|
||||
define('IN_API', true);
|
||||
define('CURSCRIPT', 'api');
|
||||
define('DISABLEXSSCHECK', true);
|
||||
|
||||
require '../../source/class/class_core.php';
|
||||
require '../../source/function/function_forum.php';
|
||||
|
||||
$discuz = C::app();
|
||||
$discuz->init();
|
||||
|
||||
$apitype = empty($_GET['attach']) || !preg_match('/^[a-z0-9]+$/i', $_GET['attach']) ? 'alipay' : $_GET['attach'];
|
||||
require_once DISCUZ_ROOT.'./api/trade/api_'.$apitype.'.php';
|
||||
$PHP_SELF = $_SERVER['PHP_SELF'];
|
||||
$_G['siteurl'] = dhtmlspecialchars($_G['scheme'].'://'.$_SERVER['HTTP_HOST'].preg_replace("/\/+(api\/trade)?\/*$/i", '', substr($PHP_SELF, 0, strrpos($PHP_SELF, '/'))).'/');
|
||||
$notifydata = trade_notifycheck('credit');
|
||||
|
||||
if($notifydata['validator']) {
|
||||
|
||||
$orderid = $notifydata['order_no'];
|
||||
$postprice = $notifydata['price'];
|
||||
$order = C::t('forum_order')->fetch($orderid);
|
||||
$order = array_merge($order, C::t('common_member')->fetch_by_username($order['uid']));
|
||||
if($order && floatval($postprice) == floatval($order['price']) && ($apitype == 'tenpay' || strtolower($_G['setting']['ec_account']) == strtolower($_REQUEST['seller_email']))) {
|
||||
|
||||
if($order['status'] == 1) {
|
||||
C::t('forum_order')->update($orderid, array('status' => '2', 'buyer' => "{$notifydata['trade_no']}\t$apitype", 'confirmdate' => $_G['timestamp']));
|
||||
updatemembercount($order['uid'], array($_G['setting']['creditstrans'] => $order['amount']), 1, 'AFD', $order['uid']);
|
||||
updatecreditbyaction($action, $uid = 0, $extrasql = array(), $needle = '', $coef = 1, $update = 1, $fid = 0);
|
||||
C::t('forum_order')->delete_by_submitdate($_G['timestamp']-60*86400);
|
||||
$submitdate = dgmdate($order['submitdate']);
|
||||
$confirmdate = dgmdate(TIMESTAMP);
|
||||
|
||||
notification_add($order['uid'], 'credit', 'addfunds', array(
|
||||
'orderid' => $order['orderid'],
|
||||
'price' => $order['price'],
|
||||
'value' => $_G['setting']['extcredits'][$_G['setting']['creditstrans']]['title'].' '.$order['amount'].' '.$_G['setting']['extcredits'][$_G['setting']['creditstrans']]['unit']
|
||||
), 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if($notifydata['location']) {
|
||||
$url = rawurlencode('home.php?mod=spacecp&ac=credit');
|
||||
if($apitype == 'tenpay') {
|
||||
echo <<<EOS
|
||||
<meta name="TENCENT_ONLINE_PAYMENT" content="China TENCENT">
|
||||
<html>
|
||||
<body>
|
||||
<script language="javascript" type="text/javascript">
|
||||
window.location.href='{$_G['siteurl']}forum.php?mod=misc&action=paysucceed';
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
EOS;
|
||||
} else {
|
||||
dheader('location: '.$_G['siteurl'].'forum.php?mod=misc&action=paysucceed');
|
||||
}
|
||||
} else {
|
||||
exit($notifydata['notify']);
|
||||
}
|
||||
|
||||
?>
|
90
api/trade/notify_invite.php
Normal file
90
api/trade/notify_invite.php
Normal file
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Discuz!] (C)2001-2099 Comsenz Inc.
|
||||
* This is NOT a freeware, use is subject to license terms
|
||||
*
|
||||
* $Id: notify_invite.php 34251 2013-11-25 03:10:11Z nemohou $
|
||||
*/
|
||||
|
||||
define('IN_API', true);
|
||||
define('CURSCRIPT', 'api');
|
||||
define('DISABLEXSSCHECK', true);
|
||||
|
||||
require '../../source/class/class_core.php';
|
||||
require '../../source/function/function_forum.php';
|
||||
|
||||
$discuz = C::app();
|
||||
$discuz->init();
|
||||
|
||||
$apitype = empty($_GET['attach']) || !preg_match('/^[a-z0-9]+$/i', $_GET['attach']) ? 'alipay' : $_GET['attach'];
|
||||
require_once DISCUZ_ROOT.'./api/trade/api_'.$apitype.'.php';
|
||||
$PHP_SELF = $_SERVER['PHP_SELF'];
|
||||
$_G['siteurl'] = dhtmlspecialchars($_G['scheme'].'://'.$_SERVER['HTTP_HOST'].preg_replace("/\/+(api\/trade)?\/*$/i", '', substr($PHP_SELF, 0, strrpos($PHP_SELF, '/'))).'/');
|
||||
$notifydata = trade_notifycheck('invite');
|
||||
if($notifydata['validator']) {
|
||||
$orderid = $notifydata['order_no'];
|
||||
$postprice = $notifydata['price'];
|
||||
$order = C::t('forum_order')->fetch($orderid);
|
||||
if($order && floatval($postprice) == floatval($order['price']) && ($apitype == 'tenpay' || $_G['setting']['ec_account'] == $_REQUEST['seller_email'])) {
|
||||
|
||||
if($order['status'] == 1) {
|
||||
C::t('forum_order')->update($orderid, array('status' => '2', 'buyer' => "{$notifydata['trade_no']}\t$apitype", 'confirmdate' => $_G['timestamp']));
|
||||
$codes = $codetext = array();
|
||||
$dateline = TIMESTAMP;
|
||||
for($i=0; $i<$order['amount']; $i++) {
|
||||
$code = strtolower(random(6));
|
||||
$codetext[] = $code;
|
||||
$codes[] = "('0', '$code', '$dateline', '".($_G['group']['maxinviteday']?($_G['timestamp']+$_G['group']['maxinviteday']*24*3600):$_G['timestamp']+86400*10)."', '{$order['email']}', '{$_G['clientip']}', '$orderid')";
|
||||
$invitedata = array(
|
||||
'uid' => 0,
|
||||
'code' => $code,
|
||||
'dateline' => $dateline,
|
||||
'endtime' => $_G['group']['maxinviteday'] ? ($_G['timestamp']+$_G['group']['maxinviteday']*24*3600) : $_G['timestamp']+86400*10,
|
||||
'email' => $order['email'],
|
||||
'inviteip' => $_G['clientip'],
|
||||
'orderid' => $orderid
|
||||
);
|
||||
C::t('common_invite')->insert($invitedata);
|
||||
}
|
||||
C::t('forum_order')->delete_by_submitdate($_G['timestamp']-60*86400);
|
||||
|
||||
$submitdate = dgmdate($order['submitdate']);
|
||||
$confirmdate = dgmdate(TIMESTAMP);
|
||||
if(!function_exists('sendmail')) {
|
||||
include libfile('function/mail');
|
||||
}
|
||||
$add_member_subject = $_G['setting']['bbname'].' - '.lang('forum/misc', 'invite_payment');
|
||||
$add_member_message = lang('email', 'invite_payment_email_message', array(
|
||||
'orderid' => $order['orderid'],
|
||||
'codetext' => implode('<br />', $codetext),
|
||||
'siteurl' => $_G['siteurl'],
|
||||
'bbname' => $_G['setting']['bbname'],
|
||||
));
|
||||
if(!sendmail($order['email'], $add_member_subject, $add_member_message)) {
|
||||
runlog('sendmail', "{$order['email']} sendmail failed.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if($notifydata['location']) {
|
||||
if($apitype == 'tenpay') {
|
||||
echo <<<EOS
|
||||
<meta name="TENCENT_ONLINE_PAYMENT" content="China TENCENT">
|
||||
<html>
|
||||
<body>
|
||||
<script language="javascript" type="text/javascript">
|
||||
window.location.href='{$_G['siteurl']}misc.php?mod=buyinvitecode&action=paysucceed&orderid=$orderid';
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
EOS;
|
||||
} else {
|
||||
dheader('location: '.$_G['siteurl'].'misc.php?mod=buyinvitecode&action=paysucceed&orderid='.$orderid);
|
||||
}
|
||||
} else {
|
||||
exit($notifydata['notify']);
|
||||
}
|
||||
|
||||
?>
|
118
api/trade/notify_trade.php
Normal file
118
api/trade/notify_trade.php
Normal file
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Discuz!] (C)2001-2099 Comsenz Inc.
|
||||
* This is NOT a freeware, use is subject to license terms
|
||||
*
|
||||
* $Id: notify_trade.php 34251 2013-11-25 03:10:11Z nemohou $
|
||||
*/
|
||||
|
||||
define('IN_API', true);
|
||||
define('CURSCRIPT', 'api');
|
||||
define('DISABLEXSSCHECK', true);
|
||||
|
||||
require '../../source/class/class_core.php';
|
||||
require '../../source/function/function_forum.php';
|
||||
|
||||
$discuz = C::app();
|
||||
$discuz->init();
|
||||
|
||||
$apitype = empty($_GET['attach']) || !preg_match('/^[a-z0-9]+$/i', $_GET['attach']) ? 'alipay' : $_GET['attach'];
|
||||
require_once DISCUZ_ROOT.'./api/trade/api_' . $apitype . '.php';
|
||||
|
||||
$PHP_SELF = $_SERVER['PHP_SELF'];
|
||||
$_G['siteurl'] = dhtmlspecialchars($_G['scheme'].'://'.$_SERVER['HTTP_HOST'].preg_replace("/\/+(api\/trade)?\/*$/i", '', substr($PHP_SELF, 0, strrpos($PHP_SELF, '/'))).'/');
|
||||
|
||||
$notifydata = trade_notifycheck('trade');
|
||||
|
||||
if($notifydata['validator']) {
|
||||
|
||||
$orderid = $notifydata['order_no'];
|
||||
|
||||
if($orderid) {
|
||||
|
||||
$tradelog = C::t('forum_tradelog')->fetch($orderid);
|
||||
|
||||
if($tradelog && $tradelog['status'] != STATUS_TRADE_SUCCESS && $tradelog['status'] != STATUS_REFUND_CLOSE && ($apitype == 'tenpay' || $tradelog['selleraccount'] == $_REQUEST['seller_email'])) {
|
||||
$status = $notifydata['status'];
|
||||
C::t('forum_tradelog')->update($orderid, array(
|
||||
'status' => $status,
|
||||
'lastupdate' => $_G['timestamp'],
|
||||
'tradeno' => $notifydata['trade_no']
|
||||
));
|
||||
if($status != $tradelog['status']) {
|
||||
|
||||
if($status == STATUS_SELLER_SEND) {
|
||||
|
||||
notification_add($tradelog['sellerid'], 'goods', 'trade_seller_send', array(
|
||||
'buyerid' => $tradelog['buyerid'],
|
||||
'buyer' => $tradelog['buyer'],
|
||||
'orderid' => $orderid,
|
||||
'subject' => $tradelog['subject']
|
||||
));
|
||||
|
||||
} elseif($status == STATUS_WAIT_BUYER) {
|
||||
|
||||
notification_add($tradelog['buyerid'], 'goods', 'trade_buyer_confirm', array(
|
||||
'sellerid' => $tradelog['sellerid'],
|
||||
'seller' => $tradelog['seller'],
|
||||
'orderid' => $orderid,
|
||||
'subject' => $tradelog['subject']
|
||||
));
|
||||
|
||||
} elseif($status == STATUS_TRADE_SUCCESS) {
|
||||
|
||||
if($_G['setting']['creditstransextra'][5] != -1 && $tradelog['basecredit']) {
|
||||
$netcredit = round($tradelog['number'] * $tradelog['basecredit'] * (1 - $_G['setting']['creditstax']));
|
||||
updatemembercount($tradelog['sellerid'], array($_G['setting']['creditstransextra'][5] => $netcredit));
|
||||
} else {
|
||||
$netcredit = 0;
|
||||
}
|
||||
C::t('forum_trade')->update_trade($tradelog['tid'], $tradelog['pid'], array('lastbuyer' => $tradelog['buyer'], 'lastupdate' => $_G['timestamp']));
|
||||
C::t('forum_trade')->update_counter($tradelog['tid'], $tradelog['pid'], $tradelog['number'], $tradelog['price'], $netcredit);
|
||||
|
||||
updatecreditbyaction('tradefinished', $tradelog['sellerid']);
|
||||
updatecreditbyaction('tradefinished', $tradelog['buyerid']);
|
||||
|
||||
notification_add($tradelog['sellerid'], 'goods', 'trade_success', array(
|
||||
'orderid' => $orderid,
|
||||
'subject' => $tradelog['subject']
|
||||
));
|
||||
notification_add($tradelog['buyerid'], 'goods', 'trade_success', array(
|
||||
'orderid' => $orderid,
|
||||
'subject' => $tradelog['subject']
|
||||
));
|
||||
|
||||
} elseif($status == STATUS_REFUND_CLOSE) {
|
||||
|
||||
C::t('forum_trade')->update_counter($tradelog['tid'], $tradelog['pid'], 0, 0, 0, $tradelog['number']);
|
||||
notification_add($tradelog['sellerid'], 'goods', 'trade_fefund_success', array(
|
||||
'orderid' => $orderid,
|
||||
'subject' => $tradelog['subject']
|
||||
));
|
||||
notification_add($tradelog['buyerid'], 'goods', 'trade_fefund_success', array(
|
||||
'orderid' => $orderid,
|
||||
'subject' => $tradelog['subject']
|
||||
));
|
||||
if($_G['setting']['creditstrans'] && $tradelog['buyerid']) {
|
||||
updatemembercount($tradelog['buyerid'], array($_G['setting']['creditstrans'] => $tradelog['buyercredits']));
|
||||
}
|
||||
if($_G['setting']['creditstransextra'][5] != -1 && $tradelog['basecredit'] && $tradelog['buyerid']) {
|
||||
$credit = $tradelog['number'] * $tradelog['basecredit'];
|
||||
updatemembercount($tradelog['buyerid'], array($_G['setting']['creditstransextra'][5] => $credit));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if($notifydata['location']) {
|
||||
dheader('location: '.$_G['siteurl'].'forum.php?mod=misc&action=paysucceed&orderid='.$orderid);
|
||||
} else {
|
||||
exit($notifydata['notify']);
|
||||
}
|
||||
|
||||
?>
|
Reference in New Issue
Block a user