1. 程式人生 > >方維o2o系統多通道支付的實現

方維o2o系統多通道支付的實現

方維o2o系統多通道支付的實現

一、後端支付管理:

1,所有支付方式的php檔案事先已經存在system/payment下面,每個檔案用$payment_lang儲存支付方式的資訊,比如支付寶的:

$payment_lang = array(
	'name'	=>	'支付寶支付',
	'alipay_partner'	=>	'合作者身份ID',
	'alipay_account'	=>	'支付寶帳號',
	'alipay_key'		=>	'校驗碼',
	'alipay_service'	=>	'介面方式',
	'alipay_service_0'	=>	'使用標準雙介面',
	'alipay_service_1'	=>	'擔保交易介面',
	'alipay_service_2'	=>	'即時到帳介面',
	'GO_TO_PAY'	=>	'前往支付寶線上支付',
	'VALID_ERROR'	=>	'支付驗證失敗',
	'PAY_FAILED'	=>	'支付失敗',
);

用read_modules()讀取payment檔案下的php檔案。

2,安裝和解除安裝對應增加和刪除fanwe_payment裡的資料;如果沒有安裝,則顯示安裝,否則顯示編輯和解除安裝。

<if condition="$payment_item['installed'] eq 0">
	<a href="{:u("Payment/install",array("class_name"=>$payment_item['class_name']))}">{%INSTALL}</a>
<else />
	<a href="{:u("Payment/edit",array("id"=>$payment_item['id']))}">{%EDIT}</a>
	<a href="javascript:uninstall({$payment_item.id});" >{%UNINSTALL}</a>
</if>

編輯資訊根據各個支付類檔案的$config存在fanwe_payment的config欄位裡面,該欄位儲存結構如下:

{
	s:14:"alipay_partner";s:16:"2088231262522650";
	s:14:"alipay_account";s:21:"[email protected]";
	s:10:"alipay_key";s:32:"2f7lj6056yddba2sbnm8jsdbs17t5ysa";
	s:14:"alipay_service";s:1:"2";
}

二、前端購物車頁面

http://www.xxxx.com/index.php?ctl=cart


操作:

1,刪除購物車商品和修改商品數量

2,點選結算

http://www.xxxx.com/index.php?ctl=cart&act=check
配送資訊
訂單資訊(商品資訊)
操作:
1,支付方式選擇
選擇支付方式的時候執行 ctl=ajax&act=count_buy_total()計算總價,ajax返回更新頁面總價。
2,確認訂單,付款
提交的地址:頁面是從使用者訂單查詢而來還是直接購買而來,從訂單處來的則是order_done

<form name="cart_form" id="cart_form" action="{if $order_info}{url x="index" r="cart#order_done"}{else}{url x="index" r="cart#done"}{/if}" method="post">

根據上面的action,在ctl=cart&act=done或者ctl=cart&act=order_done中建立支付單號
sytstem/model/cart.php----------------make_payment_notice();
資訊存在表fanwe_payment_notice中;

如果是代金券支付

require_once(APP_ROOT_PATH."system/payment/Voucher_payment.php");
$ voucher_payment = new Voucher_payment();
$voucher_payment->direct_pay($ecv_data['sn'],$ecv_data['password'],$payment_notice_id);

如果是餘額支付

require_once(APP_ROOT_PATH."system/paymen/Account_payment.php");
$account_payment = new Account_payment();
$account_payment->get_payment_code($payment_notice_id);

然後根據訂單支付狀態是否成功:

$data['jump'] = url("index","payment#done",array("id"=>$order_id));(購買成功)
$data['jump'] = url("index","payment#pay",array("id"=>$payment_notice_id));(去支付)

跳轉到:
http://www.xxxx.com/index.php?ctl=payment&act=pay&id=316
在ctl=payment&act=pay中,根據選擇的支付方式,例項化對應的支付方式類

require_once(APP_ROOT_PATH."system/payment/".$payment_info['class_name']."_payment.php");
$payment_class = $payment_info['class_name']."_payment";
$payment_object = new $payment_class();

每個支付類檔案呼叫各自的支付模型檔案來使用相關函式
支付模型檔案主要存在於:
system/libs/payment.php
system/model/payment.php
和system/payment下的資料夾裡
操作:
支付寶–前往支付寶線上支付
微信–掃碼支付