方維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下的資料夾裡
操作:
支付寶–前往支付寶線上支付
微信–掃碼支付