用織夢(mèng)做了個(gè)裝飾網(wǎng)站,客戶(hù)要求財(cái)付通支付,上網(wǎng)找了下,不是要買(mǎi)就是要錢(qián),只有自己寫(xiě)了。
代碼如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
<?php
if(!defined('DEDEINC')) exit('Request Error!');
/**
*財(cái)付通接口類(lèi)
*/
class tenpay
{
var $dsql;
var $mid;
var $reqURL_onLine = "http://www.tenpay.com";
var $return_url='/plus/carbuyaction.php?dopost=return'; //返回處理地址
/**
* 構(gòu)造函數(shù)
*
* @access public
* @param
*
* @return void
*/
function tenpay()
{
global $dsql;
$this->dsql = $dsql;
}
function __construct()
{
$this->tenpay();
}
/**
* 設(shè)定接口會(huì)送地址
*
* 例如: $this->SetReturnUrl($cfg_basehost."/tuangou/control/index.php?ac=pay&orderid=".$p2_Order)
*
* @param string $returnurl 會(huì)送地址
* @return void
*/
function SetReturnUrl($returnurl='')
{
if (!empty($returnurl))
{
$this->return_url = $returnurl;
}
}
/**
* 生成支付代碼
* @param array $order 訂單信息
* @param array $payment 支付方式信息
*/
function GetCode($order, $payment)
{
global $cfg_basehost,$cfg_cmspath;
//對(duì)于二級(jí)目錄的處理
if(!empty($cfg_cmspath)) $cfg_basehost = $cfg_basehost.'/'.$cfg_cmspath;
$partner = $payment['tenpay_account'];
$out_trade_no = $order['out_trade_no'];
$total_fee = floatval($order['price']) * 100;
$body = $order['out_trade_no'];
$attach = '';
$bank_type = 'DEFAULT';
/* 交易類(lèi)型:2、虛擬交易,1、實(shí)物交易 */
$trans_type = 1;
$trade_mode=empty($payment['tenpay_pay_method']) ? '1' : $payment['tenpay_pay_method'];
$parameter = array(
'partner' => $partner,
'out_trade_no' => $out_trade_no, //訂單號(hào)
'total_fee' => $total_fee, //總金額
'notify_url' => $cfg_basehost.$this->return_url."&code=".$payment['code'], //返回地址
'return_url' => $cfg_basehost.$this->return_url."&code=".$payment['code'], //提醒地址
'body' => $body, //交易描述
'bank_type' => $bank_type, //交易類(lèi)型 默認(rèn)財(cái)付通
//用戶(hù)ip
'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], //交易ip
'fee_type' => '1', //幣種 1 人民幣
'subject' => $body, //商品名稱(chēng)
//系統(tǒng)可選參數(shù)
'sign_type' => 'MD5', //加密方式
'service_version' => '1.0', //接口版本號(hào) 默認(rèn)1.0
'input_charset' => 'UTF-8', //系統(tǒng)編碼 'GBK'
'sign_key_index' => '1', //密鑰序號(hào)
//業(yè)務(wù)可選參數(shù)
'attach' => $attach, //附加數(shù)據(jù) 原樣返回 默認(rèn)為空
'product_fee' => '', //商品費(fèi)用
'transport_fee' => '0', //物流費(fèi)用
'time_start' => date("YmdHis"), //訂單生成時(shí)間 date("YmdHis")
'time_expire' => '', //訂單失效時(shí)間
'buyer_id' => '', //買(mǎi)方財(cái)付通帳號(hào)
'goods_tag' => '', //商品標(biāo)記
'trade_mode' => $trade_mode, //交易模式(1.即時(shí)到帳模式,2.中介擔(dān)保模式,3.后臺(tái)選擇(賣(mài)家進(jìn)入支付中心列表選擇))
'transport_desc' => '', //物流說(shuō)明
'trans_type' => $trans_type, //交易類(lèi)型
'agentid' => '', //平臺(tái)ID
'agent_type' => '', //代理模式(0.無(wú)代理,1.表示卡易售模式,2.表示網(wǎng)店模式)
'seller_id' => '' //賣(mài)家商戶(hù)號(hào)
);
ksort($parameter);
reset($parameter);
$param = '';
$sign = '';
foreach ($parameter AS $key => $val)
{
$param .= "$key=" .urlencode($val). "&";
if("" != $val && "sign" != $key) {
$sign .= "$key=$val&";
}
}
$param = substr($param, 0, -1);
$sign .= "key=".$payment['tenpay_key'];
$sign = strtolower(md5($sign));
$button = '<div style="text-align:center"><a
href="https://gw.tenpay.com/gateway/pay.htm?'.$param.
'&sign='.$sign.'"><button>立即使用財(cái)付通支付</button></a></div>';
return $button;
/* 清空購(gòu)物車(chē) */
require_once DEDEINC.'/shopcar.class.php';
$cart = new MemberShops();
$cart->clearItem();
$cart->MakeOrders();
return $button;
}
/**
* 響應(yīng)操作
*/
function respond()
{
/* 引入配置文件 */
$code = preg_replace( "#[^0-9a-z-]#i", "", $_GET['code'] );
require_once DEDEDATA.'/payment/'.$code.'.php';
$attach = $_GET['attach'];
$trade_state = $_GET['trade_state'];
$total_fee = $_GET['total_fee'];
$out_trade_no = trim($_GET['out_trade_no']);
if(preg_match ("/S-P[0-9]+RN[0-9]/",$order_sn)) {
//檢查支付金額是否相符
$row = $this->dsql->GetOne("SELECT * FROM ym_shops_orders WHERE oid = '{$order_sn}'");
if ($row['priceCount'] != $_GET['total_fee'])
{
return $msg = "支付失敗,支付金額與商品總價(jià)不相符!";
}
$this->mid = $row['userid'];
/* 檢查數(shù)字簽名是否正確 */
ksort($_GET);
reset($_GET);
$sign = '';
foreach ($_GET AS $key => $val)
{
if("" != $val && "sign" != $key && $key != 'code') {
$sign .= "$key=$val&";
}
}
$sign .= "key=".$payment['tenpay_key'];
if(strtolower(md5($sign))==strtolower($_GET['sign']))
{
if($trade_state==0)
{
/* 改變訂單狀態(tài) */
if($this->success_db($out_trade_no))
return $msg = "支付成功!<br> <a href='/'>返回主頁(yè)</a> <a href='/member'>會(huì)員中心</a>";
else return $msg = "支付失敗!<br> <a href='/'>返回主頁(yè)</a> <a href='/member'>會(huì)員中心</a>";
}
}
else{
//return $msg = "支付失敗!<br> <a href='/'>返回主頁(yè)</a> <a href='/member'>會(huì)員中心</a>";
}
}
/*處理物品交易*/
function success_db($order_sn)
{
$time=time();
$mid=$this->mid;
//獲取訂單信息,檢查訂單的有效性
$row = $this->dsql->GetOne("SELECT state,priceCount FROM ym_shops_orders WHERE oid='$order_sn' ");
if($row['state'] > 0)
{
return TRUE;
}
/* 改變訂單狀態(tài)_支付成功 */
$sql = "UPDATE `ym_shops_orders` SET `state`='1' WHERE `oid`='$order_sn' AND `userid`='".$this->mid."'";
if($this->dsql->ExecuteNoneQuery($sql))
{
$this->log_result("verify_success,訂單號(hào):".$order_sn); //將驗(yàn)證結(jié)果存入文件
return TRUE;
} else {
$this->log_result ("verify_failed,訂單號(hào):".$order_sn);//將驗(yàn)證結(jié)果存入文件
return FALSE;
}
}
function log_result($word) {
global $cfg_cmspath;
$fp = fopen(dirname(__FILE__)."/../../data/payment/log.txt","a");
flock($fp, LOCK_EX) ;
fwrite($fp,$word.",執(zhí)行日期:".strftime("%Y-%m-%d %H:%I:%S",time())."\r\n");
flock($fp, LOCK_UN);
fclose($fp);
}
}
|

















