<?php
/**
* 支付宝支付驱动
* @author Devil
* @version v_1.0.0
*/
class Alipay
{
private $config;
/**
* [__construct 构造方法, 初始化配置信息]
*/
public function __construct()
{
$this->config = array(
'alipay_key' => '', //key
'alipay_partner' => '', //partner
'alipay_account' => '', //支付宝账户名称
'notify_url' => '', //异步通知地址
'call_back_url' => '', //同步返回地址
);
}
/**
* [Payment 生成即时到帐支付信息]
* @param [array] $order [订单数据]
*/
public function Payment($order)
{
$param = array(
'service' => 'create_direct_pay_by_user',
'partner' => $this->config['alipay_partner'],
'_input_charset' => 'utf-8',
'notify_url' => $this->config['notify_url'],
'return_url' => $this->config['call_back_url'],
/* 业务参数 */
'subject' => $order['name'],
'out_trade_no' => $order['number_id'],
'price' => $order['total_fee'],
'quantity' => 1,
'payment_type' => 1,
/* 物流参数 */
'logistics_type' => 'EXPRESS',
'logistics_fee' => 0,
'logistics_payment' => 'BUYER_PAY_AFTER_RECEIVE',
/* 买卖双方信息 */
'seller_email' => $this->config['alipay_account']
);
ksort($param);
$string = '';
$sign = '';
foreach($param AS $key=>$val)
{
$string .= "$key=" .urlencode($val). "&";
$sign .= "$key=$val&";
}
$string = substr($string, 0, -1);
$sign = md5(substr($sign, 0, -1).$this->config['alipay_key']);
header('location:https://mapi.alipay.com/gateway.do?'.$string. '&sign='.$sign.'&sign_type=MD5');
}
/**
* [Respond 异步请求处理]
* @return [string] [成功success, 失败其它]
*/
public function Respond()
{
/* 参数处理 */
if (!empty($_POST))
{
foreach($_POST as $key => $val)
{
$_GET[$key] = $val;
}
}
$param = $_GET;
ksort($param);
/* 判断是否已经处理过 */
$this->IsRespond($param);
/* 签名校验 */
$sign = '';
foreach($param AS $key=>$val)
{
if($key != 'sign' && $key != 'sign_type' && $key != 'code')
{
$sign .= "$key=$val&";
}
}
$sign = md5(substr($sign, 0, -1).$this->config['alipay_key']);
if($Sign == $param['sign'] && $param['trade_status'] == 'TRADE_SUCCESS')
{
//$param['out_trade_no'] 参数是唯一标识符
exit('success');
}
}
/**
* [IsRespond 是否处理过操作]
* @param [array] $param [参数]
*/
private function IsRespond($param)
{
//$param['out_trade_no'] 参数是唯一标识符
//如果处理过了可以直接exit('success');
}
}
?>
发表评论: