方维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:"1696040649@163.com";
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下的文件夹里
操作:
支付宝–前往支付宝在线支付
微信–扫码支付