代码改变世界

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. "&notify_id=".$_POST["notify_id"];

        } else {

            $veryfy_url = $this->gateway. "partner=".$this->partner."&notify_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. "&notify_id=".$_GET["notify_id"];

        } else {

            $veryfy_url = $this->gateway. "partner=".$this->partner."&notify_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;

        }

    }

}

?>

复制代码