abrels.inc.php_pay_base.php

/*

*说明

*构造参数 $mode 为支付接口文件夹名

*文件夹内要求三个文件

*index.php 支付接口网关程序 入口函数为

* string makeurl(

*string$order_no,//订单号

*float$total_fee,//订单总额

*stringsubject,//标题,买家付款看到的提示

*stringcontent//详细说明

*)

*要求返回支付接口网关地址

*

*$pay->by.php 支付接口通知程序

*需要在程序中建立一个本对象实例,调用本对象的

*bool $pay->getData() 方法获得数据,本方法使用 order_no 属性查找,扩展接口在本函数中指定要获得的字段

*在验证合法后

*调用本对象的

*bool setStatus(

*integer$status//要设置的订单状态码 取值如下的常量定义

*string$remark//操作说明,非必需

*) 方法设置订单状态

*

*

*

*

*/

define('PAY_DIR', dirname(__FILE__) . '/');//定义本文件的服务器绝对路径。以”/“结尾,下同

empty($db) && require_once(dirname(PAY_DIR) . '/general.inc.php');

define('PAY_PATH', $cms_abs.'include/paygate/');//定义本文件的URL绝对路径

error_reporting(0);

//订单状态常量

define('PAY_FAIL', -2);

define('PAY_FINISHED', -1);

define('PAY_WAIT_PAY', 1);

define('PAY_WAIT_GOODS', 2);

define('PAY_CONFIRM_GOODS', 3);

class pay_base{

var $by;

var $mode;

var $service;

var $notify_url;

var $return_url;

var $order_sn;

var $order_id;

var $status;

var $totalfee;

var $subject;

var $content;

var $dataok;

function pay_base($mode){

$this->__construct($mode);

}

function __construct($mode){

$this->mode = $mode;

}

function send($sn, $subject, $content, $jumpurl = ''){

$this->order_sn= $sn;

$this->subject= $subject;

$this->content= $content;

$this->jumpurl= $jumpurl;

$this->service= "$this->mode/index.php";

$this->notify_url= "$this->mode/$this->by.php";

if(!is_dir(PAY_DIR.$this->mode) || !is_file(PAY_DIR.$this->service) || !is_file(PAY_DIR.$this->notify_url))

$this->message(

array(

'title'=>'调用错误',

'content'=>'指定支付接口不在在或不完整!'

)

);

if(!$this->getData())

$this->message(

array(

'title'=>'调用错误',

'content'=>'获取指定参数失败!'

)

);

$this->notify_url= PAY_PATH . $this->notify_url;

$this->return_url= PAY_PATH . "$this->mode/return_$this->by.php";

require_once(PAY_DIR.$this->service);

if(!function_exists('makeurl'))

$this->message(

array(

'title'=>'调用错误',

'content'=>'未定义指定支付接口函数 makeurl!'

)

);

if(!$url = makeurl($this))

$this->message(

array(

'title'=>'调用错误',

'content'=>'指定支付接口函数 makeurl 返回网关地址失败!'

)

);

$this->show($url);

}

function getData(){

if($this->dataok)return true;

global $db, $tblprefix, $cfg_alipay, $cfg_alipay_partnerid, $cfg_alipay_keyt, $cfg_tenpay, $cfg_tenpay_keyt;

switch($this->mode){

case 'alipay':

$fields = array(

'alipay'=> 'account',

'alipid'=> 'partner',

'alikeyt'=> 'keyt',

);

$system = array(

'account'=> $cfg_alipay,

'partner'=> $cfg_alipay_partnerid,

'keyt'=> $cfg_alipay_keyt,

);

break;

case 'tenpay':

$fields = array(

'tenpay'=> 'account',

'tenkeyt'=> 'keyt',

);

$system = array(

'account'=> $cfg_tenpay,

'keyt'=> $cfg_tenpay_keyt,

);

break;

}

switch($this->by){

case 'orders':

$tmp = '';

foreach($fields as $k => $v)$tmp .= ",$k as $v";

$key = 'tomid';

$sql1 = "SELECT $key,mid,oid as order_id,state as status,totalfee FROM {

$tblprefix

}orders WHERE ordersn='$this->order_sn'";

$sql2 = "SELECT " . substr($tmp, 1) . " FROM {

$tblprefix

}members_sub WHERE mid=";

break;

case 'pays':

$sql1 = "SELECT pid as order_id,mid,amount as totalfee FROM {

$tblprefix

}pays WHERE ordersn='$this->order_sn'";

$this->status = 0;

break;

default :

$sql1 = '';

}

if($sql1 && $tmp = $db->fetch_one($sql1)){

if(empty($key) || empty($tmp[$key]) || empty($sql2)){

foreach($system as $k => $v)$this->$k = $v;

}else{

if(!$sql2 = $db->fetch_one($sql2 . $tmp[$key]))return false;

foreach($sql2 as $k => $v)$this->$k = $v;

}

if(!empty($key) && !empty($tmp[$key]))unset($tmp[$key]);

foreach($tmp as $k => $v)$this->$k = $v;

$this->dataok = 1;

return true;

}else{

return false;

}

}

function setStatus($status, $remark = ''){

global $db, $tblprefix, $timestamp, $onlineautosaving;

$ret = false;

switch($this->status = $status){

case PAY_FINISHED ://交易完成

$remark || $remark = '交易完成';

break;

case PAY_FAIL ://交易失败

$remark || $remark = '交易失败';

break;

case PAY_WAIT_PAY ://等待付款

$remark || $remark = '等待付款';

break;

case PAY_WAIT_GOODS ://等待发货

$remark || $remark = '等待发货';

break;

case PAY_CONFIRM_GOODS ://等待买家确认收货

$remark || $remark = '等待买家确认收货';

break;

default :

$this->message(

array(

'title'=>'调用错误',

'content'=>"未定义的交易状态 “$status”!"

)

);

}

switch($this->by){

case 'orders':

/*

$upsql = ",remark='" . addslashes($remark) . "'";

($status == PAY_WAIT_GOODS || ($status ==

...

...

(完整源码请下载查看)

...

展开> <收缩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值