tp整合支付宝简单代码
2011-05-26 14:32 卫佳 阅读(397) 评论(0) 编辑 收藏 举报配置文件
/*
* 支付宝配置文件
*/
'partner' => "", //合作身份者ID
'security_code' => "", //安全检验码
'seller_email' => "@sina.com.cn", //签约支付宝账号或卖家支付宝帐户
'_input_charset' => "utf-8", //字符编码格式 目前支持 GBK 或 utf-8
'transport' => "http", //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
'notify_url' => "http://www.yuyueke.com/order/notifyurl.phtml",
'return_url' => "http://www.yuyueke.com/order/returnurl.phtml",
'show_url' => "http://www.yuyueke.com/reserv", //网站商品的展示地址,不允许加?id=123这类自定义参数jewelry display
'sign_type' => "MD5", //加密方式 不需修改
'antiphishing' => "1", //防钓鱼功能开关,'0'表示该功能关闭,'1'表示该功能开启。默认为关闭
//一旦开启,就无法关闭,根据商家自身网站情况请慎重选择是否开启。
'mainname' => "预约客",
)//'配置项'=>'配置值'
复制代码
每个文件
alipaynotify.class.php
<?php
/*
*类名:alipay_notify
*功能:付款过程中服务器通知类
*详细:该页面是通知返回核心处理文件,不需要修改
*版本:3.0
*修改日期:2010-05-24
'说明:
'以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
'该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
*/
//调试通知返回时,可查看或改写log日志的写入TXT里的数据,来检查通知返回是否正常
class alipay_notify {
var $gateway; //网关地址wedding veil
var $security_code; //安全校验码
var $partner; //合作伙伴ID
var $sign_type; //加密方式 系统默认
var $mysign; //加密结果(签名结果)
var $_input_charset; //字符编码格式
var $transport; //访问模式
/**构造函数
*从配置文件中初始化变量
*$partner 合作身份者ID
*$security_code 安全校验码
*$sign_type 加密类型
*$_input_charset 字符编码格式
*$transport 访问模式
*/
function alipay_notify($partner,$security_code,$sign_type,$_input_charset = "GBK",$transport= "https") {
$this->transport = $transport;
if($this->transport == "https") {
$this->gateway = "https://www.alipay.com/cooperate/gateway.do?";
}else {
$this->gateway = "http://notify.alipay.com/trade/notify_query.do?";
}
$this->partner = $partner;
$this->security_code = $security_code;
$this->mysign = "";
$this->sign_type = $sign_type;
$this->_input_charset = $_input_charset;
}
/********************************************************************************/
/**对notify_url的认证enamel jewelry
*返回的验证结果:true/false
*/
function notify_verify() {
//获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求
if($this->transport == "https") {
$veryfy_url = $this->gateway. "service=notify_verify" ."&partner=" .$this->partner. "¬ify_id=".$_POST["notify_id"];
} else {
$veryfy_url = $this->gateway. "partner=".$this->partner."¬ify_id=".$_POST["notify_id"];
}
$veryfy_result = $this->get_verify($veryfy_url);
//生成签名结果
if(empty($_POST)) { //判断POST来的数组是否为空
return false;
}
else {
$post = para_filter($_POST); //对所有POST返回的参数去空
$sort_post = arg_sort($post); //对所有POST反馈回来的数据排序
$this->mysign = build_mysign($sort_post,$this->security_code,$this->sign_type); //生成签名结果
//写日志记录
log_result("veryfy_result=".$veryfy_result."\n notify_url_log:sign=".$_POST["sign"]."&mysign=".$this->mysign.",".create_linkstring($sort_post));
//判断veryfy_result是否为ture,生成的签名结果mysign与获得的签名结果sign是否一致
//$veryfy_result的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关
//mysign与sign不等,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关
if (preg_match("/true$/i",$veryfy_result) && $this->mysign == $_POST["sign"]) {
return true;
} else {
return false;
}
}
}
/********************************************************************************/
/**对return_url的认证
*return 验证结果:true/false
*/
function return_verify() {
//获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求
if($this->transport == "https") {
$veryfy_url = $this->gateway. "service=notify_verify" ."&partner=" .$this->partner. "¬ify_id=".$_GET["notify_id"];
} else {
$veryfy_url = $this->gateway. "partner=".$this->partner."¬ify_id=".$_GET["notify_id"];
}
$veryfy_result = $this->get_verify($veryfy_url);
//生成签名结果
if(empty($_GET)) { //判断GET来的数组是否为空
return false;
}
else {
$get = para_filter($_GET); //对所有GET反馈回来的数据去空
$sort_get = arg_sort($get); //对所有GET反馈回来的数据排序
$this->mysign = build_mysign($sort_get,$this->security_code,$this->sign_type); //生成签名结果
//写日志记录
log_result("veryfy_result=".$veryfy_result."\n return_url_log:sign=".$_GET["sign"]."&mysign=".$this->mysign."&".create_linkstring($sort_get));
//判断veryfy_result是否为ture,生成的签名结果mysign与获得的签名结果sign是否一致
//$veryfy_result的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关
//mysign与sign不等,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关
if (preg_match("/true$/i",$veryfy_result) && $this->mysign == $_GET["sign"]) {
return true;
}else {
return false;
}
}
}
/**获取远程服务器ATN结果
*$url 指定URL路径地址
*return 服务器ATN结果集
*/
function get_verify($url,$time_out = "60") {
$urlarr = parse_url($url);
$errno = "";
$errstr = "";
$transports = "";
if($urlarr["scheme"] == "https") {
$transports = "ssl://";
$urlarr["port"] = "443";
} else {
$transports = "tcp://";
$urlarr["port"] = "80";
}
$fp=@fsockopen($transports . $urlarr['host'],$urlarr['port'],$errno,$errstr,$time_out);
if(!$fp) {
die("ERROR: $errno - $errstr<br />\n");
} else {
fputs($fp, "POST ".$urlarr["path"]." HTTP/1.1\r\n");
fputs($fp, "Host: ".$urlarr["host"]."\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ".strlen($urlarr["query"])."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $urlarr["query"] . "\r\n\r\n");
while(!feof($fp)) {
$info[]=@fgets($fp, 1024);
}
fclose($fp);
$info = implode(",",$info);
return $info;
}
}
}
?>
复制代码